title: AI Agent可观测性:破解多步推理黑盒
tags: AI Agent,可观测性,Observability,OpenTelemetry,LangSmith,Langfuse,Arize Phoenix,Trace,Span,MCP,多步推理,调试,成本监控
category: 人工智能

AI Agent可观测性:破解多步推理黑盒

当一个Agent在15步推理中调用了7个工具、消耗了8万token、最终给了一个错误答案,你怎么知道它在哪一步走偏了。

2025年11月,一个市场研究Pipeline出事了。四个LangChain Agent通过A2A协议协作,Analyzer负责生成内容,Verifier负责验证。Verifier要求进一步分析,Analyzer照做。Verifier再次要求,Analyzer再次照做。

264小时后,账单到达:47,000美元。

没有人注意到。团队有监控仪表盘,仪表盘显示的是每日总消费。每日总额掩盖了一个会话以每分钟数千token的速度持续燃烧的事实。没有人设过per-session的token上限。没有断路器。Agent做着它被设计来做的事:迭代、验证、再迭代。真正的缺失在于没有任何外部约束终止这个完全合法的推理过程。

来源:dev.to LLM Production Incidents Postmortem 2025-2026, Gabriel Anhaia

这不是孤例。2025年7月,一个Claude Code用户在5小时内消耗了16.7亿token,成本在16,000到50,000美元之间。2026年初,一个CRM数据同步Agent在63小时内烧掉4,200美元。每一次事故都有同一个特征:团队有可观测性工具,但那些工具记录的是"已经花了多少",而不是"正在花多少、为什么在花"。

Agent时代最大的工程挑战已经从"怎么让Agent工作"变成了"Agent到底在干什么"。Zylos Research 2026年5月的报告显示,89%的组织已经部署了某种形式的Agent可观测性,这个比例甚至超过了评估(Eval)采用的52%。团队在定义质量标准之前就发现他们需要可见性。

这篇拆解Agent可观测性的完整体系:为什么传统监控全部失效、OpenTelemetry GenAI语义规范的六层架构、主流平台横评、成本可观测性的实战教训,以及那个仍然无解的推理不透明问题。

来源:Zylos Research 2026.05 Agent Observability Report, Maxim AI 2026 Platform Guide


目录

  1. 黑盒问题:为什么传统监控对Agent全部失效
  2. 核心概念:Trace、Span与执行树
  3. OpenTelemetry GenAI规范:六层架构拆解
  4. 实战:给Agent接入可观测性
  5. 平台横评:LangSmith vs Langfuse vs Arize Phoenix vs Maxim
  6. 成本可观测性:那些47,000美元的教训
  7. 调试实战:从Trace到根因的完整流程
  8. 辩证看待:可观测性的边界与未解之题
  9. 总结

1. 黑盒问题:为什么传统监控对Agent全部失效

1.1 传统APM的三根支柱与Agent的三个破坏

传统应用性能监控(APM)建立在三根支柱上:日志(Logs)、指标(Metrics)、分布式追踪(Traces)。这三根支柱服务的前提假设是:请求是无状态的、行为是确定性的、失败是可复现的。

Agent打破全部三个假设。

状态性破坏。 REST端点是无状态的,每次请求自包含。Agent会话恰恰相反:状态在轮次间累积,工具写入外部系统,上下文窗口是一个决定后续所有行为的可变缓冲区。到第20轮编码会话时,LLM在4万个累积token上推理。第3轮的一个bug可能直到第18轮才显现。Jaeger和Zipkin的Span存储策略假设Trace在毫秒到秒级完成,而Agent Trace可以跨越数小时。

非确定性破坏。 Web服务出了问题,你发同样的请求,得到同样的错误响应,问题复现。Agent的bug几乎无法用相同输入复现。Temperature > 0的采样、工具结果对当前系统状态的依赖、next-token的随机性,意味着Agent在第二次运行中可能走完全不同的路径。审计轨迹(Trace本身)成为主要调试工件,而非复现。

归因断裂。 传统APM能告诉你某个bash_execute耗时3秒,但无法追踪是哪个LLM推理步骤决定调用它、什么上下文驱动了那个决策、Agent基于结果计划做什么。LLM调用和工具调用交替执行,标准APM很少在同一个统一Trace中捕获两者。

来源:Zylos Research 2026.04 Agent Observability & Production Debugging, AgentCorps 2026 Agent Black Box Analysis

1.2 黑盒问题的三个看不见

Agent的黑盒问题是Agent工作方式的结构性属性,不是一种比喻。没有可观测性工具,你无法看到三样最需要用来调试失败的东西。

推理链不可见。 Agent在每一步想了什么?没有Trace,你无法在事后重建Agent的决策路径。模型的决策逻辑存在于权重中,不在你可以检查的代码里。你看到prompt和response,看不到模型为什么做了那些决策。

工具调用序列不可见。 Agent调了哪些工具、什么顺序、什么参数、返回了什么?没有工作流可观测性,你只看到最终输出,对中间步骤没有记录。当Agent陷入工具调用循环时,你甚至不知道它在循环。

输出质量不可见。 输出到底好不好,还是只是看起来合理?没有评估工具,你无法区分自信的幻觉和正确的输出。模型产生一个自信的错误答案,看起来合理,直到有人注意到。

来源:AgentCorps 2026 Black Box Analysis, Confident AI Agent Quality Report

1.3 一个具体场景

2026年2月,一个氟化工集团的DCS系统报警:聚四氟乙烯产线质量偏差触发连锁反应,23个AI Agent同时抛出异常。运维团队花了4小时才发现根本原因:罪魁祸首是CrewAI框架中一个"沉默Agent"在循环调用MCP工具时产生的级联超时,模型幻觉背了锅。

