Skip to main content

BigQuery 回调处理器

社区Python预览版
Google BigQuery 是一个跨云工作、随数据扩展的无服务器且经济高效的企业数据仓库。
BigQueryCallbackHandler 允许您将 LangChain 和 LangGraph 的事件记录到 Google BigQuery。这对于监控、审计和分析 LLM 应用程序的性能非常有用。 主要特性:
  • LangGraph 支持:自动检测 LangGraph 节点,记录 NODE_STARTINGNODE_COMPLETEDGRAPH_START/END 事件
  • 延迟跟踪:为所有 LLM 和工具调用内置延迟测量
  • 事件过滤:可配置的允许列表/拒绝列表,以控制记录哪些事件
  • 图上下文管理器:明确的图执行边界和精确计时
  • 实时仪表板:基于 FastAPI 的监控 Web 应用,支持实时事件流
预览版发布BigQuery 回调处理器目前处于预览版。API 和功能可能会发生变化。 更多信息,请参阅 发布阶段描述
BigQuery Storage Write API此功能使用BigQuery Storage Write API,这是一项付费服务。 有关费用信息,请参阅 BigQuery 文档

安装

您需要安装带有 bigquery 额外依赖的 langchain-google-community。对于此示例,您还需要 langchain-google-genailanggraph

先决条件

  1. Google Cloud 项目,并已启用 BigQuery API
  2. BigQuery 数据集:在使用回调处理器之前,创建一个数据集来存储日志表。如果表不存在,回调处理器会自动在数据集内创建必要的事件表。
  3. Google Cloud Storage 存储桶(可选):如果您计划记录多模态内容(图像、音频等),建议创建一个 GCS 存储桶来卸载大文件。
  4. 身份验证
    • 本地:运行 gcloud auth application-default login
    • 云端:确保您的服务帐户具有所需权限。

IAM 权限

为了使回调处理器正常工作,运行应用程序的主体(例如,服务帐户、用户帐户)需要以下 Google Cloud 角色:
  • 项目级别的 roles/bigquery.jobUser 以运行 BigQuery 查询。
  • 表级别的 roles/bigquery.dataEditor 以写入日志/事件数据。
  • 如果使用 GCS 卸载:目标存储桶上的 roles/storage.objectCreatorroles/storage.objectViewer

与 LangGraph 智能体一起使用

要将 BigQueryCallbackHandler 与 LangGraph 智能体一起使用,请使用您的 Google Cloud 项目 ID、数据集 ID 和表 ID 实例化它。使用 graph_context() 方法来跟踪图执行边界,并启用带有延迟测量的 GRAPH_START/GRAPH_END 事件。 在调用智能体时,通过 config 对象中的 metadata 字典传递 session_iduser_idagent

配置选项

您可以使用 BigQueryLoggerConfig 自定义回调处理器。
bool
default:"True"
要将处理程序禁用,使其不将数据记录到 BigQuery 表,请将此参数设置为 False
List[str]
default:"['event_type', 'agent', 'user_id']"
自动创建 BigQuery 表时用于聚类的字段。
str
default:"None"
用于卸载大内容(图像、二进制大对象、大文本)的 GCS 存储桶名称。如果未提供,大内容可能会被截断或替换为占位符。
str
default:"None"
用作 ObjectRef 列授权器的 BigQuery 连接 ID(例如 us.my-connection)。将 ObjectRef 与 BigQuery ML 一起使用时需要。
int
default:"512000"
(500 KB) 在卸载到 GCS(如果已配置)或截断之前,存储在 BigQuery 内联中的文本内容的最大长度(以字符为单位)。
int
default:"1"
写入 BigQuery 之前要批量处理的事件数量。
float
default:"1.0"
刷新部分批次之前等待的最长时间(以秒为单位)。
float
default:"10.0"
关闭期间等待日志刷新的秒数。
List[str]
default:"None"
要记录的事件类型列表。如果为 None,则记录除 event_denylist 中事件之外的所有事件。
List[str]
default:"None"
要跳过记录的事件类型列表。
bool
default:"True"
是否记录详细的内容部分(包括 GCS 引用)。
str
default:"agent_events_v2"
如果未显式提供给回调处理器构造函数,则使用的默认表 ID。
RetryConfig
default:"RetryConfig()"
写入 BigQuery 失败时重试逻辑(最大重试次数、延迟、乘数)的配置。
int
default:"10000"
在丢弃新事件之前,内部缓冲队列中可容纳的最大事件数。
以下代码示例展示了如何为 BigQuery 回调处理器定义带有事件过滤的配置:

