对话上下文入门:会话、状态与记忆
上下文为何重要
要实现有意义的多轮对话,智能体必须理解上下文。就像人类一样,它们需要记住之前的对话内容和行为,以保持对话连贯性并避免重复。Agent Development Kit (ADK) 通过 Session
、State
和 Memory
提供了结构化的上下文管理方式。
核心概念
与智能体的交互可以理解为存在独立的对话线程,这些线程可能调用长期知识。
-
Session
:当前对话线程- 表示用户与智能体系统之间单次持续进行的交互
- 包含该特定交互中的消息和动作(
Events
)时序记录 Session
还可保存仅在此次对话期间相关的临时数据(State
)
-
State
(session.state
):当前对话中的数据- 存储在特定
Session
中的数据 - 用于管理仅与当前活跃对话线程相关的信息(例如本次聊天中的购物车商品,本次会话中提到的用户偏好)
- 存储在特定
-
Memory
:可检索的跨会话信息- 表示可能跨越多次历史会话或包含外部数据源的信息存储
- 作为知识库供智能体检索,以获取超出当前对话范围的信息或上下文
上下文管理服务
ADK 提供以下管理服务:
-
SessionService
:管理对话线程(Session
对象)- 处理生命周期:创建、检索、更新(追加
Events
、修改State
)和删除单个Session
线程 - 确保智能体拥有当前轮次所需的正确历史和状态
- 处理生命周期:创建、检索、更新(追加
-
MemoryService
:管理长期知识存储(Memory
)- 处理将信息(通常来自已完成的
Session
)存入长期存储 - 提供基于查询检索存储知识的方法
- 处理将信息(通常来自已完成的
实现方案:ADK 为 SessionService
和 MemoryService
提供不同实现,允许选择最适合应用需求的存储后端。值得注意的是,两种服务都提供内存实现,这些实现专为本地快速测试和开发设计。需注意:使用这些内存选项存储的所有数据(会话、状态或长期知识)在应用重启时都会丢失。如需超越本地测试的持久化和可扩展性,ADK 还提供数据库和云服务选项。
总结:
Session
和State
:聚焦当下——单次活跃对话的历史和临时数据,主要由SessionService
管理- 记忆:聚焦过去和外部信息——可能跨越多次对话的可检索档案,由
MemoryService
管理
后续内容
后续章节将深入探讨以下组件:
Session
:理解其结构和Events
State
:如何有效读写和管理会话特定数据SessionService
:为会话选择合适的存储后端MemoryService
:探索存储和检索更广泛上下文的选项
理解这些概念对于构建能够进行复杂、有状态且具备上下文感知能力的对话智能体至关重要。