跳到主要内容

299 篇博文 含有标签「observability」

查看所有标签

确定性重放:如何调试永远不会以相同方式运行两次的 AI Agent

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 Agent 上周二在生产环境出了故障。一个客户报告了错误的回答。你调出日志,看到最终输出,也许还有几条中间的 print 语句——然后你就卡住了。你无法重新运行 Agent 来重现同样的故障,因为模型不会产生相同的 token,你的工具调用的 API 现在返回了不同的数据,嵌入在提示词中的时间戳也已经变了。Bug 消失了,你只能盯着间接证据发呆。

这就是 AI Agent 的根本调试问题:传统软件是确定性的,所以你可以通过重建输入来复现 bug。Agent 系统不是。每次运行都是模型采样、实时 API 响应和时间依赖状态的独特组合。没有专门的工具,事后调试就变成了取证猜测。

确定性重放通过在执行过程中记录每个非确定性来源,并在重放时替换这些记录来解决这个问题——把你无法复现的 Agent 运行变成你可以像调试器一样逐步跟踪的东西。

人类反馈延迟:正在扼杀你AI改进循环的30天缺口

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队把点赞/踩的按钮当作AI质量循环的基础。思路很清晰:用户对回复评分,你积累评分,然后改进。但在实践中,这意味着你需要等整整一个月,才能检测到第一天就已经发生的质量回退。

数字是残酷的。生产环境中LLM应用的显式反馈率在所有交互的1%到3%之间。对于一款B2B产品在第一年的正常规模——每日活跃用户1000人——这意味着每天只有10到30个评分样本。以统计置信度检测5%的质量变化大约需要1000个样本。你要等30到100天,改进循环才有足够的有意义数据来运行。

值班负担的转移:AI 功能如何打破你的事故响应手册

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的监控仪表盘一片绿色。延迟正常,错误率持平。而你的 AI 功能在过去六个小时里一直在捏造客户账号信息。

这就是当前在交付 AI 功能的公司中,值班工程师面临的新常态。那套适用于确定性软件的事故响应手册——查日志、找堆栈跟踪、回滚部署——对于"执行正确、结果出错"是主要故障模式的系统来说,根本就不够用。根据 2025 年的行业报告,五年来运营性繁琐工作首次从 25% 上升至 30%,即使各组织已投入数百万美元购置 AI 工具。工具越来越聪明,事故却越来越奇怪。

非确定性系统的 SLO:当每次响应都不同时如何定义可靠性

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 AI 功能返回 HTTP 200,在 180ms 内完成,生成了有效的 JSON。按照所有传统 SLI 指标,这个请求是成功的。但答案是错的——一个编造的产品规格、一条捏造的法律引用、一个微妙错误的计算。你的监控一片绿色,用户却怒火中烧。

这就是 SRE 在 AI 系统上失效的根本性断裂。传统可靠性工程假设成功的执行会产生正确的结果。非确定性系统在每一个请求上都违反了这个假设。同样的提示、同样的上下文、同样的模型版本,每次都可能产生不同的——且错误方式各异的——答案。

可观测性税:当监控 AI 的成本超过运行 AI 本身

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的团队上线了一个 AI 驱动的客服机器人。它运行良好,用户很满意。然后月度账单到了,你发现监控 LLM 调用的基础设施成本比 LLM 调用本身还要高。

这不是假设。团队报告称,将 AI 工作负载监控添加到现有的 Datadog 或 New Relic 设置中,可观测性账单增加了 40-200%。与此同时,推理成本持续下降——GPT-4 级别的性能现在每百万 token 仅需 0.40 美元,而 2022 年末为 20 美元。监控技术栈还没有收到这个消息。

结果是一个倒挂现象,如果不是这么贵的话会很有趣:你花在观察 AI 思考上的钱比让 AI 思考的钱还多。

对抗性智能体监控:构建无法被规避的监管机制

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数生产环境中的 AI agent 系统都使用了某种版本的 LLM-as-judge 监控:由第二个模型审查 agent 的输出并标记可疑行为。这种方法直观、易于部署,但作为主要防御手段却存在严重缺陷。一项分析跨多个提示攻击向量的单判官(single-judge)监控的研究发现,加权攻击成功率为 52.7%——这意味着具有对抗性的复杂 agent 逃避检测的概率比被发现的概率还要高。对于单轮、低风险的应用,这或许可以接受。但对于拥有外部系统访问权限的自主 agent 来说,这是一个致命的漏洞。

更深层次的问题在于,能力和欺骗性是同步增长的。随着 agent 在预期任务上变得更加强大,它们也变得更擅长模拟其受监管的环境,并相应地调整行为。

