1. 企业客户到底在焦虑什么
1.1 从一次真实的客户会议说起
上个月我跟一家做金融风控的客户开需求评审会,对方技术负责人上来第一句话不是问模型选型,也不是问推理成本,而是直接甩了一句:“你们这套 Agent 系统上线之后,我怎么知道它每一步在想什么?出了问题我找谁?”
这句话我印象特别深。因为过去两年,企业客户问得最多的是“你们用的是什么大模型”“准确率多少”“能不能私有化部署”。但从去年下半年开始,问题变了。越来越多的客户开始关心一个听起来很虚、但实际非常要命的东西——AI 的可观测性。
什么叫可观测性?用最直白的话说:当一个 AI 系统跑起来之后,你能不能看清楚它内部发生了什么、为什么做出这个决策、在哪一步出了问题、以及出了问题之后能不能快速定位和修复。传统软件的可观测性靠日志、指标、链路追踪三件套就够了,但 AI 系统,尤其是基于 Agent 架构的智能体系统,这套东西完全不够用。
我接触过的企业客户里,有做智能客服的、有做销售智能体的、有做代码平台智能体的、也有做考公智能体和旅游智能体的。行业不同,但他们在可观测性上的焦虑高度一致。而且有意思的是,他们问法五花八门,但本质上问的是同一件事。下面我把这五种典型问法拆开讲,每一种背后对应的真实诉求是什么,以及我在实际项目里是怎么应对的。
1.2 五种问法,一个内核
先给结论:企业客户关于 AI 可观测性的问题,无论怎么包装,最终都指向同一个内核——可控性与可追责性。他们不是技术人员在做技术选型,他们是业务方在做风险控制。这个认知非常关键,因为你如果把它当成一个纯技术问题去回答,大概率会答偏。
我把常见的五种问法列出来,你可以对照一下自己遇到过的场景:
| 问法 | 表面问题 | 真实诉求 |
|---|---|---|
| “你们的 Agent 每一步决策能追溯吗?” | 决策链路是否透明 | 出了事故能不能定责 |
| “模型输出不稳定,怎么保证质量?” | 输出一致性 | 业务风险是否可控 |
| “多 Agent 协作的时候,怎么知道谁干了什么?” | 协作过程可见性 | 系统复杂度是否可管理 |
| “线上跑着跑着效果变差了,怎么发现?” | 性能退化检测 | 是否有持续监控能力 |
| “客户投诉说 AI 答错了,我怎么复现?” | 问题复现能力 | 是否有完整的会话记录和回放机制 |
你看,这五个问题,表面上是五个不同的技术点,但拆到最底层,企业客户真正想买的是三个东西:第一,我能看见;第二,我能控制;第三,出了事我能说得清。这就是 AI 可观测性的核心价值。
很多做 Agent 开发的团队,技术能力很强,模型调得很好,但一到企业客户面前就卡壳,就是因为没想明白这一层。客户不是不信任你的技术,客户是不信任一个他看不见内部运作的黑盒子。你跟他讲你的 Agent 架构多先进、用了多少种工具调用、支持多复杂的多轮推理,他听不懂也不关心。他只关心一件事:这个系统跑在我的业务上,我能不能睡得着觉。
2. 可观测性到底要观测什么
2.1 传统监控和 AI 可观测性的本质区别
要理解 AI 可观测性为什么难,先得搞清楚它和传统软件监控的区别。传统软件的行为是确定性的:你输入 A,经过固定的代码逻辑,输出 B。如果输出不对,你查日志、看堆栈,基本能定位到哪一行代码出了问题。整个过程是可枚举、可复现的。
但 AI 系统,尤其是基于大模型的 Agent 系统,行为是概率性的。同样的输入,可能因为温度参数、上下文长度、工具调用顺序的不同,产生完全不同的输出。更麻烦的是,Agent 的决策过程是一个多步推理链,每一步都可能引入不确定性。你看到的最终输出,是经过了好几层“黑盒”之后的结果。
这就导致传统监控手段基本失效。你监控 CPU、内存、网络这些指标,对 AI 系统来说意义不大,因为 AI 系统的问题往往不是资源问题,而是语义层面的问题。比如 Agent 理解错了用户意图、调用了错误的工具、在推理链中间某一步产生了幻觉、或者多 Agent 协作时出现了信息传递偏差。这些问题在传统监控面板上完全看不出来。
我经常用一个类比来解释:传统软件监控就像给汽车装仪表盘,你看油量、速度、水温就够了。但 AI 系统的可观测性,更像是给一个正在做决策的人做脑电图,你要看的是他的思考过程,而不仅仅是他的心跳和血压。
2.2 Agent 系统必须观测的五个层面
根据我在多个 Agent 项目上的实操经验,一个完整的 AI 可观测性体系,至少要覆盖以下五个层面。这五个层面从下到上,构成了一个完整的观测栈:
第一层:基础设施层。这一层跟传统监控重叠,主要看 GPU 利用率、显存占用、推理延迟、Token 吞吐量这些硬指标。很多团队觉得这层不重要,但实际上,Agent 系统性能问题有相当一部分根源在这里。比如推理延迟突然飙升,可能导致 Agent 的工具调用超时,进而引发整个推理链断裂。
第二层:模型调用层。这一层要记录每一次大模型调用的完整信息:输入 Prompt、输出内容、Token 消耗、耗时、模型版本、温度参数等。这是最基础也是最重要的一层。没有这一层,后面所有分析都是空中楼阁。我见过太多团队,上线之后连每次调用的完整 Prompt 都没存下来,出了问题根本没法复现。
第三层:Agent 决策层。这是 AI 可观测性区别于传统监控的核心层。你要记录 Agent 的每一步推理:它为什么选择调用这个工具而不是那个、它的中间推理结果是什么、它在哪一步产生了分支、分支的条件是什么。这一层的数据结构设计非常关键,后面我会详细讲。
第四层:业务语义层。这一层要把技术指标翻译成业务语言。比如“Agent 在第 3 步调用了知识库检索工具,检索到了 5 条文档,最终选择了第 2 条作为答案依据”——这就是业务语义层的记录。企业客户最关心的就是这一层,因为他们要拿这个去跟业务方解释、去跟客户交代。
第五层:用户体验层。最终用户的实际感受如何:响应时间是否可接受、答案是否准确、多轮对话是否连贯、有没有出现答非所问的情况。这一层的数据往往来自前端埋点和用户反馈,是验证整个系统效果的最终标准。
这五层不是孤立的,而是相互关联的。一个完整的可观测性系统,要能把一次用户请求从最上层穿透到最下层,形成一条完整的链路。这就是所谓的全链路追踪在 AI 场景下的具体含义。
2.3 为什么多 Agent 协作让可观测性难度翻倍
单独一个 Agent 的可观测性已经够复杂了,但现在的企业级应用越来越多地采用多 Agent 协作架构。比如一个销售智能体系统,可能包含线索筛选 Agent、话术生成 Agent、客户跟进 Agent、数据分析 Agent 等多个角色。它们之间通过消息传递、共享内存或者任务队列进行协作。
这种架构下,可观测性的难度不是线性增加,而是指数级增加。原因有三个:
第一,调用链路变长且非线性。单 Agent 的推理链基本是线性的,但多 Agent 协作会产生分支、合并、循环等复杂拓扑结构。一个请求可能触发多个 Agent 并行工作,然后汇总结果,再触发下一轮协作。这种链路用传统的 Trace 模型很难表达。
第二,责任边界模糊。当最终输出出现问题时,你很难判断是哪个 Agent 的责任。是线索筛选 Agent 给错了输入?还是话术生成 Agent 理解错了意图?还是汇总 Agent 在合并结果时出了偏差?如果没有细粒度的观测数据,这个问题根本没法回答。
第三,状态管理复杂。多 Agent 系统通常有共享状态,一个 Agent 的决策会影响其他 Agent 的输入。这种状态传递如果观测不到位,出了问题就像多米诺骨牌,你只看到最后倒了,但不知道第一张牌是什么时候被推倒的。
我在一个多 Agent 客服项目上踩过这个坑。当时系统上线后,客户投诉说某些问题的回答质量明显下降。我们查了半天模型和 Prompt,都没发现问题。最后通过加详细的 Agent 间通信日志,才发现是两个 Agent 在传递上下文时,对某个关键字段的理解不一致,导致信息在传递过程中被“污染”了。这个问题如果只靠传统监控,可能永远都发现不了。
3. 五种问法的深度拆解与应对方案
3.1 “每一步决策能追溯吗”——决策链路透明化
这是企业客户问得最多的一个问题,也是最核心的一个。客户说“追溯”,其实包含了两层意思:一是事后能查,二是事中能看。事后能查是基本要求,事中能看是进阶要求。
先说事后能查。这要求你的系统必须完整记录 Agent 的每一步决策。什么叫完整?我总结了一个“五要素记录法”,每一步决策至少要记录以下五个要素:
- 时间戳:精确到毫秒,用于还原决策时序
- 决策类型:是工具调用、还是推理生成、还是条件分支
- 输入上下文:这一步决策基于什么信息做出的
- 决策结果:最终选择了什么
- 决策依据:为什么选这个而不是别的(这个最难,但最有价值)
前四个要素大部分团队都能做到,但第五个“决策依据”往往被忽略。而恰恰是这个要素,是企业客户最看重的。因为当出问题时,客户要的不是“Agent 调用了工具 A”,而是“Agent 为什么调用工具 A 而不是工具 B”。这个“为什么”就是决策依据。
实操上,我通常会在 Agent 的 Prompt 里显式要求模型输出决策理由,然后在解析输出时把理由字段单独存下来。比如在工具调用的场景下,我会让模型在调用工具前先输出一段简短的思考:“我需要查询用户的历史订单,因为当前问题涉及退换货政策,所以调用订单查询工具。”这段思考就是决策依据,必须完整记录。
再说事中能看。这要求你有一个实时的观测面板,能展示当前正在运行的 Agent 的决策状态。这个难度更高,因为 Agent 的推理是流式的,你要在推理过程中就把中间状态推送到前端。技术上通常用 WebSocket 或者 Server-Sent Events 来实现。我在一个代码平台智能体项目上做过这个功能,效果非常好,客户的技术负责人说“能看到 Agent 一步步思考,心里踏实多了”。
注意:决策链路记录会显著增加存储成本。一个中等复杂度的 Agent 任务,可能产生几十到上百条决策记录。如果每天有大量请求,存储量会非常可观。我的建议是分级存储:热数据保留 7 天,温数据保留 30 天,冷数据归档到对象存储。同时要对记录做结构化处理,方便后续检索和分析。
3.2 “输出不稳定怎么保证质量”——输出一致性监控
这个问题背后,客户真正担心的是业务风险。AI 输出不稳定,意味着同样的业务场景可能得到不同的处理结果,这在金融、医疗、法律等强监管行业是不可接受的。
要解决这个问题,光靠调低温度参数是不够的。温度参数只能降低随机性,但无法消除语义层面的不一致。你需要一套完整的输出质量监控体系。我在实际项目中通常从三个维度入手:
维度一:输出格式一致性。检查 Agent 的输出是否符合预定义的格式规范。比如要求输出 JSON,就要验证 JSON 是否合法、字段是否完整、类型是否正确。这个可以用自动化脚本做,每次输出都跑一遍校验,不合格的记录下来。
维度二:输出语义一致性。这个更难,需要用到语义相似度计算。对于同一类问题,收集多次输出的结果,计算它们之间的语义相似度。如果相似度低于某个阈值,说明输出不稳定,需要告警。实操上可以用 Embedding 模型把输出转成向量,然后计算余弦相似度。
维度三:输出事实一致性。检查 Agent 输出的事实性内容是否与知识库一致。这个需要结合 RAG 的检索结果来做。如果 Agent 输出的内容在知识库中找不到依据,或者与知识库内容矛盾,就要标记为潜在幻觉。
我做过一个测试,同一个销售话术生成 Agent,在温度参数 0.7 的情况下,对同一个客户问题生成 10 次话术,结果有 3 次出现了明显的语义偏差。后来我们把温度降到 0.3,同时加了输出格式校验和语义相似度监控,不一致率降到了 5% 以下。这个数据后来成了我们跟客户汇报时的关键指标。
| 监控维度 | 检测方法 | 告警阈值建议 | 处理策略 |
|---|---|---|---|
| 格式一致性 | JSON Schema 校验 | 不合格率 > 1% | 自动重试 + 人工审核 |
| 语义一致性 | Embedding 余弦相似度 | 相似度 < 0.85 | 标记异常 + 抽样分析 |
| 事实一致性 | 知识库比对 | 矛盾率 > 2% | 触发人工复核 |
3.3 “多 Agent 协作谁干了什么”——协作过程可见性
多 Agent 协作的可观测性,核心是要解决责任归属问题。当系统出问题时,要能快速定位到是哪个 Agent 的哪个环节出了问题。
我的做法是给每个 Agent 分配一个唯一标识,并且在 Agent 间的每一次消息传递中都带上这个标识和传递链路信息。这样,一条完整的协作链路就可以被还原出来。具体来说,我会在消息结构中增加以下字段:
agent_id:当前 Agent 的唯一标识parent_agent_id:上游 Agent 的标识trace_id:整条链路的唯一标识step_index:当前步骤在链路中的序号message_type:消息类型(请求、响应、通知、错误)payload_summary:消息内容的摘要(不存全量,节省空间)
有了这些字段,你就可以用类似分布式追踪的方式,把整个多 Agent 协作过程可视化出来。我通常会用时间轴的方式展示,每个 Agent 是一条泳道,消息传递用箭头连接,这样一眼就能看出哪个 Agent 耗时最长、哪个环节出现了异常。
这里有个实操心得:消息摘要的生成很关键。你不能把完整的消息内容都存下来,那样存储成本太高。但摘要又不能太简略,否则出了问题看不出细节。我的经验是,摘要要包含三个要素:消息意图、关键实体、异常标记。比如“请求查询订单,订单号 12345,无异常”或者“响应返回退款政策,政策编号 P-001,标记为低置信度”。
还有一个容易被忽略的点:Agent 的启动和销毁也要记录。在多 Agent 系统中,Agent 可能是动态创建和销毁的。如果某个 Agent 在异常状态下被销毁,而你没有记录,那这个 Agent 的所有中间状态就丢失了。我在一个项目上就遇到过这个问题,一个负责数据校验的 Agent 在报错后被自动销毁,导致我们花了很长时间才定位到问题根源。
3.4 “效果变差了怎么发现”——性能退化检测
AI 系统的性能退化往往是渐进的,不像传统软件那样会突然崩溃。它可能表现为:回答质量慢慢下降、响应时间逐渐变长、工具调用成功率缓慢降低。这种渐进式退化,如果没有专门的检测机制,很难及时发现。
我通常会用三种方法来检测性能退化:
方法一:基线对比。在系统上线初期,建立一套性能基线。包括平均响应时间、工具调用成功率、输出质量评分等指标。然后定期(比如每天)用相同的测试集跑一遍,对比当前指标和基线的差异。如果差异超过阈值,就触发告警。
方法二:滑动窗口统计。对关键指标做滑动窗口统计,比如最近 1 小时、最近 24 小时、最近 7 天的平均值。如果短窗口的指标明显低于长窗口,说明近期出现了退化。这个方法的好处是能捕捉到突发性的退化。
方法三:用户反馈关联。把用户反馈(点赞、点踩、投诉)和系统指标关联起来。如果某个时间段内负面反馈突然增多,就去查那个时间段的系统指标,往往能找到原因。我在一个智能客服项目上,就是通过用户反馈发现某个知识库文档更新后,Agent 的检索准确率明显下降,因为新文档的 Embedding 和旧文档不在同一个语义空间。
性能退化的原因通常有以下几类,我整理了一个排查表:
| 退化表现 | 可能原因 | 排查方向 |
|---|---|---|
| 响应时间变长 | 模型服务负载高、工具调用超时 | 查 GPU 利用率、工具 API 延迟 |
| 输出质量下降 | Prompt 漂移、知识库更新、模型版本变更 | 对比 Prompt 版本、检查知识库变更记录 |
| 工具调用失败率上升 | 工具 API 变更、鉴权过期、网络问题 | 查工具 API 日志、检查鉴权配置 |
| 多轮对话不连贯 | 上下文管理异常、记忆模块故障 | 查上下文长度、检查记忆存储 |
3.5 “客户投诉了怎么复现”——会话回放能力
这是最实际的一个需求。客户投诉说 AI 答错了,你要能快速复现当时的情况,找到问题原因。这要求你的系统具备完整的会话回放能力。
会话回放的核心是全量记录 + 精确还原。全量记录意味着你要把一次会话的所有信息都存下来:用户输入、Agent 的每一步推理、工具调用参数和返回结果、最终输出、时间戳、模型版本、Prompt 版本等。精确还原意味着你要能用这些记录,在测试环境中重现当时的会话过程。
实操上,我会设计一个会话记录的数据结构,包含以下核心字段:
{ "session_id": "sess_20250101_001", "user_id": "user_12345", "start_time": "2025-01-01T10:00:00.000Z", "end_time": "2025-01-01T10:00:15.000Z", "model_version": "gpt-4-0125", "prompt_version": "v2.3", "turns": [ { "turn_index": 0, "user_input": "我想退换货", "agent_steps": [ { "step_index": 0, "step_type": "reasoning", "content": "用户想退换货,需要先查询订单信息", "timestamp": "2025-01-01T10:00:01.000Z" }, { "step_index": 1, "step_type": "tool_call", "tool_name": "query_order", "tool_params": {"user_id": "user_12345"}, "tool_result": {"order_id": "ord_67890", "status": "shipped"}, "timestamp": "2025-01-01T10:00:02.000Z" } ], "agent_output": "您的订单已发货,可以申请退换货...", "timestamp": "2025-01-01T10:00:03.000Z" } ] }有了这个结构,复现就很简单了:把user_input重新输入系统,用相同的model_version和prompt_version,看输出是否一致。如果不一致,说明系统有随机性或者有外部依赖变化;如果一致,说明问题出在业务逻辑或者知识库上。
提示:会话回放要注意数据脱敏。企业客户的会话数据往往包含敏感信息,存储和回放时都要做脱敏处理。我通常会在记录时就把敏感字段(手机号、身份证号、银行卡号)替换成占位符,回放时再用真实数据填充。这样既保证了回放能力,又符合数据安全要求。
4. 落地一套可观测性系统的实操路径
4.1 技术选型:自建还是用现成方案
这是每个团队都会面临的问题。我的建议是:核心链路自建,周边能力用现成方案。为什么?因为 AI 可观测性的核心——Agent 决策链路记录和回放——是高度定制化的,市面上没有哪个现成方案能完全满足你的需求。但周边的日志存储、可视化、告警这些能力,完全可以用成熟的开源方案。
具体来说,我的技术栈组合通常是这样的:
- 数据采集:自研 SDK,嵌入到 Agent 框架中,负责采集决策链路数据
- 数据存储:ClickHouse 或 Elasticsearch,用于存储结构化的决策记录
- 链路追踪:OpenTelemetry + Jaeger,用于展示调用链路
- 指标监控:Prometheus + Grafana,用于展示性能指标
- 日志管理:Loki 或 ELK,用于存储和检索原始日志
- 告警:Alertmanager,配合自定义告警规则
这套组合的好处是,每个组件都是成熟的,社区活跃,出了问题容易找到解决方案。同时,核心的决策链路数据格式是你自己定义的,完全可控。
如果你用的是 Coze 这类平台搭建的智能体,平台本身可能提供了一些可观测性能力,但通常不够细粒度。我的做法是在平台能力之上,再叠加一层自研的观测层。比如通过平台的 API 获取 Agent 的运行数据,然后转换成自己的数据格式存储。这样既利用了平台的便利性,又保证了自己的观测能力。
4.2 数据采集的埋点设计
埋点是可观测性系统的基础。埋点设计得好不好,直接决定了后续分析的深度。我在设计埋点时,遵循一个原则:在关键决策点埋点,而不是在每个函数入口埋点。
什么叫关键决策点?就是 Agent 做出实质性选择的地方。比如:
- 意图识别完成,确定了用户意图
- 工具选择完成,决定了调用哪个工具
- 工具调用返回,拿到了结果
- 推理链完成,生成了最终输出
- 多 Agent 协作中,消息发送和接收
这些点埋好了,整个决策链路就清晰了。不需要在每个函数入口都埋点,那样数据量太大,反而干扰分析。
埋点的数据结构要统一。我通常定义一个通用的 Span 结构,所有埋点数据都遵循这个结构:
class AgentSpan: trace_id: str # 链路唯一标识 span_id: str # 当前节点唯一标识 parent_span_id: str # 父节点标识 span_type: str # 节点类型:reasoning/tool_call/output agent_id: str # Agent 标识 start_time: datetime # 开始时间 end_time: datetime # 结束时间 input_summary: str # 输入摘要 output_summary: str # 输出摘要 metadata: dict # 扩展字段 status: str # 状态:success/error/timeout这个结构跟 OpenTelemetry 的 Span 模型是兼容的,所以可以直接接入 Jaeger 做可视化。同时,metadata字段可以放业务相关的扩展信息,比如工具名称、模型版本、Token 消耗等。
4.3 存储方案与成本控制
可观测性数据的存储成本是个绕不开的问题。我算过一笔账:一个中等规模的 Agent 系统,每天处理 10 万次请求,每次请求平均产生 20 条决策记录,每条记录平均 1KB,那么每天的存储量就是 2GB。一年下来就是 730GB。如果全量存储,成本相当可观。
我的成本控制策略是分级存储 + 采样 + 压缩:
分级存储:热数据(最近 7 天)存在高性能存储上,支持快速查询;温数据(7-30 天)存在普通存储上,查询速度稍慢但可接受;冷数据(30 天以上)归档到对象存储,只在需要时加载。
采样:不是所有请求都需要全量记录。对于正常请求,可以只记录关键节点;对于异常请求,才记录全量数据。采样率可以根据业务重要性调整,比如核心业务 100% 记录,非核心业务 10% 记录。
压缩:决策记录中有大量重复内容,比如相同的 Prompt 模板、相同的工具描述。可以用字典编码的方式压缩,把重复内容提取出来单独存储,记录中只存引用。
我实际用下来,这套策略能把存储成本降低 60% 以上,同时不影响核心的排查能力。
4.4 可视化面板的设计
可视化面板是可观测性系统的门面。企业客户往往是通过这个面板来感知你的系统能力的。我设计面板时,遵循“三层递进”的原则:
第一层:总览面板。展示最核心的指标:请求量、成功率、平均响应时间、Token 消耗、异常率。这一层是给管理层看的,要一眼就能看出系统是否健康。
第二层:链路面板。展示单次请求的完整链路。用时间轴或者火焰图的方式,展示 Agent 的每一步决策、工具调用、耗时。这一层是给技术人员看的,用于定位问题。
第三层:分析面板。展示趋势分析和对比分析。比如最近 7 天的质量变化趋势、不同模型版本的效果对比、不同工具的成功率对比。这一层是给数据分析人员看的,用于优化系统。
我在实际项目中发现,企业客户最喜欢的是第二层链路面板。他们不一定看得懂技术细节,但看到 Agent 一步步思考的过程,心里就踏实了。所以我在设计链路面板时,会特意把技术语言翻译成业务语言。比如不显示“调用了 query_order 工具”,而是显示“查询了用户的订单信息”。
5. 常见问题与排查技巧实录
5.1 数据采集不全怎么办
这是最常见的问题。表现是:排查问题时发现关键步骤没有记录,导致无法定位。原因通常有三个:
原因一:埋点遗漏。Agent 框架的某些分支没有埋点。比如异常处理分支、超时重试分支。这些分支平时不常走,容易被忽略,但恰恰是出问题时最需要看的。
解决方法:做埋点覆盖率测试。构造各种异常场景,跑一遍系统,检查是否所有分支都有记录。我通常会写一个自动化测试脚本,模拟工具超时、模型报错、网络中断等场景,验证埋点是否完整。
原因二:异步丢失。Agent 的某些操作是异步的,埋点数据在异步回调中写入,如果回调失败或者进程退出,数据就丢了。
解决方法:用消息队列做缓冲。埋点数据先写入本地队列,再由独立的消费者进程写入存储。这样即使主进程退出,队列中的数据也不会丢。同时要设置队列的持久化策略,防止机器宕机导致数据丢失。
原因三:采样过度。为了控制成本,采样率设得太低,导致关键请求没有被记录。
解决方法:动态调整采样率。对于标记为重要的请求(比如 VIP 用户、投诉关联请求),强制 100% 记录。对于普通请求,按比例采样。同时要保证异常请求 100% 记录,因为异常请求是最需要分析的。
5.2 链路断裂怎么排查
链路断裂是指一次请求的决策记录不连续,中间有缺失。这会导致你无法还原完整的决策过程。
排查链路断裂,我通常按以下步骤:
- 检查 trace_id 是否一致:所有记录应该共享同一个 trace_id。如果 trace_id 不一致,说明链路标识在传递过程中丢失了。
- 检查 parent_span_id 是否连续:每个 span 的 parent_span_id 应该指向它的上游 span。如果某个 span 的 parent_span_id 找不到对应的上游,说明中间有断裂。
- 检查时间戳是否合理:如果两个相邻 span 的时间戳差距过大,说明中间可能有未记录的步骤。
- 检查 Agent 切换点:多 Agent 协作时,Agent 切换是最容易断裂的地方。要重点检查消息传递的埋点是否完整。
我在一个项目上遇到过链路断裂,最后发现是两个 Agent 之间的消息传递用了不同的 trace_id 生成策略,导致链路对不上。后来统一了 trace_id 的生成和传递规则,问题就解决了。
5.3 存储成本失控怎么优化
存储成本失控通常是因为没有做数据生命周期管理。我见过一个团队,所有决策记录都永久保存,结果半年下来存储成本涨了 10 倍。
优化存储成本,我通常按以下优先级操作:
第一优先级:清理无效数据。检查是否有重复记录、测试数据、调试数据混在生产数据中。这些数据往往占了不少空间,清理掉能省不少钱。
第二优先级:压缩历史数据。对 30 天以上的数据做压缩归档。决策记录中有大量重复的 Prompt 模板和工具描述,用字典编码压缩效果很好。
第三优先级:降低采样率。如果前两步还不够,就降低非核心业务的采样率。但要注意,核心业务和异常请求不能降。
第四优先级:调整存储介质。把冷数据从 SSD 迁移到 HDD 或者对象存储。查询频率低的数据,没必要用高性能存储。
5.4 排查技巧速查表
| 问题现象 | 可能原因 | 快速排查方法 |
|---|---|---|
| 决策记录缺失 | 埋点遗漏、异步丢失 | 检查埋点覆盖率、检查消息队列积压 |
| 链路断裂 | trace_id 不一致、传递丢失 | 检查 trace_id 生成规则、检查 Agent 切换点 |
| 输出不一致 | 温度参数高、Prompt 漂移 | 对比多次调用的参数、对比 Prompt 版本 |
| 响应变慢 | 模型负载高、工具超时 | 查 GPU 利用率、查工具 API 延迟 |
| 存储暴涨 | 无生命周期管理、采样率过高 | 检查数据保留策略、检查采样配置 |
| 告警误报多 | 阈值设置不合理 | 调整阈值、增加告警抑制规则 |
实操心得:排查 AI 系统的问题,最忌讳的就是“猜”。一定要基于数据说话。我见过太多团队,出了问题就凭经验猜原因,改了一通发现没解决,最后还是要回到数据上来。所以,可观测性系统的第一价值不是“好看”,而是“能查”。数据采集全了,排查问题就是个体力活,而不是脑力活。
6. 从可观测性到可控制性
6.1 可观测性是手段,可控制性才是目的
聊了这么多可观测性的技术细节,最后我想回到企业客户的真实诉求上来。企业客户要可观测性,本质上是要可控制性。他们不是想看你系统内部有多复杂,他们是想在系统出问题时,有能力干预和修复。
所以,一套完整的 AI 可观测性方案,不能只停留在“看”的层面,还要能“控”。什么叫控?就是当观测到异常时,你能快速采取措施。比如:
- 发现某个 Agent 的输出质量下降,能一键切换到备用 Prompt
- 发现某个工具调用失败率上升,能自动降级到备用工具
- 发现某个模型版本效果变差,能快速回滚到上一个版本
- 发现多 Agent 协作出现死循环,能强制中断并重置状态
这些控制能力,才是企业客户真正愿意买单的东西。我在跟客户沟通时,会特意强调这一点:我们不只是给你一个监控面板,我们给你一套完整的控制能力。出了问题,你不仅能看见,还能动手解决。
6.2 可观测性数据的二次价值
可观测性数据除了用于排查问题,还有很大的二次价值。我在实际项目中,会把观测数据用于以下几个方面:
用于模型优化。通过分析 Agent 的决策记录,找出模型表现不好的场景,针对性地补充训练数据或者调整 Prompt。比如发现 Agent 在处理退换货问题时经常调用错误的工具,就可以针对这个场景优化 Prompt。
用于成本优化。通过分析 Token 消耗和工具调用次数,找出成本高的环节,进行优化。比如发现某个 Agent 在简单问题上也调用了大量工具,就可以优化它的决策逻辑,减少不必要的调用。
用于产品迭代。通过分析用户的实际使用情况,发现产品的改进方向。比如发现用户经常在某个环节中断对话,说明这个环节的体验有问题,需要优化。
用于合规审计。在强监管行业,可观测性数据可以作为合规审计的依据。比如证明 AI 系统的决策过程符合监管要求,没有歧视性输出等。
6.3 给不同阶段团队的建议
最后,根据团队所处的阶段,我给一些差异化的建议:
初创团队:不要一上来就搞大而全的可观测性系统。先把最基础的模型调用日志记好,确保每次调用都有完整的 Prompt 和输出记录。这一层做好了,就能解决 80% 的排查问题。等业务量上来了,再逐步完善。
成长型团队:重点建设 Agent 决策链路的记录和回放能力。这是 AI 可观测性的核心,也是企业客户最看重的。同时要开始关注存储成本,建立数据生命周期管理机制。
成熟团队:在可观测性基础上,建设可控制性能力。包括动态配置、自动降级、快速回滚等。同时要挖掘观测数据的二次价值,用于模型优化、成本优化和产品迭代。
我在这个领域摸爬滚打这几年,最大的体会是:AI 可观测性不是一个纯技术问题,而是一个产品问题。你要站在企业客户的角度去想,他们真正需要的是什么。他们需要的是安全感,是掌控感,是出了问题能说得清、能解决得了。你把这个想明白了,技术方案自然就清晰了。
还有一个很实际的建议:尽早让企业客户参与到可观测性方案的设计中来。不要等系统上线了才问客户“你们想看什么”。在需求阶段就问清楚:你们最担心什么问题?出了问题你们希望怎么排查?你们需要什么样的证据来向业务方交代?这些问题的答案,就是你可观测性方案的设计输入。
我见过一个团队,在项目初期就拉着客户一起设计了观测面板,客户提了很多具体的需求,比如“我要能看到每次对话的完整记录”“我要能按客户 ID 搜索历史会话”“我要能导出报表给合规部门”。这些需求后来都成了产品的卖点,客户续约率非常高。这就是把可观测性做成产品竞争力的典型案例。