对话上下文介绍:Session、State 和 Memory¶
为什么上下文很重要¶
有意义的多轮对话需要智能体理解上下文。就像人类一样,它们需要记住已经说过和做过的事情,以保持连贯性并避免重复。智能体开发套件(ADK)提供了结构化的方式来通过 Session
、State
和 Memory
管理这种上下文。
核心概念¶
可以将与智能体的交互视为独特的对话线程,可能会利用长期知识。
-
Session
:当前对话线程 {: #session-the-current-conversation-thread}- 表示用户和智能体系统之间的单一、持续交互。
- 包含特定交互的消息和动作(
Events
)的时间顺序序列。 Session
还可以保存在此对话期间仅相关的临时数据(State
)。
-
State
(session.state
):当前对话中的数据 {: #state-data-within-the-current-conversation}- 存储在特定
Session
中的数据。 - 用于管理仅与当前活动对话线程相关的信息(例如,在此对话中的购物车项目,在此会话中提到的用户偏好)。
- 存储在特定
-
Memory
:可搜索的跨会话信息 {: #memory-searchable-cross-session-information}- 表示可能跨多个过去会话或包括外部数据源的信息存储。
- 它充当智能体可以搜索的知识库,以回忆超出即时对话的信息或上下文。
管理上下文:服务¶
ADK 提供了管理这些概念的服务:
-
SessionService
:管理对话线程(Session
对象) {: #sessionservice-manages-conversation-threads}- 处理生命周期:创建、检索、更新(追加
Events
,修改State
)和删除单个Session
线程。 - 确保智能体在当前回合中有正确的历史记录和状态。
- 处理生命周期:创建、检索、更新(追加
-
MemoryService
:管理长期知识存储(Memory
) {: #memoryservice-manages-the-long-term-knowledge-store}- 处理将信息(通常来自已完成的
Session
)摄入长期存储。 - 提供基于查询搜索这些存储知识的方法。
- 处理将信息(通常来自已完成的
实现:ADK 为 SessionService
和 MemoryService
提供不同的实现,使你能够选择最适合应用程序需求的存储后端。值得注意的是,这两种服务都提供了内存中实现;这些专为本地快速测试和开发设计。重要的是要记住,使用这些内存中选项存储的所有数据(会话、状态或长期知识)在应用程序重新启动时都会丢失。对于超出本地测试的持久性和可扩展性,ADK 还提供了数据库和基于云的服务选项。
总结:
Session
和State
:专注于此时此地——单一活动对话的历史和临时数据。主要由SessionService
管理。- Memory:专注于过去和外部信息——可搜索的存档,可能跨越多个对话。由
MemoryService
管理。
下一步是什么?¶
在接下来的部分中,我们将深入探讨每个组件:
Session
:了解其结构和Events
。State
:如何有效读取、写入和管理特定会话的数据。SessionService
:为你的会话选择正确的存储后端。MemoryService
:探索存储和检索更广泛上下文的选项。
理解这些概念对于构建能够进行复杂、有状态和上下文感知对话的智能体至关重要。