AI Agent 可观测性:如何记录推理、工具调用、失败与成本

📅 2026/7/14 2:17:44
AI Agent 可观测性:如何记录推理、工具调用、失败与成本
做 AI Agent 最怕的不是“它答错了”而是“它为什么答错没人知道”。普通服务出问题你还能看日志、看链路、看指标Agent 出问题如果没有记录推理步骤、工具调用、上下文、失败原因和成本就只能靠猜。AI Agent 可观测性 的目标不是把所有对话原文都存下来而是让每一次 Agent Run 都能被复盘它看到了什么、决定了什么、调了什么工具、哪里失败、花了多少钱、最后为什么给出这个结果。一、为什么 Agent 比普通服务更需要可观测性普通后端服务的调用链通常比较确定。用户请求进来经过网关、服务、缓存、数据库最后返回。虽然系统可能很复杂但路径大体是工程师写死的。哪怕出了问题你也可以沿着 trace 找哪个接口慢、哪个 SQL 超时、哪个下游 500。Agent 不一样。Agent 的路径经常是模型“运行时决定”的先规划几步要不要检索知识库要不要调用工具调哪个工具工具失败后重试还是换方案什么时候停止什么时候把结果返回给用户这意味着 Agent 的问题也更难复现。用户只看到一句“抱歉我无法完成”但背后可能是表面现象真实原因回答很泛关键上下文没有召回答案错了工具返回被模型误读执行很慢Agent 循环调用了 12 次工具成本很高重试时重复带入长上下文任务失败某个工具超时后没有降级路径行为危险模型把用户输入当成了系统指令没有可观测性这些原因都藏在黑箱里。所以 Agent 可观测性要回答的不是“服务挂了吗”这么简单而是这次 Agent 为什么走了这条路径它每一步依据是什么哪一步开始偏了下次怎么避免二、先区分三件事日志、指标、TraceAI Agent 可观测性通常离不开三类数据Log、Metric、Trace。它们不是互相替代而是回答不同问题。类型适合回答例子Log某个具体事件发生了什么工具调用失败错误码是 timeoutMetric一段时间内整体表现如何P95 延迟、失败率、平均成本、Token 消耗Trace一次请求完整经历了什么用户请求 → 计划 → LLM 调用 → 工具调用 → 最终回答对 Agent 来说Trace 是主干。因为 Agent 的问题通常不是单点事件而是多步组合第一步计划偏了第二步检索带错了材料第三步工具又超时最后模型只好编了一个看似合理的回答。如果只有日志你会看到很多碎片如果只有指标你只知道整体变差只有 Trace 能把碎片串起来。OpenTelemetry 官方对可观测性的定位也很适合借用它提供统一的 API、SDK 和 Collector用来采集 traces、metrics、logs并把遥测数据发送到后端系统。近两年 GenAI semantic conventions 也在补齐模型调用、token、工具调用等生成式 AI 场景的标准字段。换句话说Agent 可观测性最好不要自创一套孤岛格式。能贴近 OpenTelemetry就更容易接入现有监控体系。三、一次 Agent Run 应该记录成一棵 Trace一次用户请求可以看成一次 agent.run。根节点记录这次任务的整体信息下面挂 Planner、LLM、Tool、Memory、Evaluator 等 span。一个比较实用的结构如下层级记录对象关键字段Root Trace一次 Agent Runrequest_id、user_id_hash、session_id、goal、status、total_costPlanner Span计划生成plan_id、steps_count、selected_strategyLLM Span一次模型调用model、input_tokens、output_tokens、latency_ms、finish_reasonTool Span一次工具调用tool_name、args_schema、duration_ms、status、result_sizeMemory Span记忆检索或写入query、top_k、hit_ids、scoresRAG Span检索增强retriever、document_ids、scores、rerank_modelEval Span质量评估score、label、judge_model、failure_reason这里有两个经验。第一不要只记录最终答案。最终答案是结果不是过程。真正能帮你 debug 的是每一步看到了什么、选择了什么、花了多久。第二不要把所有内容都明文记录。比如用户隐私、完整 Prompt、完整工具返回都可能包含敏感信息。可以记录 hash、摘要、字段 schema、脱敏片段、引用 ID而不是全量原文。四、推理过程到底要不要记录这是 Agent 可观测性里最容易争论的问题。很多人一听“记录推理”就想到把模型的完整思维链存下来。这个做法并不推荐。更可取的是记录可审计的决策摘要而不是完整隐藏推理。比如记录{ ”step”: ”select_tool”, ”decision”: ”call_order_status_tool”, ”reason_summary”: ”user asks refund failure; order status is required before answering”, ”confidence”: 0.78 }不要记录{ ”chain_of_thought”: ”非常长的逐字推理过程...” }为什么原因说明安全完整思维链可能泄露系统提示、策略和敏感上下文噪声长推理文本很难稳定分析检索和聚合价值有限成本存储和查询成本会变高可用性工程排查更需要“决策点 依据摘要 输入输出 ID”所以“记录推理”更准确地说是记录 Agent 的决策轨迹当前步骤是什么可选动作有哪些最终选择了什么选择依据摘要是什么是否发生自我修正是否触发安全规则或人工确认这已经足够支持绝大多数复盘。五、工具调用怎么记录工具调用是 Agent 最需要观测的部分。因为工具是模型接触外部世界的地方也是最容易出现真实副作用的地方查数据库、发请求、改文件、下单、发消息、提交代码。每次工具调用至少记录这些字段字段说明tool_name工具名如search_docs、query_ordertool_version工具版本方便定位变更影响args_schema参数结构不一定记录完整参数值args_hash参数 hash用于复现和关联start_time/duration_ms调用耗时statussuccess / failed / timeout / cancelledresult_size返回大小避免超大结果污染上下文result_summary脱敏摘要side_effect是否有写操作或外部副作用permission_levelread / write / admin / external示例{ ”span_name”: ”tool.call”, ”tool_name”: ”query_order_status”, ”tool_version”: ”2026-07-01”, ”args_schema”: { ”order_id”: ”string” }, ”args_hash”: ”sha256:8f3a...”, ”duration_ms”: 184, ”status”: ”success”, ”result_size”: 428, ”result_summary”: ”order paid, refund blocked by settlement status”, ”side_effect”: false, ”permission_level”: ”read” }这里最重要的是 side_effect。读操作失败通常只是回答不完整写操作失败或误调用可能造成真实损失。比如发邮件、删除文件、修改配置、提交订单这些都应该在 trace 里被明确标记。六、失败要分类不要只写 error很多系统的日志里只有一句Agent failed这基本没用。Agent 失败要分类否则你无法判断该优化模型、工具、提示词、RAG还是权限系统。常见分类可以这样设计失败类型例子优先排查llm_error模型 API 失败、限流、超时模型服务、重试策略tool_error工具 500、超时、参数错误工具稳定性、参数 schemaretrieval_error没召回关键资料RAG、索引、query rewriteformat_error输出不是合法 JSON输出约束、解析重试permission_error工具权限不足或越权拦截权限系统、工具策略context_error上下文缺失、污染、过载Context Engineeringloop_errorAgent 重复调用、无法停止Planner、停止条件safety_error触发安全规则安全策略、用户输入human_intervention需要人工确认产品流程、风险动作失败记录里还要写“恢复动作”{ ”failure_type”: ”tool_error”, ”failure_stage”: ”query_order_status”, ”error_code”: ”timeout”, ”retry_count”: 2, ”recovery_action”: ”fallback_to_cached_order_snapshot”, ”final_status”: ”degraded_success” }有了这个字段你才能区分失败后成功降级失败后重试成功失败后直接终止失败后模型胡乱补全最后一种最危险。七、成本观测Token、模型、工具和重试Agent 的成本不只是一次模型调用的钱。它通常由四部分组成成本来源说明输入 Token系统指令、用户输入、历史摘要、RAG 文档、工具结果输出 Token模型生成的计划、回答、工具参数工具成本搜索 API、数据库查询、代码执行、第三方服务重试成本模型重试、工具重试、格式修复、反思再执行很多 Agent 成本失控不是因为单次模型贵而是因为循环和重试。比如一次任务看起来只问了一个问题背后却发生了4 次 LLM 调用6 次检索3 次工具调用2 次 JSON 修复重试每次都带 20KB 历史上下文所以成本指标要能按层级拆建议至少记录指标用途agent_run_cost_total单次任务总成本llm_input_tokens_total输入 token 消耗llm_output_tokens_total输出 token 消耗tool_cost_total工具调用成本retry_cost_total重试带来的额外成本cost_by_model不同模型成本拆分cost_by_user/cost_by_tenant多租户计费和限额cost_by_task_type找出最贵的任务类型成本观测的目标不是单纯省钱而是知道钱花在哪里。有些高成本是值得的比如高风险任务多做一次验证有些高成本是浪费比如反复把同一段长文档塞进上下文。八、质量观测不要只看成功率Agent 的“成功”很难只靠 HTTP 200 判断。一个客服 Agent 返回了答案接口是 200但答案可能不忠实一个代码 Agent 生成了 patch但测试可能没跑一个数据分析 Agent 给了结论但 SQL 可能查错表。质量指标要按任务类型设计。常见维度包括指标解释Task Success用户任务是否真的完成Faithfulness回答是否忠于证据和工具结果Tool Correctness工具是否选对、参数是否正确Groundedness结论是否有来源或可验证依据Human Escalation Rate需要人工接管的比例Correction Rate用户要求“不是这个意思”的比例Regeneration Rate用户点击重新生成的比例Safety Intervention Rate安全策略拦截比例这里可以结合 LLM-as-Judge但不要迷信裁判模型。更稳的做法是混合规则校验JSON 是否合法、必填字段是否齐全。工具校验SQL 是否只读、订单 ID 是否存在。自动评估用评审模型判断是否忠于证据。人工抽检对高风险任务定期 review trace。用户反馈点赞、踩、重试、人工接管。可观测性和评估最好打通。trace 负责告诉你“发生了什么”eval 负责告诉你“这样好不好”。九、隐私与安全可观测性不是全量留存Agent 可观测性很容易走向另一个危险为了 debug把所有 Prompt、用户输入、工具结果、模型输出全存下来。这在生产环境通常不可接受。你需要从一开始就设计数据分级数据建议用户原文默认脱敏或按需短期保存Prompt 全文记录版本号、hash、模板变量不默认明文保存工具参数敏感字段脱敏保留 schema 和 hash工具结果保留摘要、ID、大小、状态敏感内容不落库模型输出按业务合规要求保存支持删除Trace 元数据可长期保存用于统计和排障几个实用规则对手机号、邮箱、地址、身份证、银行卡、Token 做自动脱敏。高风险工具调用只记录必要字段不存完整返回。给 trace 设置保留周期不要无限期保存。区分 debug 环境和生产环境的记录粒度。支持按用户或租户删除相关观测数据。对内部观测平台做权限控制和审计。可观测性本身也会成为敏感数据系统。别让排障工具变成新的数据泄露入口。十、落地方案从最小闭环开始不建议一开始就做一个巨大的 Agent Observability 平台。可以按这个顺序落地阶段目标做法1. Trace 打通能复盘一次 Agent Run记录 root trace、LLM span、tool span2. 成本可见知道钱花在哪里记录 token、模型、工具、重试成本3. 失败分类知道主要失败来自哪里统一 failure_type 和 recovery_action4. 隐私脱敏避免观测数据变成风险对输入、参数、结果做脱敏和保留周期5. 质量评估不只看接口成功接入规则校验、LLM-as-Judge、人工抽检6. 告警面板让问题主动浮出来按任务类型看延迟、失败、成本、质量最小版本可以很朴素{ ”trace_id”: ”tr_123”, ”run_id”: ”run_456”, ”task_type”: ”customer_refund”, ”status”: ”degraded_success”, ”total_latency_ms”: 4820, ”total_input_tokens”: 6820, ”total_output_tokens”: 940, ”total_cost_usd”: 0.031, ”spans”: [ { ”type”: ”llm.call”, ”model”: ”example-model”, ”input_tokens”: 2400, ”output_tokens”: 320, ”latency_ms”: 1380 }, { ”type”: ”tool.call”, ”tool_name”: ”query_order_status”, ”status”: ”timeout”, ”duration_ms”: 2000, ”recovery_action”: ”retry” } ] }别小看这个最小版本。只要每次 Agent Run 都能被这样串起来排障效率就会有明显提升。十一、常见问题最后给一个判断问题回答要点Agent 可观测性和普通服务可观测性有什么不同普通服务路径更固定Agent 路径由模型动态决定所以更需要记录计划、工具调用、上下文、失败恢复和成本。一定要记录完整 Prompt 吗不一定。生产环境更推荐记录模板版本、hash、变量摘要和脱敏片段只有在合规允许时短期保存明文。推理过程要不要全量保存不建议保存完整隐藏推理。更实用的是记录决策摘要、可选动作、最终选择、依据摘要和结果。成本只看 token 就够了吗不够。还要看工具成本、重试成本、长上下文成本、不同模型和任务类型的成本。用 OpenTelemetry 是否有必要如果系统要接入现有监控体系建议尽量贴近 OpenTelemetry。它提供统一的 trace、metric、log 采集模型GenAI 语义约定也在覆盖模型和工具调用场景。如何发现 Agent 在循环记录每轮 step、tool_name、args_hash、result_hash。如果连续多轮动作和结果高度相似就可以触发 loop_error 或强制停止。可观测性会不会带来隐私风险会。所以必须设计脱敏、权限、保留周期和删除机制。可观测性不是全量留存。一个不能被观测的 Agent很难真正进入生产。Demo 里答对几次不难难的是上线后能解释每一次失败、控制每一次成本、复盘每一次危险动作。可观测性就是 Agent 从“能跑”走向“可运营”的那道门槛。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】