Skip to content

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

为什么上下文很重要

有意义的多轮对话要求智能体能够理解上下文。就像人类一样,智能体需要记住对话历史:已经说过和做过什么,以保持连贯性并避免重复。Agent Development Kit(ADK)通过 SessionStateMemory 提供了结构化的上下文管理方式。

核心概念

可以将你与智能体的不同对话实例视为独立的对话线程,它们可能会利用长期知识

  1. Session:当前对话线程

    • 表示用户与你的智能体系统之间单次、持续的交互
    • 包含该特定交互期间,智能体采取的消息和动作(称为 Events)的时间顺序序列。
    • 一个 Session 还可以保存仅在本次对话期间相关的临时数据(State)。
  2. State (session.state):当前对话中的数据

    • 存储在特定 Session 内的数据。
    • 用于管理当前、活跃对话线程相关的信息(例如,本次对话中的购物车商品,本 Session 中提到的用户偏好)。
  3. Memory:可检索的跨 Session 信息

    • 表示可能跨越多个过去 Session或包含外部数据源的信息存储。
    • 它作为一个知识库,智能体可以检索以回忆超出当前对话的信息或上下文。

管理上下文:服务

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

  1. SessionService:管理不同的对话线程(Session 对象)

    • 负责生命周期管理:创建、检索、更新(追加 Events、修改 State)和删除单个 Session
  2. MemoryService:管理长期知识存储(Memory

    • 负责将信息(通常来自已完成的 Session)导入长期存储。
    • 提供基于查询检索已存储知识的方法。

实现方式:ADK 为 SessionServiceMemoryService 都提供了不同的实现,你可以选择最适合应用需求的存储后端。值得注意的是,内存实现同时适用于这两种服务;它们专为本地测试和快速开发设计。需要牢记,使用这些内存选项存储的所有数据(sessions、state 或长期知识)在应用重启时都会丢失。如需持久化和可扩展性,ADK 还提供了基于云和数据库的服务选项。

总结:

  • Session & State:关注当前交互——单次、活跃对话的历史和数据。主要由 SessionService 管理。
  • Memory:关注过去和外部信息——一个可检索的归档,可能跨越多个对话。由 MemoryService 管理。

下一步是什么?

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

  • Session:理解其结构和 Events
  • State:如何高效地读取、写入和管理 session 专属数据。
  • SessionService:为你的 session 选择合适的存储后端。
  • MemoryService:探索存储和检索更广泛上下文的选项。

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