跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

追踪

最后更新 查看 MarkdownAgent 设置

Agent 追踪帮助你了解 Agent 在每一轮中做了什么,包括模型调用、工具运行与审批请求。使用 traces 调查意外行为、查找慢操作,并审阅 token 用量。

Agent 活动会与 fetch 调用、KV 读取和 D1 查询等运行时事件一同出现在 Workers traces 中。

启用追踪

在 Wrangler 配置中启用追踪:

{
  "$schema": "./node_modules/wrangler/config-schema.json",
  "observability": {
    "traces": {
      "enabled": true
    }
  }
}
[observability.traces]
enabled = true

查看 Agent 活动

打开 Cloudflare 仪表板中的 Agents 选项卡 ↗,查看已追踪的 Agent 与子 Agent。概览显示每个 Agent 的模型、会话数、运行次数与总 token 用量。

会话是由一轮或多轮组成的对话。一轮是对 Agent 的一次请求及其响应。

Agents 仪表板显示带有会话、运行与 token 总计的 Agent

选择一个 Agent 以查看其 traces。每条 trace 包含持续时间、token 分解与状态。

显示近期 traces 与 token 总计的 Agent 详情

有两种方式跟踪 Agent 做了什么:Session replay(会话回放) 与 Trace(追踪)。

会话重放会展示各轮次中记录的对话,包括消息、推理、工具调用和子代理活动。显示内容取决于你的负载记录设置。

显示消息、推理与子 Agent 工具调用的会话回放

Trace 是一轮中所执行操作的瀑布图。它显示每个操作何时开始、耗时多久,以及由哪个操作调用。

显示嵌套 Agent、模型、工具与 D1 span 的追踪瀑布图

追踪结构

每一轮都会产生由 span 组成的 trace,每个计时操作对应一个 span:

invoke_agent {agent class}
├── chat {model}
└── execute_tool {tool}
    └── tool_approval {tool}

invoke_agent span 覆盖整一轮。模型调用、工具运行与审批作为嵌套 span 出现。子 Agent 工作出现在调用它的操作之下。

Agent 身份

Agent span 使用三个字段标识仪表板中显示的工作:

  • Agent name 标识逻辑 Agent 实现。使用共享名称,例如 booking-agent。
  • Agent ID 标识稳定的 Agent 实例或资源,例如 booking-agent-production。
  • Conversation ID 标识当前对话或会话。

不要从请求、对话或用户标识符派生 Agent name。这会在仪表板中产生过多不同的 Agent 名称。

载荷隐私

消息和工具负载可能包含个人身份信息。只记录适合存储的负载。每种集成控制负载记录的方式各不相同,请在相应的框架设置部分进行配置。

Think 与 wrapAISDK() 使用 storeMessages 在 chat span 上记录输入与输出消息。它们使用 storeTools 在 execute_tool span 上记录参数与结果。

框架设置

追踪与载荷控制取决于集成。Think 与 Flue 会自动为轮次做插桩。直接的 AI SDK 调用与自定义执行框架需要额外设置。

Lifecycle本身不会创建代理 span。在直接安装 Lifecycle 的 Durable Object 上,请使用 wrapAISDK() 或 Workers 自定义 span API跟踪模型调用。

Think

Think 会自动检测代理并发出标准 span 结构。无需额外配置跟踪。

存储载荷

Think 默认不存储消息或工具载荷。要记录它们,请在 Agent 类上覆盖这些属性:

import { Think } from "@cloudflare/think";

export class MyAgent extends Think {
	storeMessages = true;
	storeTools = true;
}
import { Think } from "@cloudflare/think";

export class MyAgent extends Think<Env> {
	override storeMessages = true;
	override storeTools = true;
}

Flue

Flue v2+ ↗也会自动检测代理并发出标准 span 结构。无需额外配置跟踪。

排除载荷

Flue 默认存储消息、系统指令、工具定义、参数与结果。要停止记录它们,将 content 设为 false:

import { instrument } from "@flue/runtime";
import { createCloudflareTracing } from "@flue/runtime/cloudflare";

instrument(createCloudflareTracing({ content: false }));
import { instrument } from "@flue/runtime";
import { createCloudflareTracing } from "@flue/runtime/cloudflare";

instrument(createCloudflareTracing({ content: false }));

AI SDK

对于直接的 AI SDK ↗ 调用,包装命名空间一次:

import * as ai from "ai";
import { wrapAISDK } from "agents/observability/ai";

const tracedAI = wrapAISDK(ai);
import * as ai from "ai";
import { wrapAISDK } from "agents/observability/ai";

const tracedAI = wrapAISDK(ai);

wrapAISDK() 支持 AI SDK v6 与 v7。它为 generateText、streamText、generateObject 与 streamObject 做插桩,在模型与工具工作开始之前创建 invoke_agent 父 span。

与 Think 不同,直接调用 AI SDK 时没有可用于推断控制面板身份的 Agent 实例。请在每次调用中提供代理身份字段。

仅包含可安全存储的上下文。不要包含凭据、token、用户输入或其他密钥。

AI SDK v7