调研31家部署多Agent系统的制造企业后发现,94%的生产环境处于"裸奔"状态:它们能监控服务器CPU和数据库连接池,看不见Agent之间如何传递上下文、哪个Prompt导致了47次冗余工具调用、为什么单次工艺调整消耗了全天Token配额。

来源:FluxWise Tech 2026.04 Langfuse v3 Agent Observability Manufacturing Case Study


2. 核心概念:Trace、Span与执行树

2.1 从微服务Trace到Agent Trace

传统分布式追踪的概念可以复用,但Agent Trace的形状完全不同。

传统Trace。 一个HTTP请求进来,依次调用数据库、缓存、下游服务。Trace是一条链:A → B → C → D。每个Span记录一个服务的执行。整个Trace通常在毫秒到秒级完成。

Agent Trace。 一个用户请求进来,Agent可能执行3次思维链推理、5次外部工具调用(含成功和重试)、2次RAG检索,还可能spawn子Agent。Trace是一棵树:

invoke_agent (Agent运行)
├── chat (第1轮LLM调用)
│   └── execute_tool (工具调用: search_api)
│       └── chat (工具返回后的第2轮推理)
│           └── execute_tool (工具调用: calculator)
│               └── chat (第3轮推理)
│                   └── execute_tool (工具调用: format_output)
└── chat (最终回答生成)

每个节点是一个Span。绿色Span是LLM调用,蓝色Span是工具调用,黄色Span是检索操作。这种树状结构是Agent调试的核心工件。

来源:Greptime 2026.05 OpenTelemetry GenAI Semantic Conventions, ifnodoraemon 2026 Agent Debugging Guide

2.2 Span的属性体系

一个Agent Trace中的每个Span携带以下属性类别。

模型属性。 gen_ai.request.model(请求的模型名)、gen_ai.response.model(实际响应的模型)、gen_ai.usage.input_tokens(输入token数)、gen_ai.usage.output_tokens(输出token数)、gen_ai.response.finish_reasons(完成原因)。

工具属性。 gen_ai.tool.name(工具名)、gen_ai.tool.call.id(调用ID)、工具参数和返回结果。

会话属性。 session_id(会话ID)、user_id(用户ID)、trace_id(W3C追踪ID)、business_outcome(业务结果引用)。

成本属性。 per-step token消耗、per-step延迟、per-step费用估算。

2.3 关键指标体系

Agent可观测性需要关注的核心指标,与传统APM有本质区别。

指标 含义 告警阈值建议
工具调用成功率(按工具分) 每个工具在生产中的成功率 低于95%即为bug
每阶段延迟 检索、推理、工具、生成各阶段耗时 按"简单"和"深度"任务分别设预算
每会话token消耗 单个会话消耗的总token 设置硬上限(如10M token)
评估通过率 对模型/Prompt变更的回归测试 每次变更后跑50个must-pass任务
用户报告失败率 用户实际反馈的问题 绑定trace_id,否则是浮动字符串
Agent质量评分 正确性、有用性、安全性、目标成功率 持续评估,低于阈值告警
finish_reason趋势 "length"完成原因的比例 上升趋势意味着上下文膨胀
每任务成本 单次成功任务的成本(含重试) 异常高值通常意味着循环或重复

来源:ExploreAgentic 2026.04 Agent Observability Glossary, AgentixLabs 2026 Debug Guide

2.4 采样策略

生产环境多Agent系统的Trace量是爆炸性的。一个50步任务、5个Agent、每个10次工具调用,产生250+个Span。采样策略必须平衡覆盖率和存储成本。

Head-based采样。 在Trace开始时决定是否采样。快,但可能丢失重要Trace。

Tail-based采样。 在Trace完成后基于结果决定是否采样。能捕获失败,但需要缓冲。

自适应采样(推荐生产使用)。 采样率根据错误率和延迟异常动态调整。正常时段低采样,异常时段高采样。

来源:Zylos Research 2026.04 AI Agent Observability Tracing


3. OpenTelemetry GenAI规范:六层架构拆解

3.1 为什么需要专门的语义规范

OpenTelemetry(OTel)在微服务可观测性领域已经是事实标准。但传统的OTel语义规范对LLM调用毫无覆盖。http.request.method和db.system.name对LLM调用没有意义。

LLM调用产生的遥测数据远比HTTP请求丰富。Prompt和Completion是大文本块。工具调用参数每次结构不同。Agent的多步推理无法用固定Schema捕获。除了"调了哪个模型、花了多长时间",你还需要知道消耗了多少token、花了多少钱、答案质量如何。

2024年4月,OpenTelemetry成立了GenAI特别兴趣小组(GenAI SIG)。最初的范围是LLM客户端调用追踪。此后扩展到Agent编排、MCP工具调用、内容捕获和质量评估,形成六层架构。

截至2026年5月,GenAI和MCP语义规范仍处于Development状态(v1.41.0)。属性名可能在不同版本间变化。但这不是回避的理由,Development状态的Trace比生产环境的黑盒好得多。

来源:Greptime 2026.05 OTel GenAI Semantic Conventions, dev.to 2026 GenAI Convention Analysis

3.2 六层架构总览

