使用 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_insights 或 ask_data_agent 工具时,即使 ADK 维护着更广泛的会话上下文,每个调用在 API 级别上也是独立无状态的。ADK 流式传输演示展示了此互动的推荐模式:数据子代理将解析后的响应数据写入 temp: 状态,下游代理随后在同一调用中读取该状态。
后续步骤
- 比较架构集成模式,以确定最适合您应用的方法。
- 了解 Conversational Analytics API 架构和关键概念。
- 了解如何进行身份验证并连接到数据源。
- 了解如何使用 HTTP 创建并配置智能体。
- 了解如何使用 Python 创建并配置智能体。
- 详细了解如何使用编写的上下文来引导智能体的行为。
- 了解如何 Conversational Analytics API 的 IAM 访问控制。
- 了解如何使用 CMEK 保护数据代理和对话。
- 了解如何呈现 Looker 数据源的智能体回答。