跳转到内容

对话上下文介绍:会话、状态与记忆

上下文的重要性

有意义的多轮对话需要智能体理解上下文。就像人类一样,它们需要记住已经说过和做过的事情,以保持连续性并避免重复。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还提供了数据库和基于云的服务选项。

总结:

  • Session & State: 专注于当下——管理当前活跃对话的历史记录和临时数据。主要由SessionService管理。
  • 记忆: 专注于过去和外部信息 - 一个可搜索的存档,可能跨越多个对话。由MemoryService管理。

下一步是什么?

在接下来的章节中,我们将深入探讨每个组件的细节:

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

理解这些概念是构建能够进行复杂、有状态和上下文感知对话的智能体的基础。