层级 覆盖范围 核心Span/属性 成熟度
Layer 1: Client Spans 标准化模型调用 gen_ai.operation.name, gen_ai.request.model 最成熟
Layer 2: Agent & Workflow Spans Agent编排 create_agent, invoke_agent, invoke_workflow, execute_tool 发展中
Layer 3: MCP语义规范 MCP工具调用追踪 mcp.method.name, mcp.session.id, mcp.protocol.version v1.39引入
Layer 4: Events & 内容捕获 Prompt/Completion内容 gen_ai.input.messages, gen_ai.output.messages 默认opt-in
Layer 5: Metrics 关键指标 gen_ai.client.operation.duration, gen_ai.client.token.usage 基本稳定
Layer 6: Provider特定规范 各厂商特有属性 OpenAI, Anthropic, Bedrock, Azure各自扩展 各异

来源:Greptime 2026.05 OTel GenAI Semantic Conventions

3.3 Layer 1: Client Spans — 标准化模型调用

每次LLM调用生成一个Span,gen_ai.operation.name设为chat、text_completion或generate_content。Span类型为CLIENT(模型通常运行在远程服务上)。

核心属性:

{
  "operationName": "chat gpt-4o-mini",
  "spanKind": "CLIENT",
  "duration": "1.23s",
  "attributes": {
    "gen_ai.operation.name": "chat",
    "gen_ai.provider.name": "openai",
    "gen_ai.request.model": "gpt-4o-mini",
    "gen_ai.response.model": "gpt-4o-mini-2024-07-18",
    "gen_ai.usage.input_tokens": 142,
    "gen_ai.usage.output_tokens": 87,
    "gen_ai.response.finish_reasons": ["stop"],
    "server.address": "api.openai.com",
    "server.port": 443
  }
}

这是整个规范的基础层。所有主流SDK(OpenAI Python SDK 1.52+、Anthropic Python SDK 0.40+、LangChain 0.3.x)都已原生支持OTel导出器。接入只需几行代码。

3.4 Layer 2: Agent & Workflow Spans — 超越单次调用

这是对Agent开发者最重要的一层。规范定义了四种Agent级Span类型。

create_agent。 Agent实例创建时发出。记录Agent配置:使用的模型、可用工具列表、系统Prompt版本。

invoke_agent。 Agent每次运行时发出。这是Agent Trace的根Span。v1.41将其拆分为CLIENT和INTERNAL两种Span Kind,前者处理跨进程Agent调用,后者处理进程内委托。

invoke_workflow。 工作流编排Span。当Agent调用一个预定义的工作流(而非单步推理)时发出。

execute_tool。 每次工具调用时发出。v1.41要求Span名必须包含工具名。

这些Span类型组合在一起,构成Agent运行的完整执行图。

3.5 Layer 3: MCP语义规范 — 修复断裂的Trace

MCP协议在2026年成为行业标准后,带来新的追踪挑战。Agent通过MCP调用工具时,Trace在协议边界处断裂。调用端发出请求,服务端执行,但两端的Span无法关联。

v1.39引入的MCP语义规范解决了这个问题。客户端侧的工具调用Span携带mcp.method.name、mcp.session.id和mcp.protocol.version。W3C Trace Context通过MCP的_meta字段(在SEP-414中标准化)传播,确保traceparent、tracestate和baggage在SDK和网关之间一致。

这意味着一条Trace可以完整地展示:Agent的推理步骤 → 工具调用 → MCP客户端SDK → MCP Server → 下游服务。而不是在协议边界处断裂,留下人工按时间戳拼接的苦差事。

来源:Greptime 2026.05 MCP Semantic Conventions, OTel SEP-414 Trace Context Propagation

3.6 Layer 4: 内容捕获 — 隐私与可观测性的平衡

这一层处理最敏感的部分:Prompt和Completion的实际文本内容。

规范定义了三种内容记录模式。

Metadata-only(默认)。 只记录模型名、token数、延迟等元数据。不记录Prompt和Completion文本。适合GDPR合规场景和用户数据处理。

Opt-in内容捕获。 显式启用后,记录gen_ai.input.messages和gen_ai.output.messages。用于开发调试和离线评估。

选择性脱敏。 对Trace中的敏感用户数据进行选择性脱敏后记录。需要平台支持。

默认opt-in是一个合理的设计。完整的Trace内容是合规负担。但一个没有内容的Trace只能回答"多慢",有内容的Trace才能回答"多错"。

3.7 属性重命名陷阱

如果你或你的供应商的Instrumentation是基于2024/2025年的规范状态写的,必须执行迁移检查。

旧属性 新属性 状态
gen_ai.system gen_ai.provider.name 已废弃
gen_ai.usage.prompt_tokens gen_ai.usage.input_tokens 已重命名
gen_ai.usage.completion_tokens gen_ai.usage.output_tokens 已重命名
gen_ai.prompt / gen_ai.completion 已移除(通过opt-in属性替代) 完全移除

如果你的仪表盘按gen_ai.system分组,在库更新后会变暗。如果你的成本仪表盘基于旧属性名构建,在发射端切换后会静默漏算。检查你的告警规则和保存的查询,不仅仅是代码。

来源:dev.to 2026 GenAI Convention Migration Guide, Greptime 2026.05


4. 实战:给Agent接入可观测性

4.1 最小可行方案:5分钟接入

以一个Python Agent为例,使用OpenTelemetry + Langfuse的最小接入方案。选择Langfuse因为它是开源的、可以自托管、且框架无关。

# 第一步:安装依赖
# pip install langfuse openai opentelemetry-sdk \
#   opentelemetry-instrumentation-openai \
#   openinference-semantic-conventions

# 第二步:配置OTel导出到Langfuse
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
    OTLPSpanExporter,
)

# Langfuse的OTLP端点
resource = Resource.create({
    "service.name": "my-agent-service",
    "service.version": "1.0.0",
})

