用途:将使用 Cloudflare Agents SDK 的智能体(AIChatAgent、基于 Durable Objects 的 Agent、npm 包 agents / @cloudflare/ai-chat)接入 Maple 追踪。目标是:一个对话(一个智能体实例)对应一个 Maple Agent Session,每条用户消息对应一轮,包含转写内容、每次模型调用(模型、token)、每次工具调用(名称、参数、结果、失败)以及每个子智能体一条泳道。
主要能力与前置要求:需要 ai 版本 >= 7.0.106,若为 5.x/6.x 需先用 npx @ai-sdk/codemod v7 升级;ai@7 同时要求 agents >= 0.23、@cloudflare/ai-chat >= 0.11、@ai-sdk/react@^4、workers-ai-provider@^4 等一并升级。wrangler 配置需含 compatibility_flags: ["nodejs_compat"]。不覆盖不使用 AI SDK 直接调用模型(如 env.AI.run)的情况。
使用方式:通过 npm install ai@^7.0.106 @ai-sdk/otel @opentelemetry/api @opentelemetry/sdk-trace-base @opentelemetry/exporter-trace-otlp-http @opentelemetry/resources @opentelemetry/context-async-hooks 安装依赖;在智能体类旁新建 telemetry.ts,用 BasicTracerProvider 与 OTLPTraceExporter 指向 https://ingest.maple.dev/v1/traces(欧盟为 https://ingest.eu.maple.dev/v1/traces),并调用 registerTelemetry(new OpenTelemetry({ tracer: tracerProvider.getTracer("gen_ai"), usage: true, runtimeContext: true }))。Key 存为 Worker secret(npx wrangler secret put MAPLE_INGEST_KEY),wrangler dev 用 .dev.vars。每轮对话需在模型调用中传入 runtimeContext: { conversationId: this.name } 与 telemetry: { functionId, includeRuntimeContext: { conversationId: true } },并在每轮结束调用 tracerProvider.forceFlush()。
限制与注意事项:费用会显示为 unpriced(AI SDK 不提供成本);追踪与 Cloudflare 原生 Workers 追踪分离、trace id 不同。工具失败需从 execute 抛出才显示为失败。消息中的图片/文件按 base64 记录,413 时可考虑 recordInputs: false。不要为每次请求 shutdown 提供器,也不要添加第二个同时导出到 Maple 的 AI SDK 追踪器,否则模型调用会被重复记录。已存在的 OpenTelemetry(如 @microlabs/otel-cf-workers)应扩展而非重建。