当前位置: 首页 > news >正文

LLM和Agent——专题5: LLM Ops 入门(2)

AgentOps 是什么?Agent 可观测性从零到一

Agent 不是"调一次 API 就完事"的应用——它在多轮思考、工具调用、甚至自我纠错中完成一个任务。这种复杂性让可观测性从"锦上添花"变成了"保命刚需"。


一、引言

2025 年被称为"Agent 元年"。从 coding agent、客服 agent 到 browser-use agent,AI 应用正在从"单次问答"进化到"多步自主执行"。但 Agent 带来了全新的工程挑战——一个用户请求可能触发:

  • 5 次 LLM 调用(思考、规划、执行、校验、总结)
  • 3 次工具调用(搜索文档、查询数据库、执行代码)
  • 2 次内部循环(结果不符合预期 → 重试)

当用户说"你的 Agent 回答错了",你该怎么排查?是 Prompt 的问题?是检索到的上下文有问题?还是工具调用返回了错误结果?传统的日志系统完全无法应对这种复杂度。

读完这篇文章,你将理解:

  • AgentOps 与 LLMOps 的核心区别
  • Agent 场景独有的可观测性维度
  • 主流方案的能力对比和选型建议
  • 如何从零搭建 Agent 可观测性体系

二、为什么 Agent 需要专门的可观测性?

2.1 Agent 的"多跳推理"让故障定位变得困难

这是传统 LLM 应用的调用链:

用户请求 → [RAG 检索] → LLM 调用 → 返回结果

这是 Agent 的调用链:

用户请求 ├→ LLM 思考(规划子任务) ├→ 工具调用 1:搜索知识库 │ └→ 结果校验 → 不理想,换关键词重新搜索 ├→ 工具调用 2:查询数据库 ├→ LLM 综合信息,生成回答 └→ LLM 自检 → 发现遗漏 → 补充工具调用 3 → 最终回答

一个请求可能产生 10-20 个子步骤,任何一个环节出错都会传递到最终结果。你需要的不是"某次 LLM 调用的日志",而是整棵执行树的完整回放

2.2 新出现的可观测维度

Agent 带来了一些传统后端监控完全不覆盖的维度:

新维度说明为什么重要
决策 TraceAgent 每一步的"思考 → 行动 → 观察"循环理解 Agent 为什么做了某个选择
工具调用链调了哪个工具、参数是什么、返回值是什么定位工具集成问题
重试与循环Agent 自我纠错的次数和原因发现 Prompt 设计缺陷
任务成功率多步任务的整体完成率(非单次调用成功率)Agent 评估的核心指标
Token 放大效应一个用户请求实际触发了多少 LLM 调用和 Token成本控制

三、AgentOps 的核心能力拆解

3.1 Trace & Span:不只是"调用链",而是"决策树"

分布式追踪(Distributed Tracing)的概念在微服务领域已经成熟,但 Agent 的 Trace 需要承载更多信息:

传统 Spanservice=user-service, operation=GET /users, duration=23ms

Agent Span

span: type: "llm.think" input: "用户想订一张从北京到上海的机票..." output: "我需要先查航班信息,再确认用户偏好..." model: "claude-sonnet-4-6" token_usage: {prompt: 342, completion: 156} duration_ms: 2340 metadata: step_in_plan: "gather_info" parent_span: "task_book_flight"

关键设计原则

  • 每个 LLM 调用和工具调用都是独立 Span
  • Span 之间构成树状结构,根 Span 代表用户请求
  • 需要记录 IO 内容(至少摘要),方便事后回放分析

3.2 决策回放:排查问题的终极武器

Agent 最让人头疼的场景是:同样的输入,有时对有时错。为什么?因为温度参数、检索结果、API 返回值的微小差异都会让 Agent “走上不同的路”。

决策回放(Decision Replay)能力让你能:

  1. 以时间线形式回看 Agent 的每一步
  2. 看到每一步的输入、输出、耗时、模型参数
  3. 对比"成功路径"和"失败路径"的分叉点
# 伪代码:用 LangFuse 获取一次 Trace 并分析fromlangfuseimportLangfuse langfuse=Langfuse()# 获取某次用户投诉的 Tracetrace=langfuse.get_trace(trace_id="trace_abc123")print(f"任务:{trace.name}")print(f"总步数:{len(trace.observations)}")print(f"总 Token:{trace.usage.total}")print(f"总耗时:{trace.duration}ms")forobsintrace.observations:print(f" [{obs.type}]{obs.name}| "f"耗时={obs.duration_ms}ms | "f"Token={obs.usage.totalifobs.usageelse0}")