tracer_provider = trace_sdk.TracerProvider(resource=resource)
tracer_provider.add_span_processor(
    BatchSpanProcessor(
        OTLPSpanExporter(
            endpoint="https://cloud.langfuse.com/api/public/otel/v1/traces",
            headers={"Authorization": f"Basic {LANGFUSE_PUBLIC_KEY}"},
        )
    )
)

# 第三步:自动Instrumentation OpenAI调用
from openinference.instrumentation.openai import OpenAIInstrumentor
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)

# 第四步:正常运行你的Agent代码
import openai
client = openai.OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个数据分析助手"},
        {"role": "user", "content": "分析这个数据集的趋势"},
    ],
    tools=[...],  # 你的工具定义
)

这段代码在Langfuse中生成一个完整的Trace,包含模型名、token消耗、延迟、finish_reason。你不需要修改任何业务逻辑。

4.2 手动Span:捕获自定义推理步骤

自动Instrumentation覆盖了LLM调用,但Agent的推理步骤需要手动Span来追踪。

from opentelemetry import trace

tracer = trace.get_tracer("my-agent")

def run_agent(user_query: str):
    with tracer.start_as_current_span("invoke_agent") as agent_span:
        agent_span.set_attribute("gen_ai.operation.name", "invoke_agent")
        agent_span.set_attribute("agent.name", "research-agent")
        agent_span.set_attribute("agent.version", "2.1.0")

        # 第一步:理解意图
        with tracer.start_as_current_span("chat") as step1:
            step1.set_attribute("gen_ai.operation.name", "chat")
            step1.set_attribute("step.purpose", "intent_understanding")
            intent = llm_call(system_prompt, user_query)

        # 第二步:工具调用
        with tracer.start_as_current_span("execute_tool") as tool_span:
            tool_span.set_attribute("gen_ai.tool.name", "search_web")
            tool_span.set_attribute("tool.query", intent.query)
            search_results = search_web(intent.query)
            tool_span.set_attribute("tool.result_count", len(search_results))

        # 第三步:生成回答
        with tracer.start_as_current_span("chat") as step3:
            step3.set_attribute("gen_ai.operation.name", "chat")
            step3.set_attribute("step.purpose", "answer_generation")
            answer = llm_call(system_prompt, f"基于搜索结果回答: {search_results}")

        # 记录质量信号(即使规范未标准化)
        agent_span.set_attribute("quality.score", evaluate(answer))

        return answer

关键实践:把quality.score作为Span属性记录,即使它还不是标准。你可以之后重命名属性,但无法追溯给上个月的Trace打分。

4.3 跨MCP边界传播Trace Context

当Agent通过MCP调用工具时,需要手动传播W3C Trace Context。

from opentelemetry.propagate import inject, extract

# Agent侧:在MCP调用前注入Trace Context
def call_mcp_tool(tool_name: str, params: dict):
    with tracer.start_as_current_span("execute_tool") as span:
        span.set_attribute("gen_ai.tool.name", tool_name)
        span.set_attribute("gen_ai.operation.name", "execute_tool")

        # 将Trace Context注入MCP的_meta字段
        mcp_meta = {}
        inject(mcp_meta)  # 注入traceparent, tracestate, baggage

        # 发送MCP请求
        result = mcp_client.call_tool(
            tool_name,
            params,
            _meta=mcp_meta,  # Trace Context随请求传播
        )

        span.set_attribute("tool.success", result.success)
        return result

# MCP Server侧:从_meta中提取Trace Context
def handle_tool_call(tool_name: str, params: dict, _meta: dict):
    # 从_meta恢复Trace Context
    context = extract(_meta)

    with tracer.start_as_current_span(
        f"mcp_tool_{tool_name}",
        context=context,  # 接续上游Trace
    ) as span:
        span.set_attribute("mcp.method.name", "tools/call")
        span.set_attribute("mcp.session.id", session_id)
        span.set_attribute("mcp.protocol.version", "2026-07")

        result = execute_tool_logic(tool_name, params)
        return result

这样,一条Trace从Agent推理 → MCP客户端 → MCP Server → 下游服务,完整串联。

4.4 采样配置

from opentelemetry.sdk.trace.sampling import (
    TraceIdRatioBased,
    ParentBased,
    ALWAYS_ON,
)

# 生产环境推荐:自适应采样
# 正常时段10%采样,错误和高质量评分Trace全量保留
tracer_provider = trace_sdk.TracerProvider(
    resource=resource,
    sampler=ParentBased(
        root=TraceIdRatioBased(0.1),  # 根Span 10%采样
    ),
)

# 对于错误Trace,使用Tail-based采样确保全量捕获
# 需要Collector层配置tail-based sampling processor

来源:OpenTelemetry Python SDK文档, Langfuse OTel Integration Guide, Greptime 2026.05


5. 平台横评:LangSmith vs Langfuse vs Arize Phoenix vs Maxim

5.1 平台全景图

2026年Agent可观测性平台格局已经从2025年的百花齐放收敛为几个明确的选择。

维度 LangSmith Langfuse Arize Phoenix Maxim AI
定位 LangChain生态深度集成 开源社区领导者 ML级评估与监控 全生命周期端到端
开源 是(MIT) 是(开源版)
自托管 企业版 完整功能自托管 开源版自托管 VPC内部部署
OTel原生 部分 完整OTLP端点 通过OpenInference转换 完整
多Agent追踪 LangGraph深度集成 框架无关 框架无关 框架无关
实时告警 基础 Slack/PagerDuty 有限 Slack/PagerDuty
回放与重放 支持trace回放 基础 有限 完整回放+模拟
评估集成 内置 LLM-as-Judge(MIT开源) RAGAS/幻觉检测 多种评估器
企业合规 SOC2 SOC2/ISO/HIPAA/GDPR SOC2 SOC2/ISO/HIPAA/GDPR
免费层 5K traces/月 50K units/月 开源无限 10K logs/traces
GitHub Stars - 19,000+ 活跃社区 -