架构和生产设置

插件会在表不存在时自动创建它。但是,对于生产环境,我们建议使用以下 DDL 手动创建表,该 DDL 利用 JSON 类型实现灵活性,并利用 REPEATED RECORD 处理多模态内容。 推荐的 DDL:

事件类型和负载

content 列包含一个特定于 event_typeJSON 对象。 content_parts 列提供了内容的结构化视图,对于图像或卸载的数据尤其有用。
内容截断
  • 可变内容字段被截断为 max_content_length(在 BigQueryLoggerConfig 中配置,默认为 500KB)。
  • 如果配置了 gcs_bucket_name,大内容将被卸载到 GCS 而不是被截断,并且引用存储在 content_parts.object_ref 中。

LLM 交互

这些事件跟踪发送到 LLM 的原始请求和从 LLM 接收的响应。

工具使用

这些事件跟踪智能体执行工具的情况。

链执行

这些事件跟踪高级链/图的开始和结束。

检索器使用

这些事件跟踪检索器的执行。

智能体操作

这些事件跟踪智能体采取的特定操作。

其他事件

高级分析查询

一旦您的智能体运行并记录事件,您就可以对 agent_events_v2 表执行强大的分析。

1. 重建跟踪(对话轮次)

使用 trace_id 对属于单个执行流的所有事件(链、LLM、工具)进行分组。

2. 分析 LLM 延迟和令牌使用情况

计算 LLM 调用的平均延迟和总令牌使用量。

3. 使用 BigQuery 远程模型(Gemini)分析多模态内容

如果您将图像卸载到 GCS,可以直接使用 BigQuery ML 分析它们。

4. 分析跨度层次结构和持续时间

使用跨度 ID 可视化智能体操作(LLM 调用、工具使用)的执行流程和性能。

5. 查询卸载的内容(获取签名 URL)

6. 高级 SQL 场景

这些高级模式演示了如何使用 BigQuery ML 对数据进行会话化、分析工具使用情况以及执行根本原因分析。

BigQuery 中的对话分析

对话分析您还可以使用 BigQuery 对话分析 以自然语言分析您的智能体日志。 只需提出以下问题:
  • “显示一段时间内的错误率”
  • “最常见的工具调用是什么?”
  • “识别令牌使用量高的会话”

Looker Studio 仪表板

您可以使用我们预构建的 Looker Studio 仪表板模板 可视化智能体的性能。 要将此仪表板连接到您自己的 BigQuery 表,请使用以下链接格式,将占位符替换为您的特定项目、数据集和表 ID:

LangGraph 集成

BigQueryCallbackHandler 为 LangGraph 智能体提供了增强支持,包括自动节点检测、图级跟踪和延迟测量。

LangGraph 事件类型

除了标准的 LangChain 事件外,回调处理器还会自动检测并记录 LangGraph 特定事件:

图上下文管理器

使用 graph_context() 方法显式标记图执行边界。这可以启用带有精确延迟测量的 GRAPH_STARTGRAPH_END 事件:

延迟跟踪

回调处理器会自动跟踪所有操作的延迟,并将测量值存储在 latency_ms JSON 列中:

事件过滤

使用 event_allowlistevent_denylist 来控制记录哪些事件:
或者排除嘈杂的事件:

示例和资源

示例代码

以下示例演示了 BigQuery 回调处理器的各种功能:

分析笔记本

LangGraph 智能体分析笔记本 提供了全面的 BigQuery 分析查询,用于:
  • 实时事件监控
  • 工具使用情况分析
  • 延迟分析和趋势
  • 错误调试
  • 用户参与度指标
  • 时间序列可视化

实时监控仪表板

提供了一个 基于 FastAPI 的监控仪表板,用于实时智能体监控: 特性:
  • 通过服务器发送事件 (SSE) 的实时事件流
  • 事件分布和延迟趋势的交互式图表
  • 带有详细时间线视图的会话跟踪
  • 20 多个用于分析查询的 REST API 端点
  • 每 5 秒自动刷新

反馈

我们欢迎您对 BigQuery 智能体分析提出反馈。如果您有任何问题、建议或遇到任何问题,请通过 bqaa-feedback@google.com 联系团队。

其他资源