3.3 工具调用可观测性:Agent 的"手"不能是黑盒

Agent 通过工具(Tool/Function Call)与外部世界交互。工具的可靠性直接影响 Agent 的可靠性。

每个工具调用需要记录

{"tool_name":"search_knowledge_base","input":{"query":"Python GIL 是什么","top_k":5},"output":{"documents":[...],"count":3,"elapsed_ms":234},"status":"success","error":null}

工具层面的关键指标

指标计算方式告警阈值建议
工具调用成功率success / total< 95%
工具调用 P99 延迟排序取 P99> 2000ms
空结果率(搜索类工具)empty_result / total> 30%
工具调用次数分布按工具名分组统计异常尖峰

3.4 成本归因:Agent 是"烧钱机器"还是"物有所值"?

单个 LLM 调用的成本大概在 $0.001-$0.01,看起来不贵。但一个 Agent 任务可能调用 10+ 次 LLM,每次的上下文又越来越长(RAG 检索结果被拼入后续 Prompt),导致成本非线性增长

成本归因需要回答

  • 哪个用户/租户花的 Token 最多?
  • 哪种类型的任务平均成本最高?
  • Agent 的多轮循环中,哪一轮最"烧钱"?
# 成本归因示例defcalculate_session_cost(trace):total_cost=0cost_breakdown={}forobsintrace.observations:ifobs.type=="generation"andobs.usage:model=obs.model input_cost=(obs.usage.prompt_tokens/1_000_000)*PRICING[model].inputoutput_cost=(obs.usage.completion_tokens/1_000_000)*PRICING[model].output cost=input_cost+output_cost total_cost+=cost cost_breakdown[obs.name]=cost_breakdown.get(obs.name,0)+costreturntotal_cost,cost_breakdown

四、主流 AgentOps 方案对比

方案类型核心优势短板适合场景
LangFuse开源/商业全栈(Trace + 评测 + Prompt 管理 + 成本),LangChain/OpenAI 原生集成自部署需要基础设施中小团队首选
LangSmith商业LangChain 深度集成,Hub 社区共享 Prompt非 LangChain 栈集成成本高重度 LangChain 用户
Arize Phoenix开源质量评估和漂移检测能力强Trace 功能相对弱侧重质量监控的团队
Weights & Biases商业训练+评估一条龙,实验追踪成熟Agent 场景的支持较新同时做微调和 Agent 的团队
自研方案自建完全定制,数据不外传研发成本高,长期维护负担大厂/强合规需求

选型建议

  • 2-5 人团队、做 Agent 原型:LangFuse Cloud(免费额度够用)
  • 10-50 人团队、Agent 在产品中:LangFuse 自部署 + Phoenix 做质量
  • 50+ 人、多个 Agent 产品线:LangSmith(商业支持)+ 自研部分组件
  • 强合规/私有化:LangFuse 自部署 + 定制开发

五、从零搭建 Agent 可观测性(最小可行版本)

第 1 步:集成 Trace SDK(30 分钟)

fromlangfuseimportLangfusefromlangfuse.decoratorsimportobserve,langfuse_context# 初始化langfuse=Langfuse(public_key="pk-...",secret_key="sk-...",)@observe(as_type="generation")defcall_llm(messages,model="gpt-4o"):# 你的 LLM 调用逻辑response=openai_client.chat.completions.create(...)# 自动记录 Token 使用langfuse_context.update_current_observation(usage={"input":response.usage.prompt_tokens,"output":response.usage.completion_tokens},model=model)returnresponse@observe()defagent_loop(user_request):# Agent 主循环plan=call_llm(...)# 自动嵌套为子 Spantool_result=execute_tool(...)final_answer=call_llm(...)returnfinal_answer

第 2 步:建立质量评估(1 小时)

fromlangfuseimportLangfuse langfuse=Langfuse()# 在 Trace 上打分trace=langfuse.trace(name="agent_booking",user_id="user_123")# 对最终回答评分trace.score(name="user_satisfaction",value=4,# 1-5 分comment="订票成功但耗时较长")trace.score(name="task_success",value=1,# 0 或 1comment="正确完成了机票预订")

第 3 步:配置告警(30 分钟)

LangFuse 支持 Webhook 和 Prometheus 集成,至少配置这几个告警:

  • 任务成功率 < 80%:Agent 可能出问题
  • P95 延迟 > 30s:某些任务卡住了
  • 单次任务 Token > 50K:可能出现了无限循环
  • 工具调用错误率 > 5%:外部依赖有问题

六、实战案例:一次 Agent 线上故障的排查回放