来源:Maxim AI 2026 Platform Comparison, Arize 2025 LLM Evaluation Platforms, Novita AI 2025 LLM Observability Tools

5.2 LangSmith:LangChain生态的最深集成

LangSmith是LangChain团队官方平台。如果你已经在用LangChain和LangGraph,集成只需要一个环境变量。

优势。 Trace包含LangGraph执行的逐节点状态差异、完整的Agent执行图、模型和工具调用分解。支持将生产Trace下载到本地重放,用于回归测试。Waterfall视图清晰展示Agent链中每个组件的序列和时序。

劣势。 最高vendor lock-in风险。离开LangGraph生态就离开LangSmith。非LangChain框架的Agent接入需要额外适配。

适合谁。 重度使用LangChain/LangGraph的团队。

5.3 Langfuse:开源社区的领导者

Langfuse是LangSmith的开源替代品,GitHub 19,000+ stars,MIT许可。自托管版与云端版功能完全一致。

2025年6月,Langfuse将之前商业化的模块全部开源,包括LLM-as-Judge评估、标注队列、Prompt实验和Playground。这使其成为Prompt管理和评估迭代为核心工作流的团队的最强选择。

优势。 完全开源,自托管满足数据驻留需求。框架无关,通过OTLP端点接收任何OTel格式的Trace。Prompt版本管理+内置Playground。社区活跃。

劣势。 企业级告警能力不如商业平台。回放功能基础。多Agent场景的深度分析不如LangSmith。

适合谁。 需要数据主权、预算有限、使用非LangChain框架的团队。

5.4 Arize Phoenix:ML级分析深度

Arize AI从MLOps和模型监控领域进化而来,Phoenix是其开源LLM可观测性平台。原生Schema是OpenInference(自己的llm.*命名空间),通过转换层与OTel互操作。

优势。 忠实度评估、幻觉检测、嵌入漂移分析、RAGAS原生支持。ML级分析深度是其他平台不具备的。自动Instrumentation覆盖最广泛的框架和提供商。开源版功能无限。

劣势。 OTel GenAI规范的对齐仍在RFC讨论阶段。企业版(Arize AX)功能完整但价格较高。非技术团队上手门槛偏高。

适合谁。 有ML背景的团队、需要深度RAG评估、重视OpenTelemetry中立性的团队。

5.5 Maxim AI:全生命周期覆盖

Maxim是2025年推出的端到端平台,覆盖模拟、评估和可观测性的完整生命周期。

优势。 统一工作流连接预发布测试和生产监控。支持HTTP端点测试(无需SDK集成)。多模态数据原生支持。跨职能协作(产品经理和工程师在同一个UI中工作)。

劣势。 新平台,生态不如LangSmith成熟。定价模式(seat-based + usage-based)对小团队可能偏贵。

适合谁。 需要端到端覆盖、跨职能协作、多模态Agent的团队。

5.6 选择决策框架

三个问题决定选择。

框架锁定容忍度。 深度使用LangChain/LangGraph → LangSmith。使用自定义Agent运行时 → Langfuse或Maxim。

数据主权。 Prompts和模型响应不能离开你的基础设施 → Langfuse自托管或Arize Phoenix开源版。可以走云端 → 任意平台。

评估驱动程度。 评估应该驱动部署决策 → Maxim或Braintrust。主要需要调试和监控 → LangSmith或Langfuse。

一个实用的排序测试:一个真正的Agent可观测性产品应该发射OpenTelemetry兼容的Span并应用GenAI规范、支持多AgentTrace嵌套、允许你对生产故障用不同模型重放。三条都满足,才叫Agent可观测性。否则只是日志搜索。

来源:ExploreAgentic 2026.04 Agent Observability Glossary, Maxim AI 2026 Platform Guide


6. 成本可观测性:那些47,000美元的教训

6.1 成本是非线性增长的

大多数团队的成本估算基于per-request计算。一次GPT-4o调用可能花费0.05到0.20美元,看起来微不足道。

这个数字隐藏了频率。一个每分钟执行多次调用的循环,在264小时内执行数千次请求。测试时看似可忽略的单元成本,在循环规模下变成灾难。

更隐蔽的是上下文窗口累积。大多数Agent架构在每次请求中携带完整对话历史。一个从5,000 token开始的会话,到第10步可能携带20,000 token,到第30步可能发送80,000 token的输入。单次late-loop步骤的成本是最初请求的16倍。

一位开发者追踪了42次Agent运行后发现,70%的token是在携带Agent当前步骤不需要的上下文历史。Agent读了不相关的文件、重复了已经做过的搜索、在每次请求中累积之前的交换历史。

Agent的成本结构接近O(n²),远超线性增长。5步Agent循环的成本约是单次调用的155倍(5 + 10 + 20 + 40 + 80),远非5倍。

来源:Waxell AI 2026 Agent Token Budget Enforcement, dev.to Production Incidents

6.2 七个真实事故的信号

2025到2026年的七个公开LLM生产事故,每个都有一个可以在数小时前触发的信号,但没有人在看。

