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