某团队的知识库问答 Agent 在周四突然出现质量骤降。通过 LangFuse Trace 排查过程:

  1. 定位问题 Trace:筛选用户点踩的会话,找到 5 个代表性 Trace
  2. 回放对比:将这些 Trace 与前一天的成功 Trace 对比
  3. 找到分叉点:发现"搜索知识库"工具返回的空结果率从 3% 飙升到 35%
  4. 根因:周三晚上知识库的向量索引重建任务失败,导致大量文档检索不到
  5. 修复:重建索引,30 分钟后恢复正常

没有 Agent 可观测性,这个过程可能需要一整个下午——而你有了 Trace,只用了 15 分钟。

七、总结

  • Agent 的可观测性不是可选项:多跳推理 + 工具调用 + 自我纠错 = 必须要有 Trace 和回放
  • AgentOps 是 LLMOps 的超集:多出了决策回放、工具调用链、任务成功率等关键维度
  • 最小起步选 LangFuse:开源、全栈、集成简单,30 分钟就能看到第一棵 Trace 树
  • 成本归因要趁早:Agent 的 Token 放大效应会让成本 “安静地” 增长,等你发现已经晚了
  • 评估和可观测是一体的:没有自动评估的可观测只是一堆漂亮图表——在生产中,它们必须一起工作

AgentOps 还处在非常早期的阶段。LangFuse、LangSmith、Arize 每个月都在发布 Agent 相关的新功能。建议持续关注这些项目的 Changelog,Agent 的可观测性标准还在被定义中。


http://www.jsqmd.com/news/909494/

相关文章:

  • 2026年贵阳观山湖、白云区中高端室内全案设计深度横评:从贵州精装室内设计到贵州全屋整装的完整避坑导则 - 年度推荐企业名录
  • 告别假货水货!CH站Cigarhome欧洲多国lacasa行货直供,古巴非古雪茄一站式选购(2026) - damaigeo
  • Windows和Office智能激活终极指南:KMS_VL_ALL_AIO一键解决方案
  • 国内门窗十大品牌盘点:基于资质与实测的客观排行 - 奔跑123
  • 别再纠结选哪个了!手把手教你用信号发生器和面包板实测驻极体MIC与数字硅麦(附波形图)
  • OpenCore Legacy Patcher终极指南:三步让老Mac重获新生
  • 轨迹数据太稀疏?试试TRACLUS的‘分段+聚类’两步法,5分钟讲清MDL与密度聚类怎么结合
  • 2026四川成都卫校靠谱学校综合盘点:四家正规民办院校选校参考 - 深度智识库
  • UE4 Sequencer入门避坑指南:从‘初识Sequencer’工程到创建第一个移动动画的全流程
  • 门窗十大品牌实测排行:核心梯队品质与资质对比 - 奔跑123
  • 从零制作电磁铁:原理、材料与实操指南
  • Java 全角半角假名转换以及验证
  • 2026年甄选:口碑好的不锈钢钣金加工定制厂家 - 品牌推广大师
  • 202 郑州名包回收指南:正规渠道怎么选、估价逻辑与安心变现要点 - 薛定谔的梨花猫
  • Claude商业分析报告交付延迟率高达47%?——3大架构级瓶颈诊断工具+实时流式响应改造方案(已验证于金融/零售双行业)
  • 四个点扫描举例
  • 告别基础材料库!CST高级材料建模实战:手把手教你创建频变吸波材料与自定义各向异性介质
  • 从Prompt工程到思维链:10个技巧构建AI协同工作流
  • 特斯拉绕开,英伟达强攻!但 99% 的机器人操作能力,都逃不过这两种…
  • 手把手复现RRT*优化过程:用Python可视化理解‘重布线’与椭圆采样
  • Keil µVision调试器中AINx VTRegs的应用与信号模拟技巧
  • 2026年国产瓶盖自动生产线厂家选型攻略:三步锁定最适合你的那家 - 品牌2025
  • 5分钟从零开始:用RVC-WebUI实现专业级AI语音克隆转换
  • 破解百度网盘API认证难题:BaiduPanFilesTransfers中bdstoken获取失败的3种解决方案深度解析
  • 对比使用Taotoken前后项目AI模块的接入效率与维护复杂度变化
  • 辽宁质量流量计厂家合规盘点:选型参考名录 - 奔跑123
  • Go语言与人工智能:入门与实战
  • Windows下Nginx配置SSL实现Https访问(包含证书生成)
  • 免费证件照制作免费入口在哪?2026微信小程序+在线工具汇总 - 科技大爆炸
  • FileZilla Server安装配置避坑全记录:从用户权限到防火墙设置,一次搞定