事故 损失 持续时间 缺失的信号
LangChain Agent循环 $47,000 264小时 per-session token上限
Claude Code递归 $16K-$50K 5小时 tokens/分钟 速率告警
CRM同步Agent失控 $4,200 63小时 空闲循环断路器
Anthropic路由错误 16%请求受影响 数小时 路由配置变更检测
文件列表调用14K次 账号暂停 一夜 工具调用频率上限
14,000次重复文件列表 账户封禁 隔夜 per-tool调用频率硬上限
PocketOS删库事件 全量数据删除 9秒 per-agent IAM最小权限

每个事故的根因都不新鲜。Agent循环、模型漂移、发布回归、策略幻觉。缺失的是那个能把慢动作灾难变成5分钟Pager工单的指标或告警。

来源:dev.to 2026 Seven Most Expensive LLM Production Incidents, Towards AI 2026 Agent Production Failures

6.3 成本可观测性的三个层次

第一层:追踪(Tracking)。 记录已经花了多少。大多数团队在这一层就停了。仪表盘显示每日总消费。每日总额掩盖会话级别的异常。

第二层:归因(Attribution)。 精确到单次决策路径的成本归因。哪个Agent的哪个推理步骤消耗了最多token?哪个工具调用的返回结果过大导致后续每一步的输入token膨胀?

第三层:执行(Enforcement)。 运行时控制:在Agent达到定义的token或成本阈值时终止或暂停。告警通知"已经花了多少",执行阻止"下一步会花多少"。

$47,000事故的团队有可观测性。他们有告警。但告警是异步的,通知某个人,那个人需要采取行动。如果没人看告警,或告警在非工作时间触发,消费继续。告警触发和会话停止之间的间隔,就是损失复利的时间窗口。在那起事故中,这个间隔是11天。

# 成本执行的最小实现
class BudgetAwareAgent:
    def __init__(
        self,
        max_tokens: int = 100_000,
        max_steps: int = 15,
        max_cost: float = 5.0,
    ):
        self.tokens_used = 0
        self.steps_taken = 0
        self.cost_incurred = 0.0
        self.max_tokens = max_tokens
        self.max_steps = max_steps
        self.max_cost = max_cost

    def before_step(self, estimated_tokens: int, estimated_cost: float):
        self.steps_taken += 1
        if self.steps_taken > self.max_steps:
            raise AgentBudgetError(
                f"Step limit: {self.steps_taken}"
            )
        if self.tokens_used + estimated_tokens > self.max_tokens:
            raise AgentBudgetError(
                f"Token budget: {self.tokens_used} used"
            )
        if self.cost_incurred + estimated_cost > self.max_cost:
            raise AgentBudgetError(
                f"Cost budget: ${self.cost_incurred:.2f} used"
            )

    def after_step(self, tokens_consumed: int, cost: float):
        self.tokens_used += tokens_consumed
        self.cost_incurred += cost
        # 记录到Trace Span
        span = trace.get_current_span()
        span.set_attribute("agent.cost.total", self.cost_incurred)
        span.set_attribute("agent.tokens.total", self.tokens_used)
        span.set_attribute("agent.steps.total", self.steps_taken)

来源:Waxell AI 2026 Token Budget Enforcement, FinOps Foundation State of FinOps 2026

6.4 沉默Agent的发现

氟化工集团的案例揭示了一个隐蔽的成本黑洞。部署Langfuse之前,该集团每月有4.2万元的算力成本无法解释。通过精确的Token消耗归因,发现一个本应只在异常时唤醒的监控Agent,由于Prompt设计缺陷,在系统空闲时持续进行自我检查,每天产生12万次无意义的LLM调用。

这种"沉默Agent"在传统监控中完全隐身,因为它们不产生业务日志,只产生昂贵的Token账单。

成本可观测性的价值不仅在于发现循环,还在于发现那些看起来在正常工作但实际在做无用功的Agent。

来源:FluxWise Tech 2026.04 Langfuse v3 Manufacturing Case


7. 调试实战:从Trace到根因的完整流程

7.1 标准调试工作流

一个使用现代Agent可观测性工具的典型调试会话遵循以下模式。

第一步:告警触发。 自动化监控检测到一个会话存在异常延迟、高成本或低质量评分。

第二步:Trace查找。 通过session ID、user ID或评估指标查询相关Trace。

第三步:时间线审查。 可视化Span树,识别时间花在哪里、哪个工具调用返回了错误、Agent在哪里循环。

第四步:根因隔离。 导航到具体的失败Span,检查输入参数、响应载荷和错误属性。

第五步:假设测试。 调整系统Prompt、工具定义或路由逻辑,从失败发生的检查点重放Trace。

第六步:回归捕获。 将失败Trace作为评估套件中的测试用例,防止复发。

第五步和第六步是平台差异最大的地方。内置模拟和回放功能的平台(Maxim、Braintrust)在单一工具内完成从观察到修复到验证的闭环。其他平台需要导出Trace在外部测试。

来源:Zylos Research 2026.04 Agent Observability Tracing, AgentixLabs 2026 Debug Guide

7.2 案例模拟:Agent工具调用循环

场景:一个客服Agent在生产中不断调用同一个搜索API,每次返回空结果,但Agent不停止,持续重试。

Step 1: 告警。 监控检测到session #abc123的token消耗在30分钟内达到2.3M,远超正常水平(平均50K/会话)。

Step 2: Trace查找。 在Langfuse中搜索session_id=abc123。

Step 3: 时间线审查。 Span树显示:

