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

核心概念

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

快速入门

基础会话管理

from agkit.agents import InMemoryMemory

# 创建内存实例
memory = InMemoryMemory()

# 为用户A创建会话
session_a = 'user-alice-session-1'
await memory.add(
    {
        'message': {
            'id': 'msg-1',
            'role': 'user',
            'content': 'Hello, I\'m Alice',
            'timestamp': datetime.now()
        },
        'state': {'user_id': 'alice'}
    },
    session_id=session_a
)

# 为用户B创建会话
session_b = 'user-bob-session-1'
await memory.add(
    {
        'message': {
            'id': 'msg-1',
            'role': 'user',
            'content': 'Hi, I\'m Bob',
            'timestamp': datetime.now()
        },
        'state': {'user_id': 'bob'}
    },
    session_id=session_b
)

# 获取会话专属历史记录
alice_history = await memory.list(session_id=session_a)
bob_history = await memory.list(session_id=session_b)

print('Alice:', alice_history[0]['message']['content'])
print('Bob:', bob_history[0]['message']['content'])

常见会话ID模式

您可以根据应用需求设计会话ID:
# 基于用户:每个用户一个会话
session_id = f'user-{user_id}'

# 基于对话:每个用户多个会话
session_id = f'user-{user_id}-conv-{conversation_id}'

# 基于时间:带时间戳的会话
session_id = f'user-{user_id}-{int(time.time() * 1000)}'

# 层级结构:复杂组织结构
session_id = f'org-{org_id}/team-{team_id}/user-{user_id}'

与Agent配合使用会话

from agkit.agents import InMemoryMemory
import uuid

memory = InMemoryMemory()

# Agent处理带会话隔离的请求
async def handle_user_message(user_id: str, message: str):
    session_id = f'user-{user_id}'
    
    # 将用户消息添加到会话
    await memory.add(
        {
            'message': {
                'id': str(uuid.uuid4()),
                'role': 'user',
                'content': message,
                'timestamp': datetime.now()
            }
        },
        session_id=session_id
    )
    
    # 获取Agent所需的会话历史
    history = await memory.list(session_id=session_id)
    
    # 使用Agent处理...
    response = await agent.run(
        messages=[m['message'] for m in history],
        session_id=session_id
    )
    
    return response

最佳实践

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

后续步骤