使用 CrewAI workflow telemetry 发送并验证事件
在受控应用程序边界使用 CrewAI workflow telemetry,保持事件契约较小,并在构建聚合视图之前验证已知结果。
- 1
选择结果
多智能体工作流程可观测性
- 2
定义合同
run_id、crew_name 和调用状态
- 3
在结果处发出
将已有的 Crew 和输入传给 run_research_crew。此包装仅支持同步 kickoff;异步方法、流和恢复的检查点需要各自的生命周期处理。
- 4
核实证据
Exercise a known fixture, then inspect crew_invocation for one correctly typed terminal row.
开始之前
开始之前
- 已存在的同步 Crew,配置 stream=False,并使用应用自身的输入
- 服务端 TELEMETRY_API_KEY;本示例使用 Python 标准库 HTTP,而非 Telemetry SDK
- 内容策略涵盖任务输入、智能体输出、内存、知识和工具负载
交货设置
安装并初始化服务器端
此同步 Crew 包装使用 Python 标准库 HTTP 发送事件;不需要安装或初始化 Telemetry SDK。 将摄取凭据保留在浏览器包、客户端可见的环境变量、源代码控制、日志和异常消息之外。
- 1使用 run_research_crew 包装已有的同步 Crew,并保持 stream=False。
- 2在成功、失败、重试或超时边界处添加结果事件。
- 3在启用警报之前发送受控装置并检查存储的行。
片段
从一个结构化事件开始
在工作流程完成、失败或重试的位置添加此形状。然后从真实的字段构建仪表板。
CrewAI workflow telemetry事件
import json
import os
import sys
from time import perf_counter
from urllib.request import Request, urlopen
from uuid import uuid4
def emit_crew_invocation(event):
try:
key = os.environ.get("TELEMETRY_API_KEY")
if not key:
return
request = Request(
"https://api.telemetry.sh/log",
data=json.dumps({"table": "crew_invocation", "data": event}).encode("utf-8"),
headers={"Authorization": key, "Content-Type": "application/json",
"User-Agent": "telemetry-crew-example/1"},
method="POST",
)
with urlopen(request, timeout=1) as response:
if not 200 <= response.status < 300:
raise RuntimeError("telemetry_delivery_unconfirmed")
except Exception:
try:
print("Telemetry delivery unconfirmed", file=sys.stderr)
except Exception:
pass
def run_research_crew(research_crew, inputs):
# Use an already configured, synchronous, non-streaming Crew.
if getattr(research_crew, "stream", False):
raise ValueError("This wrapper requires stream=False")
run_id = str(uuid4())
started_at = perf_counter()
status, error_type = "interrupted", None
try:
result = research_crew.kickoff(inputs=inputs)
status = "returned"
return result
except Exception as error:
status = "failed"
error_type = "timeout" if isinstance(error, TimeoutError) else "crew_error"
raise
finally:
# Neither metadata creation nor export may replace the crew outcome.
try:
emit_crew_invocation({
"run_id": run_id,
"crew_name": "research_crew",
"status": status,
"error_type": error_type,
"duration_ms": round((perf_counter() - started_at) * 1000),
"release": os.environ.get("APP_RELEASE"),
})
except Exception:
pass
# Pass your application's existing Crew and inputs:
# result = run_research_crew(research_crew, inputs)事件结构
run_id、crew_name 和调用状态
duration_ms、有限的 error_type 类别和 release
检查配置
检查站 1
将已有的 Crew 和输入传给 run_research_crew。此包装仅支持同步 kickoff;异步方法、流和恢复的检查点需要各自的生命周期处理。
检查站 2
kickoff 返回不代表工作已被接受或已交付下游。请单独记录审核决定;本示例不测量任务数、委派、重试或费用。
检查站 3
不要在这些事件中包含输入、输出、记忆、知识、工具数据或异常文本。
检查站 4
HTTP 导出使用一秒套接字超时,并非严格的总时限。导出和诊断失败不改变原始结果或异常;同步交付仍可能增加延迟。不提供持久队列、重试或关闭排空。
检查站 5
当需要步骤级诊断时,使用 CrewAI 自己的跟踪或回调,并与批准的运行 ID 相关联。
验证
证明事件已到达
在演练已知的成功和失败案例后运行此命令。如果您的最终事件契约与代码片段不同,请替换后备表名称。
CrewAI workflow telemetry 验证查询
SELECT *
FROM crew_invocation
ORDER BY timestamp_utc DESC
LIMIT 20;实施参考
在启用新的生产路径之前,请检查事件合同、数据安全指南和上游主要文档。
在哪里记录事件
保持结果事件小且可恢复
该模式提供了
- 除了上游工作流程之外,还有一个有界的、SQL 就绪的结果。
- 用于仪表板、警报和跨事件关联的稳定字段。
- 用于验证成功、失败、重试和超时行为的夹具驱动路径。
该模式不提供
- OTLP 导出器、自动收集管道或详细跟踪和诊断日志的替代品。
- 仅因为有效负载包含事件 ID,所以仅传送一次。
- 收集原始提供商有效负载、用户内容、凭证或受监管数据的权限。
事件模式示例
此工作流的事件模式
在将查询或代码片段适应生产之前,请检查行粒度、发出边界、所需类型、隐私类、示例有效负载和验证清单。
相关产品功能
继续此工作流程 AI代理监控
通过可审查的 SQL 连接智能体运行、工具使用、模型成本、质量和产品结果。
相关 SQL 查询示例
更多 SQL 示例
针对此工作流程中的结构化字段运行查询,检查示例结果,并将有用的答案转换为仪表板或警报。
按实施系列浏览
比较相关集成模式
与此集成配对的模板
更多集成