invoke_agent (session: abc123, 30min, 2.3M tokens)
├── chat (intent: search_product)
├── execute_tool (search_api, query: "SKU-12345") → 0 results
├── chat (reasoning: "no results, retry with different query")
├── execute_tool (search_api, query: "SKU-12345") → 0 results
├── chat (reasoning: "still no results, retry")
├── execute_tool (search_api, query: "SKU-12345") → 0 results
├── ... (重复47次)
└── chat (final answer: "product not found")

Step 4: 根因隔离。 导航到第一个execute_tool Span。检查输入参数:查询"SKU-12345"使用了精确匹配。检查search_api的工具定义:工具描述说"通过关键词搜索产品",但Agent传入的是精确SKU编号。SKU编号不在关键词索引中,返回空结果。Agent的Prompt没有定义"搜索无结果时应该怎么做"的处理逻辑。

Step 5: 假设测试。 修改工具定义为:"通过关键词搜索产品。如果传入SKU编号,请使用search_by_sku工具。"在Langfuse Playground中用相同的输入重放,验证修改后的Agent在第一次搜索无结果后切换到正确工具。

Step 6: 回归捕获。 将这个Trace保存为评估数据集中的一个测试用例,定义断言:“搜索SKU编号时,Agent应在第一次尝试后切换到search_by_sku工具。”

7.3 轨迹评估:超越结果评估

传统的"结果评估"只看最终答案对不对。轨迹评估看过程。

评估维度 问题 检测的故障模式
工具选择准确率 Agent第一次是否选对了工具 工具定义模糊、路由逻辑错误
冗余率 Agent是否重复调用了同一个无用API 循环检测失败、终止条件缺失
检索效率 RAG返回的5个chunk中,多少真正贡献了最终答案 检索质量差、上下文过多
状态追踪一致性 Agent是否在第15步还记得第1步的指令 上下文窗口溢出、记忆丢失
错误恢复能力 工具调用失败后,Agent如何调整策略 无fallback逻辑、死循环

Vector人工智能研究院2026年2月的研究(arXiv:2602.06841)发现,传统的SHAP和LIME解释方法在Agent任务中力不从心。在传统分类任务中,这些方法的相关性达到0.86。在Agent任务中,基于轨迹的诊断方法能准确定位执行层面的故障,发现状态追踪不一致的问题在失败案例中出现频率高出2.7倍,并将成功概率降低49%。

传统解释方法回答"这个决定为什么是对的"。Agent需要回答"这个过程哪里出了错"。

来源:Vector Institute 2026.02 Agent Interpretability Paper (arXiv:2602.06841), ifnodoraemon 2026 Trajectory Evaluation Guide

7.4 企业治理与合规

对于受监管行业,Agent可观测性从调试扩展到合规和审计。

审计轨迹。 不可变的Trace记录,展示Agent做了什么、何时做的、代表谁做的。金融、医疗和法律AI应用的必需品。

安全监控。 实时检测不安全行为(Prompt注入尝试、策略违规、意外工具调用),立即标记。

PII处理。 Agent Trace经常在消息内容中嵌入敏感用户数据。平台必须支持选择性脱敏或opt-in内容捕获,避免通过全面日志创建合规负担。

成本归属。 每会话token使用、延迟和工具调用计数,支持精确的成本中心回拨和异常检测。

来源:Zylos Research 2026.04 Enterprise Governance, Langfuse Self-Hosting Guide


8. 辩证看待:可观测性的边界与未解之题

8.1 已解决与未解决

Agent可观测性在2026年有了一个可用的基础:OpenTelemetry提供Instrumentation标准,GenAI语义规范定义Schema,一批专业平台建在上面。

三个Span类型(create_agent、invoke_agent、execute_tool)给了工程师描述Agent行为的统一词汇。分布式Trace Context传播连接了多Agent边界的点。

但这个领域还没有解决推理可见性差距。

工具调用是可观测的。LLM产生那些工具调用的决策过程是不可观测的。 轨迹级追踪大幅缩小了差距,但一条展示"发生了什么"的Trace仍然不能完全解释"为什么"。

这个问题推入可解释性研究领域,那里的答案仍然不完整。

8.2 四个未解之题

推理不透明问题。 捕获Agent做了什么是已解决的。理解它为什么选择A而不是B仍然根本困难,因为决策存在于神经网络内部,不在可观察的代码路径中。Trace展示Agent调了search_api而不是calculator。Trace不展示为什么模型在那一刻选择了搜索而不是计算。

标准化滞后。 OTel GenAI语义规范仍在Development状态。不同平台以不同方式Instrument Agent行为,使跨工具比较困难,延迟了行业基准的出现。属性名在版本间变化(gen_ai.system → gen_ai.provider.name,gen_ai.usage.prompt_tokens → gen_ai.usage.input_tokens)。如果你基于旧名建了仪表盘,库更新后仪表盘会变暗。

Trace分析可扩展性。 生产系统以淹没人工审查的规模生成Trace数据。自动化分析(标记异常、聚类故障模式、发现回归)仍然不成熟。一个50步、5个Agent的任务产生250+个Span。每天处理10,000个会话的系统每天产生250万个Span。人工审查这些数据不现实。

评估基准真值。 Agent质量的自动化指标(忠实度、连贯性、效率)需要它们自己的评估模型,而这些模型本身可能不可靠。评估栈有自己的可观测性问题。你用LLM-as-Judge评估Agent的输出质量,但Judge模型本身的质量怎么评估?

8.3 "建设成本 vs 修复成本"的权衡

从第一天开始Instrument的成本远低于在生产后补加可观测性的成本。

一个在开发阶段就接入OTel的Agent项目,Instrumentation代码与业务代码同步增长,Instrumentation库的自动覆盖意味着大部分场景零额外代码。成本是初始设置的几小时。

