生产环境中的 LLM 可观测性:工程师容易忽略的四个隐性故障
大多数将 LLM 应用推向生产环境的团队,其日志设置常被误认为是可观测性。他们在数据库中存储提示词(prompt)和响应,在表格中跟踪 token 数量,并在 Datadog 中设置延迟告警。然而,当用户反馈聊天机器人已经连续两天给出错误回答时,没人能告诉你原因 —— 因为收集到的数据都没有告诉你模型是否真的正确。
传统监控回答的是“系统是否在线且速度多快?”而 LLM 可观测性回答的是一个更难的问题:“系统是否在做它应该做的事情,以及它在什么时候停止了这种正常行为?”当你的系统行为是概率性的、依赖上下文的,并且经常以不触发任何告警的方式出错时,这种区别就显得至关重要。
四大隐性故障
在构建可观测性基础设施之前,了解你真正想要捕捉的内容会有所帮助。LLM 系统有四种标准监控完全无法察觉的失败方式:
迷之自信的错误(Confident errors)。模型返回了一个错误的答案,但没有任何不确定的迹象。没有异常,没有 4xx 状态码,你的指标中也没有升高的错误率。响应看起来与正确的响应完全一致。一个客服机器人引用了一份已经失效六个月的退货政策,而且语气听起来非常权威。如果没有针对生产流量运行评估(evaluation),这永远不会出现在任何仪表盘中。
隐性漂移(Silent drift)。随着系统周围世界的变化,性能逐渐下降。模型的训练数据变得陈旧。你的产品描述更新了,但 RAG 管道中的上下文没有更新。六个月前运行良好的提示词开始产生偏差,因为其编写时的背景已经发生了变化。你只有在用户投诉时才会注意到,而不是在此之前。
无限制的成本(Unbounded costs)。Token 数量以设计时并不明显的方式复合增长。失败时的重试逻辑使你的支出翻倍或翻三倍,却没有带来任何功能上的改进。随着对话历史的增长,上下文窗口被填满。一个范围界定不良的 agent 循环进行了 40 次工具调用而不是 4 次。这些都不会显示为错误 —— 只会显示在账单上。
不透明的推理(Opaque reasoning)。当 agent 采取了错误的行动或链式调用产生了一个糟糕的输出时,你需要准确追踪是哪一步引入了错误。在标准日志记录下,你只有输入和输出,而没有中间状态:检索了哪些文档、重排序器(reranker)给它们打了多少分、工具调用是否返回了预期结果、模型如何解释结果。调试就像是在考古。
