数据智能体的状态管理

使用 Conversational Analytics API 进行构建时,状态管理是一项重要的架构考虑因素。您需要管理 API 的对话状态,以及使用智能体开发套件 (ADK) 的应用所使用的框架的会话状态。

API 状态模式

Conversational Analytics API 中的 chat 方法支持互斥的上下文参数,这些参数决定了对话状态的处理方式。

您可以使用下表比较这些模式:

模式 对话记录 代理 参数 说明
使用话题引用进行聊天 有状态 由 API 管理 ConversationReference 通过引用现有对话及其关联的代理来继续进行有状态对话。 Google Cloud 会存储和管理对话记录。您只需在每轮中发送新消息。
与数据代理引用对话 无状态 由您的应用管理 DataAgentContext 发送引用已保存的数据代理以获取上下文的无状态消息。您的应用必须管理对话记录,并在每次请求中提供完整的对话记录。
使用内嵌上下文进行对话 无状态 由您的应用管理 InlineContext 发送无状态消息,直接在请求中提供所有上下文。此模式不使用已保存的数据代理。您的应用必须管理并提供完整的对话记录。

ADK 会话状态

如果您使用 ADK 框架进行编排,ADK 会提供一个独立于 Conversational Analytics API 状态的状态管理层。要构建正常运行的多代理系统,您必须了解这两个层。

ADK 使用键前缀惯例来控制状态变量的作用域和生命周期。请使用下表评估这些作用域:

密钥前缀 范围 生命周期 公开范围 示例
(无前缀) 会话 仅限当前会话 会话中的所有代理 当前对话主题或上次查询的结果
user: 用户 在同一用户的所有会话中 指定用户的所有代理和会话 用户偏好设置、已保存的数据代理 ID 或语言设置
app: 应用 所有用户的所有会话 所有代理和所有用户 全局应用配置、共享数据代理 ID 或功能标志
temp: 调用 仅限当前调用 有效调用中的当前代理 中间响应数据,例如流式传输块或正在进行的计算

如需详细了解如何在多代理系统中共享状态,请参阅 ADK 文档

API 状态和 ADK 状态如何交互

将 Conversational Analytics API 与 ADK 框架搭配使用时,状态层会独立运行:

  • API 状态:如果您的应用使用对话引用(有状态模式),则 API 会管理对话历史记录。如果您的应用使用数据代理上下文或内嵌上下文(无状态模式),则 API 在每次调用时都保持无状态。
  • ADK 会话状态:无论对话分析 API 使用何种模式,ADK 框架都会维护自己的会话、事件和状态变量。

例如,当您在 ADK 中使用 ask_data_insightsask_data_agent 工具时,即使 ADK 维护着更广泛的会话上下文,每个调用在 API 级别上也是独立无状态的。ADK 流式传输演示展示了此互动的推荐模式:数据子代理将解析后的响应数据写入 temp: 状态,下游代理随后在同一调用中读取该状态。

后续步骤