一个已经上线、运行了数月后才补加可观测性的Agent项目,面临的是考古工程。你需要理解Agent在做什么才能正确Instrument它,但你接入可观测性正是因为你不理解Agent在做什么。你需要逆向工程自己的系统。成本是数周到数月。

这不是一个"是否要做"的问题,是一个"什么时候做"的问题。早做的成本是工程投入,晚做的成本是生产事故。

8.4 可观测性的悖论

可观测性工具本身也是需要被观测的系统。你用Langfuse追踪Agent,但Langfuse自身的延迟、可用性、存储成本也需要监控。你用LLM-as-Judge评估Agent输出,但Judge模型本身也会幻觉、也会漂移。

这意味着Agent可观测性栈的深度没有天然终点。每加一层监控,监控本身成为新的需要监控的系统。实践中的止步点应该定为"失败成本可控",而非追求"完全可观测"。

金融行业处理这个问题的方式是分层审计:每层只负责检查下一层的异常,不试图覆盖所有可能的故障。Agent可观测性可以借鉴这个思路:Trace层覆盖"做了什么",评估层覆盖"做得对不对",告警层覆盖"是否在恶化"。三层各自独立,各自有阈值,不试图在一层中解决所有问题。

来源:Zylos Research 2026.04 Open Problems, Vector Institute 2026.02, CloudAndSRE 2026 OTel GenAI SRE Guide


9. 总结

9.1 核心要点

Agent的黑盒问题是结构性属性。 模型的决策逻辑在权重中,不在代码里。传统APM的三个假设(无状态、确定性、可复现)全部被Agent打破。89%的组织已经部署了某种形式的Agent可观测性,这个比例超过Eval采用的52%,说明团队在定义质量标准之前就发现需要可见性。

OpenTelemetry GenAI规范是基础设施。 六层架构覆盖从模型调用到Agent编排到MCP工具执行到内容捕获到指标到厂商特定扩展。虽然仍在Development状态,但核心概念已经稳定。现在接入是合理的选择,属性重命名是可管理的迁移成本。

平台选择看三个维度。 框架锁定容忍度(LangSmith深度绑定LangChain vs Langfuse框架无关)、数据主权(能否自托管)、评估驱动程度(评估是否驱动部署决策)。

成本可观测性是安全网。 Agent的成本结构是O(n²)而非O(n),上下文窗口累积使每步成本非线性增长。$47,000事故的教训:追踪不是执行,告警通知"已经花了多少",执行阻止"下一步会花多少"。per-session token上限、空闲循环断路器、状态感知重规划是最低限度的信任基础设施。

推理不透明问题仍然无解。 Trace展示Agent做了什么,不展示为什么。这是神经网络的可解释性问题的延伸,当前没有工程解法。轨迹评估缩小了差距,但未消除。

9.2 行动清单

如果你正在构建生产Agent,以下是可以在这周做的事。

  1. 开启框架已有的OTel导出。LangChain、CrewAI等框架自带OTel Instrumentation,大多数团队只是没接exporter。一个环境变量可能就给你整个Waterfall视图。
  2. 用一个内部Client包装模型和工具调用。在那个Client中统一发射client span、execute_tool span和两个metrics。这个模块是你的规范漂移隔离区。
  3. 跨MCP传播Trace Context。如果你用了网关,先在网关加trace-context propagation,后面的每个Server免费加入Trace。
  4. 对finish_reason和token漂移设置告警。length完成原因的上升趋势和tokens-per-task的异常是最便宜的早期预警信号。
  5. 现在就把质量评分作为Span属性记录。即使规范未标准化。你可以之后重命名属性,但无法追溯给上个月的Trace打分。
  6. 设置per-session token硬上限。不需要复杂的逻辑,一个简单的计数器+异常抛出就能避免下一个$47,000事故。

9.3 结语

Agent可观测性在2026年处于一个微妙的阶段:基础设施已经可用,标准正在收敛,平台生态成熟,但核心的推理可见性差距仍未消除。

对于正在构建生产Agent的团队,现在的策略很清晰。用OpenTelemetry从第一天开始Instrument,捕获跨Agent边界的parent-child Span关系,实施tail-based采样,选择一个能闭合"观察→回放→回归测试"闭环的Trace后端。在生产后补加可观测性的成本比从一开始就建入高一个数量级。

可观测性给不了你Agent推理过程的完整透明度。它给你的是在Agent失败时快速定位的能力、在成本失控前拦截的能力、在模型或Prompt变更后检测回归的能力。这些能力组合在一起,构成了将Agent从Demo推向生产的信任基础。

Development状态的Trace比生产环境的黑盒好得多。在规范仍在演进的当下就接入,是合理工程判断。


本文引用的数据和案例来自以下来源:Zylos Research 2026.04/05 Agent Observability Reports, Maxim AI 2026 Platform Guide, Arize AI 2025 LLM Evaluation Platforms Comparison, Greptime 2026.05 OTel GenAI Semantic Conventions, dev.to 2026 GenAI Convention Analysis & LLM Production Incidents, ExploreAgentic 2026.04 Agent Observability Glossary, AgentCorps 2026 Black Box Analysis, AgentixLabs 2026 Debug Guide, Waxell AI 2026 Token Budget Enforcement, FluxWise Tech 2026.04 Langfuse v3 Manufacturing Case, Vector Institute 2026.02 Agent Interpretability (arXiv:2602.06841), CloudAndSRE 2026 OTel GenAI SRE Guide, Towards AI 2026 Agent Production Failures, Novita AI 2025 LLM Observability Tools Comparison

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