使用原生 AI SDK v7 telemetry 字段提供身份。你可以包含额外的标量上下文(例如租户或路由),使 traces 更易于查询:

await tracedAI.generateText({
	model,
	prompt: "Find an available appointment",
	runtimeContext: {
		agentId: "booking-agent-production",
		conversationId: "conversation-123",
		tenantId: "tenant-42",
	},
	telemetry: {
		functionId: "booking-agent",
		includeRuntimeContext: {
			agentId: true,
			conversationId: true,
			tenantId: true,
		},
	},
});
await tracedAI.generateText({
	model,
	prompt: "Find an available appointment",
	runtimeContext: {
		agentId: "booking-agent-production",
		conversationId: "conversation-123",
		tenantId: "tenant-42",
	},
	telemetry: {
		functionId: "booking-agent",
		includeRuntimeContext: {
			agentId: true,
			conversationId: true,
			tenantId: true,
		},
	},
});

这会将 functionId、agentId 与 conversationId 映射到 gen_ai.agent.name、gen_ai.agent.id 与 gen_ai.conversation.id。其他包含的标量值使用 cloudflare.agents.runtime_context.* 命名空间。

AI SDK v6

AI SDK v6 使用 experimental_telemetry.metadata 提供相同的身份与额外 span 数据:

await tracedAI.generateText({
	model,
	prompt: "Find an available appointment",
	experimental_telemetry: {
		functionId: "booking-agent",
		metadata: {
			agentId: "booking-agent-production",
			conversationId: "conversation-123",
			tenantId: "tenant-42",
		},
	},
});
await tracedAI.generateText({
	model,
	prompt: "Find an available appointment",
	experimental_telemetry: {
		functionId: "booking-agent",
		metadata: {
			agentId: "booking-agent-production",
			conversationId: "conversation-123",
			tenantId: "tenant-42",
		},
	},
});

额外的标量 metadata 使用 cloudflare.agents.metadata.* 命名空间。

存储载荷

wrapAISDK() 默认不存储消息或工具载荷。要在 AI SDK v6 或 v7 中记录它们,包装命名空间时传入存储选项:

import * as ai from "ai";
import { wrapAISDK } from "agents/observability/ai";

const tracedAI = wrapAISDK(ai, {
	storeMessages: true,
	storeTools: true,
});
import * as ai from "ai";
import { wrapAISDK } from "agents/observability/ai";

const tracedAI = wrapAISDK(ai, {
	storeMessages: true,
	storeTools: true,
});

自定义执行框架

若你的 Agent 未使用当前支持的框架,请用 Workers 自定义 span API 做插桩。为每一轮创建 invoke_agent span,模型调用使用 chat span,工具运行使用 execute_tool span,审批使用 tool_approval span。

span 名称、属性与实现示例请参阅 OpenTelemetry GenAI 参考实现 ↗。将这些示例适配到 Workers 自定义 span API。

添加 Agent 身份

将这些属性同时添加到 invoke_agent 与 chat span,以便 Agents 仪表板能将遥测与 Agent 及对话关联:

属性 invoke_agent span chat span
gen_ai.operation.name invoke_agent chat
gen_ai.agent.name 共享的 Agent 名称,例如 booking-agent 相同的 Agent 名称
gen_ai.agent.id Agent 实例的稳定标识符 相同的 Agent ID
gen_ai.conversation.id 对话、会话或线程标识符 相同的对话、会话或线程 ID

存储载荷

对于自定义 span,请手动添加载荷属性。在模型 span 上使用 gen_ai.input.messages、gen_ai.output.messages 与 gen_ai.system_instructions。在工具 span 上使用 gen_ai.tool.call.arguments 与 gen_ai.tool.call.result。自定义 span API 接受标量属性值,因此用 JSON.stringify() 序列化结构化载荷。只要该调用被采样,这些值就会被记录。仅添加可安全存储的载荷。

导出 traces

span 属性遵循 OpenTelemetry Generative AI 语义约定 ↗,因此任何读取 OpenTelemetry 数据的工具都可以消费它们。要将 traces 发送到外部目的地,请在 Workers Observability 中配置 OpenTelemetry 导出。

定价

Agent traces 使用 Workers tracing,并遵循 Workers Observability 定价。

Agents 视图显示你的 Agent 操作。完整 Worker trace 可能包含来自 SDK 内部以及其他 Worker 级操作的额外 span。要检查完整 trace,选择 View in Observability(在可观测性中查看)。

自 2026 年 12 月 1 日起,Agent traces 会计入账户级摄入与存储用量,遵循 Cloudflare Observability 定价。traces 保留七天。

限制

  • 将 Agent traces 用于调试与可观测性。traces 不是完整或无损的对话记录。
  • 载荷数据受 span 大小限制约束。长消息、推理、工具参数与结果可能被截断。这些限制可能会变化。
  • 会话回放不显示图像。

后续步骤

诊断通道

订阅结构化 Agent 事件,包括状态变更、调度、Workflows 等。

Lifecycle

在任意 Durable Object 中运行功能。

这篇文档对您有帮助吗?