用途:让一次对话等于一个 ADK session id、一个 Maple Agent Session,并采集用户与助手消息、模型调用、带参数与结果的工具调用、失败与 token。ADK 自身已发出 OTel spans(scope gcp.vertex.agent),无需额外埋点包,只需补上 tracer provider、环境变量、一个插件与一个 span processor。
主要能力:可见完整转录、模型与工具调用、工具失败(ERROR/error.type)、子智能体泳道与 token;每次 run_async() 为一条 trace、一个回合。
使用方式(Python):要求 google-adk>=2.10;安装 pip install "google-adk>=2.10" opentelemetry-exporter-otlp-proto-http(用到 LiteLlm 才加 litellm)。设置 OTEL_SERVICE_NAME、OTEL_EXPORTER_OTLP_ENDPOINT、OTEL_EXPORTER_OTLP_HEADERS、OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental、OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=SPAN_ONLY、ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS=false。Runner 应用需新建 telemetry.py 并定义 SkipDuplicateToolSpans 与 ToolCallAttributes,在导入 google.adk 前导入;为每个 Runner 注册 plugins=[telemetry.ToolCallAttributes()]。所有回合用同一 session_id 调用 runner.run_async()。脚本退出前 force_flush() 与 shutdown()。TypeScript 走 references/typescript.md,环境变量与 Python 插件不适用。
限制:成本显示 unpriced(ADK 不记录成本);模型为请求 id 而非实际服务 id,无 gen_ai.response.id;adk web/api_server 下工具计数可能偏高;工具返回 {"status":"error"} 不会被标为失败;不要为 OTel 包锁更高版本,也不要去掉 call_llm spans。