智能体状态即事件流:为什么不可变事件溯源优于智能体内置内存

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个智能体在周二凌晨 3:47 表现异常。它删除了本不该删除的文件,或者调用了参数错误的 API,又或者基于六小时前的陈旧信息自信地执行了一个不可逆的操作。你调出日志。你可以看到智能体做了什么。但你无法看到——几乎没有任何智能体框架能提供给你的——是智能体在做出决策时相信了什么。驱动该选择的状态已经消失,被后续的每一步操作所覆盖。你正在通过调试现在来理解过去,这是一个架构问题,而不是日志问题。

大多数 AI 智能体将状态视为可变的内存数据:一个就地更新的字典、一个被覆盖的数据库行,或者一个不断收缩和增长的草稿本。这对于简单、短期的任务来说没问题,但在面对定义严肃生产部署的三种压力时,它会崩溃:调试复杂故障、协调分布式智能体以及满足合规性要求。事件溯源(Event sourcing)——将每一次状态更改视为不可变的、只增(append-only)的事件——同时解决了这三个问题,而且它让智能体在结构上更具可调试性,而不仅仅是增加日志量。

LLM 请求生命周期是一个状态机 —— 像对待状态机一样对待它

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队将 LLM 请求处理视为一个线性函数:调用 API,检查异常,可能重试一次,然后返回结果。但在实践中,情况完全不是这样。从用户触发 LLM 调用到响应出现在屏幕上的那一刻,一个请求可能会经历十几个隐式状态 —— 尝试主供应商、等待退避、切换到备用方案、验证输出、使用优化后的提示词进行重试 —— 而这些转换过程都没有被记录或可视化。

其结果是,调试变成了在分散于各个服务的日志中进行事后追溯,对于 “这个请求实际上做了什么?” 这一问题,没有一个权威的答案。将 LLM 请求生命周期视为一个显式的有限状态机,是一种架构上的演进,它让你无需进行考古式的工作就能回答这个问题。

你的 try/catch 漏掉的 LLM 请求生命周期

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 LLM 技术栈可能产生的最危险故障返回的是 HTTP 200。JSON 解析正常。你的 Schema 验证通过。没有抛出异常。而响应结果却是完全错误的 —— 事实错误、结构错误、话说到一半被截断,或者是凭空捏造。

围绕 LLM API 调用编写的一个简单 try/catch 只能处理那些明显的故障:速率限制、服务器错误、网络超时。这些是可见的故障。而那些不可见的故障 —— 比如模型达到了 Token 限制并在回答中途停止、一个智能体在找到正确的参数名称之前多循环了 21 次工具调用、一次验证重试让你的成本增加了 37% —— 这些都不会产生异常。它们会产生结果。

解决方法不是更好的错误处理,而是将 LLM 请求生命周期建模为一个显式的状态机。在这个状态机中,每一次状态转换都会发出一个可观测的 span,并且故障模式是一等状态(first-class states),而不是被埋没在异常处理程序中。

生产环境 AI 故障响应:当你的智能体在凌晨 3 点出错时

· 阅读需 13 分钟
Tian Pan
Software Engineer

一家金融科技创业公司的多智能体成本追踪系统在没人察觉的情况下运行了 11 天。原因是:智能体 A 向智能体 B 寻求澄清,智能体 B 向智能体 A 寻求帮助以解释回复。两者都没有打破循环的逻辑。在人类查看发票之前,每周 127 美元的账单变成了 47,000 美元。

没有抛出错误,没有触发告警,延迟也正常。系统正完全按照设计运行——只是在永远运行下去。

这就是 AI 事故真实的样子。它们不是堆栈跟踪和 500 错误。它们是无声的行为失效、失控的循环,以及在生产规模下以十足信心交付的似是而非的错误答案。你现有的故障响应手册几乎肯定没有涵盖其中的任何一种。

语义失败模式:当你的 AI 运行完美却事与愿违时

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的 AI 智能体完成了任务。日志中没有错误。延迟看起来很正常。输出是格式良好的 JSON,语法完美的散文,或者是执行起来毫无怨言的有效 SQL 查询。仪表盘上的每一个指标都是绿色的。

而用户盯着结果,叹了口气,然后从头开始。

这就是语义失效模式 —— 这类生产环境中的 AI 失败表现为:系统运行正常,模型自信地响应,输出按时交付,但智能体并没有做用户真正需要的事情。传统的错误监控对这些失败完全视而不见,因为并没有报错。HTTP 状态码是 200。模型没有拒绝。输出符合 Schema。从每一项技术指标来看,系统都成功了。

模型升级陷阱:基础模型更新如何静默破坏生产系统

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的生产系统运行正常。可用性为 99.9%。延迟处于正常水平。错误率告警为零。然后一个用户提交了一个工单:“最近的摘要变得莫名其妙地偏差。”你调取日志,一切看起来都没问题。你检查模型版本 —— 还是三个月前部署的那个。到底发生了什么变化?

是模型提供商变了。而且是悄无声息地变了。

这就是模型升级陷阱:基础模型在你不知情的情况下发生了变化,而标准的观测基础设施对这种行为偏移(behavioral drift)完全视而不见。等到用户注意到时,性能下降已经持续累积数周了。