可观测性:日志、Trace、监控与反馈闭环
AI 应用的线上问题很少只是一句“模型答错了”。
一个错误答案背后可能是权限过滤漏了文档、检索召回了旧版本、工具返回超时、prompt 版本切换、缓存命中过期结果、模型输出被截断,或者用户本来期待的是人工审批而不是自动建议。可观测性的目标,是让团队能从最终结果一路追溯到每个关键阶段,并把线上反馈变成可复现、可评估、可修复的样本。
1. 提出问题
在企业知识库助手里,员工会询问报销政策、合同条款、产品限制和客户状态。系统先检查用户权限,再检索内部文档,必要时调用 HR、CRM 或订单工具,最后生成带引用的回答。
上线后,产品经理收到几类反馈:
- 有用户说答案引用了过期政策。
- 有用户说回答很慢,但后端服务并没有 5xx。
- 财务发现某些租户成本异常高。
- 客服发现同类问题有时回答准确,有时缺少关键引用。
- 运维看到模型供应商偶发 429,但不知道影响了多少业务请求。
如果系统只保存最终问题和答案,排查会陷入死角。团队不知道那次请求用了哪个 prompt 版本、检索到了哪些片段、工具有没有超时、缓存有没有命中、模型是否走了 fallback,也不知道用户点踩究竟对应哪类失败。
2. 分析问题
AI 可观测性要覆盖三类对象:模型调用、上下文链路和业务结果。
模型适合做的是生成答案、解释工具结果、对反馈进行辅助聚类。系统必须做的是记录、关联、聚合、告警和权限控制。
最小可用观测字段包括:
- 请求维度:requestId、sessionId、tenantId、userRole、feature、environment。
- 版本维度:promptVersion、model、modelParams、retrievalConfigVersion、toolVersion、schemaVersion。
- 输入维度:输入长度、上下文摘要、知识片段 ID、工具参数摘要。
- 输出维度:输出长度、结构化校验结果、引用 ID、最终状态。
- 性能维度:TTFT、总耗时、检索耗时、工具耗时、队列等待、重试次数。
- 成本维度:输入 token、输出 token、缓存命中、模型费用、工具费用或估算成本。
- 错误维度:错误阶段、错误码、是否可重试、fallback 类型、人工接管状态。
日志还要处理隐私和权限。生产日志不应该无脑保存完整 prompt、完整工具返回和用户敏感数据;更稳妥的做法是记录摘要、哈希、引用 ID、脱敏片段和受控回放入口。
3. 列举方案
可观测性方案可以从简单日志逐步升级到完整反馈闭环。
第一层是基础日志。试点期至少要知道一次请求用了什么模型、多少 token、哪个 prompt 版本、成功还是失败。简单 prompt 足够的场景,也至少需要这层。
第二层是结构化事件。把一次请求拆成 context_built、retrieval_completed、tool_called、model_started、model_completed、fallback_used、response_persisted 等事件。这样能看见中间状态。
第三层是 trace。每个阶段成为 span,记录耗时、输入输出摘要、错误和父子关系。trace 不是为了炫技,而是为了回答“慢在哪里、贵在哪里、错在哪里”。
第四层是指标监控。把日志和 trace 聚合成可运营指标:成功率、错误率、TTFT、P95 延迟、单位任务成本、缓存命中率、fallback 率、引用缺失率、人工采纳率、用户差评率。
第五层是告警与降级触发。当模型 429、工具 P95 超时、成本预算接近上限、缓存命中率异常下降或引用缺失率上升时,系统应该告警,并可触发路由、限流、关闭工具或转人工。
第六层是反馈闭环。用户反馈、人工修改、质检结果和事故样本要被标注成失败类型,并进入评估集。没有这一步,可观测性只能帮助救火,不能帮助系统变好。
4. 决策判断
几个反模式需要明确避免。
第一,只记录自然语言日志。自由文本日志很难聚合、告警和归因。关键字段必须结构化,尤其是版本、阶段、错误、token 和成本。
第二,把完整敏感上下文直接写入日志。这样排查方便,但会制造新的数据风险。日志要有脱敏、访问控制、保留周期和最小必要原则。
第三,只监控技术成功率。HTTP 200 不代表 AI 成功。引用缺失、schema 校验失败、人工不采纳、用户点踩和 fallback 过高都应该进入质量指标。
第四,反馈没有归因。用户说“不好用”不能直接指导修复。需要标注为检索缺失、事实错误、格式错误、权限问题、工具失败、延迟过长、产品预期不符等类型。
5. 结论收束
可观测性不是上线后的附加项,而是 LLM 应用能否进入生产的基本条件。低风险功能可以先做基础日志;一旦涉及检索、工具、成本归因或用户反馈,就要把 trace、指标、告警和反馈闭环纳入设计。
上线前检查清单:
- 场景边界:每个 AI 功能是否有明确 feature 名、租户、用户角色和业务流程。
- 日志字段:requestId、promptVersion、model、token、耗时、错误阶段和输出状态是否完整。
- Trace 分段:上下文、检索、工具、模型、解析、持久化是否有独立 span。
- 监控指标:成功率、TTFT、P95 延迟、错误率、成本、缓存命中、fallback 和采纳率是否可看。
- 成本归因:是否能按租户、功能、模型、prompt 版本和重试拆分。
- 质量信号:点踩、人工修改、引用缺失、schema 失败和事故样本是否被采集。
- 日志安全:敏感字段是否脱敏,完整回放是否有权限和审计。
- 告警策略:成本突增、延迟升高、错误率上升、引用异常、工具失败是否有阈值。
- 反馈闭环:线上失败是否能进入样本库、评估集和下一次发布门禁。
- 回放能力:典型事故是否能从日志和 trace 复现关键链路。