Skip to content

对话上下文介绍:Session、State 和 Memory

为什么上下文很重要

有意义的多轮对话需要智能体理解上下文。就像人类一样,它们需要记住已经说过和做过的事情,以保持连贯性并避免重复。智能体开发套件(ADK)提供了结构化的方式来通过 SessionStateMemory 管理这种上下文。

核心概念

可以将与智能体的交互视为独特的对话线程,可能会利用长期知识

  1. Session:当前对话线程 {: #session-the-current-conversation-thread}

    • 表示用户和智能体系统之间的单一、持续交互
    • 包含特定交互的消息和动作(Events)的时间顺序序列。
    • Session 还可以保存在此对话期间仅相关的临时数据(State)。
  2. State (session.state):当前对话中的数据 {: #state-data-within-the-current-conversation}

    • 存储在特定 Session 中的数据。
    • 用于管理当前活动对话线程相关的信息(例如,在此对话中的购物车项目,在此会话中提到的用户偏好)。
  3. Memory:可搜索的跨会话信息 {: #memory-searchable-cross-session-information}

    • 表示可能跨多个过去会话或包括外部数据源的信息存储。
    • 它充当智能体可以搜索的知识库,以回忆超出即时对话的信息或上下文。

管理上下文:服务

ADK 提供了管理这些概念的服务:

  1. SessionService:管理对话线程(Session 对象) {: #sessionservice-manages-conversation-threads}

    • 处理生命周期:创建、检索、更新(追加 Events,修改 State)和删除单个 Session 线程。
    • 确保智能体在当前回合中有正确的历史记录和状态。
  2. MemoryService:管理长期知识存储(Memory) {: #memoryservice-manages-the-long-term-knowledge-store}

    • 处理将信息(通常来自已完成的 Session)摄入长期存储。
    • 提供基于查询搜索这些存储知识的方法。

实现:ADK 为 SessionServiceMemoryService 提供不同的实现,使你能够选择最适合应用程序需求的存储后端。值得注意的是,这两种服务都提供了内存中实现;这些专为本地快速测试和开发设计。重要的是要记住,使用这些内存中选项存储的所有数据(会话、状态或长期知识)在应用程序重新启动时都会丢失。对于超出本地测试的持久性和可扩展性,ADK 还提供了数据库和基于云的服务选项。

总结:

  • SessionState:专注于此时此地——单一活动对话的历史和临时数据。主要由 SessionService 管理。
  • Memory:专注于过去和外部信息——可搜索的存档,可能跨越多个对话。由 MemoryService 管理。

下一步是什么?

在接下来的部分中,我们将深入探讨每个组件:

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

理解这些概念对于构建能够进行复杂、有状态和上下文感知对话的智能体至关重要。