用途:让 Agno 应用的每一次对话在 Maple Agent Sessions 中显示为一个会话,每次 run() 记为一轮,包含对话记录、模型调用、工具调用(失败会标记)、团队成员泳道、token 与供应商返回的费用。
机制:使用 openinference-instrumentation-agno + OTel SDK + OTLP/HTTP 导出到 Maple。Agno 自带的 setup_tracing(db=...) 与 AgentOS(tracing=True) 只写入 AgentOS 数据库,不会导出 OTLP。目标 agno>=3.0(已验证 3.0.11);Agno 2.x 需 agno>=2.5.0。
安装依赖(按项目包管理器):agno>=3.0、openinference-instrumentation-agno>=1.0.10、opentelemetry-sdk、opentelemetry-exporter-otlp-proto-http。
环境变量:OTEL_SERVICE_NAME、OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=<env>、OTEL_EXPORTER_OTLP_ENDPOINT=https://ingest.maple.dev(欧盟用 https://ingest.eu.maple.dev)、OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <key>"、OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf、AGNO_TELEMETRY=false。
初始化:创建 tracing.py,构造 TracerProvider,添加 BatchSpanProcessor(OTLPSpanExporter()),调用 trace.set_tracer_provider(provider),再用 AgnoInstrumentor().instrument(tracer_provider=provider, config=TraceConfig(enable_genai_semconv=True)),其中 enable_genai_semconv=True 必需。在入口文件顶部、构建智能体前导入 tracing。
会话:在每次 run/arun/print_response/continue_run 及 team、workflow 调用上传 session_id=<对话 id>,不要每请求新生成 id。
内容捕获默认开启;如需隐藏可设 OPENINFERENCE_HIDE_* 变量,但工具参数不受这些变量屏蔽。工具抛异常记为失败,返回错误字符串记为成功。给每个 Agent/Team 命名以便绘制泳道。
限制与注意:不要重复 instrument();不要自行添加 using_session() 或自定义 span 处理器;团队运行存在上下文泄漏(上游 agno#5573),脚本/循环中需用 asyncio.create_task 或 contextvars.copy_context() 隔离。无密钥时不得抛错或退出,只记录警告并跳过导出。流式延迟与推理 token 暂未提供展示。