跳到主要内容

会话管理

核对日期:2026-05-09。

1. 定义与边界

会话管理是对用户与 Agent 多轮交互的生命周期、上下文窗口、消息历史、权限范围和隐私策略进行管理。它不同于状态管理:会话关注“用户连续交互上下文”,状态关注“某次任务执行进度”。

2. 为什么重要

Agent 常常需要引用前文、追踪用户偏好、继续未完成任务。但生产会话不能无限增长,也不能让一个用户、租户或权限域的上下文泄漏到另一个会话。会话管理决定了模型看到什么、忘记什么、压缩什么、保留多久。

3. 核心机制

会话对象建议包含:

{
"session_id": "sess_01",
"tenant_id": "tenant_a",
"user_id": "user_1",
"channel": "web",
"status": "active",
"context_policy": "support_default_v2",
"message_window": ["msg_101", "msg_102"],
"summary_ref": "summary_33",
"active_runs": ["run_01"],
"expires_at": "2026-06-08T00:00:00Z"
}

上下文构建流程:

4. 架构模式

模式适用场景风险
客户端持有历史简单聊天、低敏场景易篡改、泄漏、超长。
服务端会话库多端同步、权限控制需要 TTL、归档和删除。
摘要 + 最近窗口长对话摘要漂移会影响行为。
会话 + 任务 run 分离长任务和异步执行需要清晰映射关系。

5. 工程实现

上下文预算器:

def build_context(session_id, new_message, token_budget):
session = sessions.get(session_id)
messages = messages_repo.recent(session_id, limit=30)
summary = summaries.latest(session_id)
candidates = [system_prompt(), summary, *messages, new_message]
selected = trim_to_budget(candidates, token_budget)
return enforce_context_boundaries(selected, session.tenant_id)

会话与 run 的关系:

  • 一个 session 可以有多个 run。
  • 一个 run 必须绑定一个 session 或明确声明为无会话后台任务。
  • session 关闭不等于 run 自动取消,取消策略要显式配置。

6. 生产实践

  • 会话 TTL 按业务和合规要求配置,不要永久保留默认聊天历史。
  • 对摘要做版本化,记录摘要模型、Prompt 和原始消息范围。
  • 对跨渠道会话合并设置用户确认。
  • 每次模型调用都记录实际上下文组成,而不是只记录 session id。
  • 对上下文注入外部文档时加来源边界和可信级别。

7. 常见反模式

  • 把所有历史消息无条件塞进模型,导致成本和泄漏风险失控。
  • 只依赖模型摘要,不保留可审计原文引用。
  • 会话 id 可预测,缺少租户/用户权限校验。
  • 用户切换角色或权限后继续复用旧上下文。
  • 将长期记忆写入会话历史,导致隐私删除困难。

8. 评测方法

  • 上下文选择准确率:关键历史是否被保留,无关历史是否被剔除。
  • 摘要一致性:摘要是否保留事实、限制和用户意图。
  • 隔离测试:跨用户、跨租户、跨权限上下文不会混入。
  • 成本测试:P50/P95 输入 token 是否在预算内。

9. 安全与治理

  • 会话读写必须校验 tenant_iduser_id 和授权范围。
  • 敏感消息可以只存密文或引用,低权限日志只存摘要。
  • 提供用户数据删除和会话导出能力时要覆盖摘要、附件和 trace 引用。
  • 对 prompt injection 内容做标记,避免被摘要提升为系统事实。

10. 权威资料

11. 二次精修:会话对象与保留策略

会话管理要同时服务上下文连续性、权限隔离和隐私合规。建议把会话拆成元数据、可见消息、隐藏运行证据三层。

{
"session_id": "ses_01J...",
"tenant_id": "t_123",
"user_id": "u_456",
"channel": "web",
"created_at": "2026-05-09T10:00:00Z",
"last_active_at": "2026-05-09T10:05:00Z",
"retention_policy": "standard_30d",
"context_policy": {"max_messages": 30, "summarize_after_turns": 12, "redact_pii": true},
"active_runs": ["run_789"],
"access_scope": ["support:read", "ticket:create"]
}
层级内容是否给模型是否进审计
Session metadata租户、用户、渠道、保留策略部分
Conversation window最近用户和助手消息
Summary memory压缩后的长期上下文
Run evidencetool call、trace、审批记录通常否
Security context权限、风控、数据分级只给必要摘要

12. 会话生命周期

指标目标
Context Miss Rate因会话摘要丢失关键信息导致失败的比例
Session Cross-talk Rate不同用户/租户上下文混入,目标为 0
Stale Permission Rate会话权限与当前权限不一致的比例
PII Redaction Coverage会话日志中敏感字段脱敏覆盖率
Resume Success Rate中断后恢复同一任务的成功率

治理要求:会话 ID 不能作为权限凭证;共享链接要重新鉴权;摘要记忆要保留来源消息引用;用户删除请求要能级联删除可识别信息;客服坐席代操作必须写入代理人身份。

13. 补充权威资料

14. 主控验收清单

  • 会话是否绑定租户、用户、渠道和权限范围。
  • 会话恢复是否能续接未完成 run。
  • 会话摘要是否保留来源消息引用。
  • 权限变化后是否刷新或失效会话上下文。
  • 会话删除是否覆盖消息、摘要、附件和 trace 引用。
  • 共享链接是否重新鉴权。
  • 是否区分模型可见上下文和审计证据。
  • 是否对 prompt injection 内容打标,避免进入长期摘要。
  • 是否有跨用户上下文混入的自动检测。
  • 是否记录会话保留策略和过期时间。
  • 是否对高风险会话使用更严格审计。
  • 是否能按 session_id 找到全部 run 和反馈。
  • 是否对隐私字段加密或引用化存储。
  • 是否把会话恢复失败加入回归样本。
  • 是否定期抽检会话摘要质量。