Skip to content

对话上下文入门:会话、状态与记忆

上下文为何重要

要实现有意义的多轮对话,智能体必须理解上下文。就像人类一样,它们需要记住之前的对话内容和行为,以保持对话连贯性并避免重复。Agent Development Kit (ADK) 通过 SessionStateMemory 提供了结构化的上下文管理方式。

核心概念

与智能体的交互可以理解为存在独立的对话线程,这些线程可能调用长期知识

  1. Session:当前对话线程

    • 表示用户与智能体系统之间单次持续进行的交互
    • 包含该特定交互中的消息和动作(Events)时序记录
    • Session 还可保存仅在此次对话期间相关的临时数据(State)
  2. State (session.state):当前对话中的数据

    • 存储在特定 Session 中的数据
    • 用于管理仅与当前活跃对话线程相关的信息(例如本次聊天中的购物车商品,本次会话中提到的用户偏好)
  3. Memory:可检索的跨会话信息

    • 表示可能跨越多次历史会话或包含外部数据源的信息存储
    • 作为知识库供智能体检索,以获取超出当前对话范围的信息或上下文

上下文管理服务

ADK 提供以下管理服务:

  1. SessionService:管理对话线程(Session 对象)

    • 处理生命周期:创建、检索、更新(追加 Events、修改 State)和删除单个 Session 线程
    • 确保智能体拥有当前轮次所需的正确历史和状态
  2. MemoryService:管理长期知识存储(Memory)

    • 处理将信息(通常来自已完成的 Session)存入长期存储
    • 提供基于查询检索存储知识的方法

实现方案:ADK 为 SessionServiceMemoryService 提供不同实现,允许选择最适合应用需求的存储后端。值得注意的是,两种服务都提供内存实现,这些实现专为本地快速测试和开发设计。需注意:使用这些内存选项存储的所有数据(会话、状态或长期知识)在应用重启时都会丢失。如需超越本地测试的持久化和可扩展性,ADK 还提供数据库和云服务选项。

总结:

  • SessionState:聚焦当下——单次活跃对话的历史和临时数据,主要由 SessionService 管理
  • 记忆:聚焦过去和外部信息——可能跨越多次对话的可检索档案,由 MemoryService 管理

后续内容

后续章节将深入探讨以下组件:

  • Session:理解其结构和 Events
  • State:如何有效读写和管理会话特定数据
  • SessionService:为会话选择合适的存储后端
  • MemoryService:探索存储和检索更广泛上下文的选项

理解这些概念对于构建能够进行复杂、有状态且具备上下文感知能力的对话智能体至关重要。