对话上下文介绍:会话、状态与记忆
上下文的重要性
有意义的多轮对话需要智能体理解上下文。就像人类一样,它们需要记住已经说过和做过的事情,以保持连续性并避免重复。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: 探索存储和检索更广泛上下文的选项。
理解这些概念是构建能够进行复杂、有状态和上下文感知对话的智能体的基础。