跳转到主要内容
会话管理允许您通过内存操作中的sessionId参数处理多个并发对话。这是构建在AG-Kit内存应用程序接口之上的应用级模式。

核心概念

会话本质上是一个隔离对话上下文的唯一标识符(字符串)。所有内存操作都接受可选的sessionId参数,用于区分不同用户或对话的数据。

快速入门

基础会话管理

import { InMemoryMemory } from '@ag-kit/agents';

// 创建内存实例
const memory = new InMemoryMemory();

// 为用户A创建会话
const sessionA = 'user-alice-session-1';
await memory.add(
  {
    message: {
      id: 'msg-1',
      role: 'user',
      content: 'Hello, I\'m Alice',
      timestamp: new Date()
    },
    state: { userId: 'alice' }
  },
  { sessionId: sessionA }
);

// 为用户B创建会话
const sessionB = 'user-bob-session-1';
await memory.add(
  {
    message: {
      id: 'msg-1',
      role: 'user',
      content: 'Hi, I\'m Bob',
      timestamp: new Date()
    },
    state: { userId: 'bob' }
  },
  { sessionId: sessionB }
);

// 获取会话专属历史记录
const aliceHistory = await memory.list({ sessionId: sessionA });
const bobHistory = await memory.list({ sessionId: sessionB });

console.log('Alice:', aliceHistory[0].message.content); // "Hello, I'm Alice"
console.log('Bob:', bobHistory[0].message.content); // "Hi, I'm Bob"

常见会话ID模式

您可以根据应用需求设计会话ID:
// 基于用户:每个用户一个会话
const sessionId = `user-${userId}`;

// 基于对话:每个用户多个会话
const sessionId = `user-${userId}-conv-${conversationId}`;

// 基于时间:带时间戳的会话
const sessionId = `user-${userId}-${Date.now()}`;

// 层级结构:复杂组织结构
const sessionId = `org-${orgId}/team-${teamId}/user-${userId}`;

与Agent配合使用会话

import { InMemoryMemory } from '@ag-kit/agents';

const memory = new InMemoryMemory();

// Agent处理带会话隔离的请求
async function handleUserMessage(userId: string, message: string) {
  const sessionId = `user-${userId}`;
  
  // 将用户消息添加到会话
  await memory.add(
    {
      message: {
        id: crypto.randomUUID(),
        role: 'user',
        content: message,
        timestamp: new Date()
      }
    },
    { sessionId }
  );
  
  // 获取Agent所需的会话历史
  const history = await memory.list({ sessionId });
  
  // 使用Agent处理...
  const response = await agent.run({
    messages: history.map(m => m.message),
    sessionId
  });
  
  return response;
}

最佳实践

  1. 使用有意义的会话ID - 包含用户/对话标识符便于调试
  2. 实现会话清理机制 - 移除旧会话防止内存泄漏
  3. 处理会话过期 - 在应用中实现超时逻辑
  4. 单独存储会话元数据 - 记录创建时间、最后活动时间等
  5. 考虑隐私保护 - 及时清除不再需要的敏感会话数据

后续步骤