跳到主要内容

340 篇博文 含有标签「llm」

查看所有标签

生产环境中的 LLM 可观测性:工程师容易忽略的四个隐性故障

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数将 LLM 应用推向生产环境的团队,其日志设置常被误认为是可观测性。他们在数据库中存储提示词(prompt)和响应,在表格中跟踪 token 数量,并在 Datadog 中设置延迟告警。然而,当用户反馈聊天机器人已经连续两天给出错误回答时,没人能告诉你原因 —— 因为收集到的数据都没有告诉你模型是否真的正确。

传统监控回答的是“系统是否在线且速度多快?”而 LLM 可观测性回答的是一个更难的问题:“系统是否在做它应该做的事情,以及它在什么时候停止了这种正常行为?”当你的系统行为是概率性的、依赖上下文的,并且经常以不触发任何告警的方式出错时,这种区别就显得至关重要。

LLM 路由:如何停止为简单查询支付顶级模型的昂贵价格

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数团队都会遇到同样的拐点:LLM API 成本的增长速度超过了使用量的增长,而且每一个查询——无论是“总结这句话”还是“审计这个 2,000 行的代码库以查找安全漏洞”——都指向同一个昂贵的模型。解决方法不是挤压 prompt,而是路由。

LLM 路由意味着将每个请求引导至最适合该特定任务的模型。不是能力最强的模型,而是正确的模型——在成本、延迟和质量之间平衡,以满足查询的实际需求。如果做得好,路由可以在质量几乎不下降的情况下将 LLM 成本降低 50–85%。如果做得不好,它会产生隐性的质量倒退,直到用户流失你才会察觉。

这篇文章涵盖了其机制、权衡以及在生产环境中实际会出问题的地方。

生产级 LLM 应用的 Token 预算策略

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数团队发现他们上下文管理问题的方式都如出一辙:一个在演示中表现良好的生产级智能体,在对话进行 15 轮后开始出现幻觉。日志显示 JSON 格式正确,模型返回了 200 状态码,且没有人修改代码。变化的是累积效应——工具结果、检索到的文档和对话历史悄无声息地填满了上下文窗口,直到模型需要在 80,000 个相关性参差不齐的 Token 上进行推理。

上下文溢出(Context overflow)是显而易见的故障模式,但“上下文腐化”(context rot)则更具隐蔽性。研究表明,在达到限制之前,LLM 的性能就已经开始下降。随着上下文的增加,模型会出现“中间迷失”效应(lost-in-the-middle effect):注意力集中在输入的开头和结尾,而中间的内容则变得不可靠。埋藏在 30 轮对话中第 12 轮的指令可能会实际上消失。模型不会报错——它只是悄悄地忽略了它们。

LLM 应用压力测试:为什么 k6 和 Locust 会误导你

· 阅读需 13 分钟
Tian Pan
Software Engineer

你运行了负载测试。k6 报告平均延迟为 200ms,P99 延迟低于 800ms,在 50 个并发用户时错误率为零。你上线到了生产环境。不到一周,用户就开始反馈 8 秒的卡顿、连接中断以及流式输出中途 Token 预算耗尽。发生了什么?

测试之所以通过,是因为你衡量错了指标。传统的负载测试工具是为在几毫秒内返回完整响应的无状态 HTTP 端点设计的。LLM API 的行为与这些工具所建模的完全不同:它们在几秒钟内流式传输 Token,按 Token 而非请求计费,消耗的是 GPU 显存而非 CPU 线程,并且响应速度完全取决于缓存是否命中。一个对 /chat/completions 端点进行压测的 k6 脚本产生的数据看起来像是性能数据,但实际上几乎无法反映生产环境的真实情况。

评估与生产环境的差距:为什么测试套件的 92% 分数仅意味着 40% 的用户满意度

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的团队花了三周时间构建了一个严谨的评估套件。它涵盖了各种边缘情况,包括对抗性示例。LLM 作为评测员(LLM-as-judge)在所有维度上的得分都达到了 92%。你发布了产品。

接着,客服工单接踵而至。用户反馈 AI “听不懂他们在问什么”。会话放弃率上升了 30%。满意度得分仅为 41%。

这种差距 —— 即评估表现与现实世界结果之间的鸿沟 —— 是当今生产级 AI 系统最常见的失败模式。这不是模型问题,而是衡量标准的问题。

生产级 AI 系统中的时序推理失效

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个自信地推荐已经缺货六个月产品的智能体;一个告诉用户查不到 20 分钟前下单记录的客服机器人;一个针对两年前已废弃的库 API 生成可正常运行代码的编程助手。这些并不是传统意义上的“幻觉”——模型只是在回忆曾经准确的信息。这是一种完全不同的失效模式,而且大多数团队还没有准备好如何检测或防御它。

这种区分至关重要,因为缓解措施根本不同。你无法通过提示词工程解决时效性问题。你也无法通过微调来解决——对过时的知识进行微调只会让问题变得更糟,而不是更好,因为模型会以更高的权威感表达过时的信息。随着模型在表达上变得越来越流利和自信,它们那些自信且错误的陈旧答案对用户来说变得更难察觉,而不是更简单。

生产级 AI 系统中的提示词版本控制与变更管理

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个团队在客服提示词中增加了三个词,为了让它“更具对话感”。几小时内,结构化输出错误率激增,一条创收流水线停滞。工程师们花了将近一整天的时间调试基础设施和代码,才有人想到去检查提示词。没有版本历史。没有回滚机制。这三个词的修改是由一位产品经理直接在配置文件中内联完成的,他完全没理由认为这会有风险。

这是一个典型的生产环境提示词事故。类似的戏码在各种规模的公司中上演,其根源几乎总是一样的:提示词被视作临时配置,而不是软件。

LLM 应用的测试驱动开发:类比成立与失效之处

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个团队使用 Claude 构建了一个 AI 研究助手。他们对 Prompt 进行了三周的迭代,向利益相关者演示了该助手,并满怀信心肠发布了它。两个月后,他们发现该助手在大约 30% 的输出中悄悄地产生虚假引用(幻觉)—— 这种失败模式之前没有人测试过,因为评估套件是在 Prompt 在演示中“感觉对了”之后才建立的。

这种模式是常态,而非例外。LLM 开发行业在很大程度上采用了测试驱动开发(TDD)的词汇 —— 评估(Evals)、回归套件、黄金数据集、LLM-as-judge —— 却忽略了 TDD 建立的最重要规则:在实现之前编写测试,而不是在实现之后。

以下是如何正确执行此操作的方法,以及 TDD 类比在哪些地方失效得非常严重,以至于字面上照搬它会让你的系统变得更糟。

生产环境中的 LLM API 韧性:速率限制、故障转移以及简单重试逻辑的隐藏成本

· 阅读需 13 分钟
Tian Pan
Software Engineer

2025 年中,一个构建多智能体(multi-agent)财务助手的团队发现其 API 开支从每周 127 美元飙升至 4.7 万美元。一个智能体循环——智能体 A 向智能体 B 寻求澄清,智能体 B 反过来询问智能体 A,以此类推——已经递归运行了 11 天。没有熔断机制(circuit breaker)拦截它,也没有及时触发预算报警。重试逻辑尽职地在每次超时后不断重试,使每一环节的失控成本不断叠加。

这不是一个关于模型质量的故事。这是一个关于分布式系统工程的故事——特别是关于大多数 LLM 应用开发者跳过的那部分,因为他们假设供应商会处理好这些。

事实上,他们并不会。

LLM 延迟分解:为什么 TTFT 和吞吐量是两个不同的问题

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数在 LLM 上构建应用的工程师都将延迟视为一个单一的刻度盘。他们调整一些参数——批处理大小(batch size)、量化级别(quantization level)或实例类型(instance type)——观察“它是否变快了”,然后就收工了。这在上线生产环境之前一直有效,直到你发现 p50 TTFT 看起来不错,而 p99 却超过了 3 秒,或者发现让吞吐量翻倍的优化不知为何却让单个用户感觉系统变慢了。

TTFT 和吞吐量(throughput)并不是同一个滑块的两端。它们是由根本不同的物理特性引起的,受不同瓶颈的影响,并由不同的技术修复。将它们视为可互换的是我在生产环境中看到的大多数 LLM 推理事故的根本原因。

领域特定 LLM 微调的合成数据流水线

· 阅读需 11 分钟
Tian Pan
Software Engineer

你在合成数据上微调的模型在内部评估中得分 95%。然后你部署了它,它却自信地编造出不存在的药物相互作用,引用了案件编号错误的法律先例,并幻觉出名称听起来很合理的 API 端点。模型的流畅度没有退化——它以一种流畅度指标完全无法察觉的方式变得更糟。研究人员称之为知识崩溃 (knowledge collapse):事实准确性下降,而表面连贯性完好无损。这是合成数据训练中较为隐蔽的失败模式之一,通常发生在工程师构建流水线却未考虑到这一点时。

对于在特定领域微调 LLM 的团队来说,合成数据生成已变得不可避免。大规模的人工标注不仅昂贵、缓慢,且对于需要专业知识的任务来说是不可能的。由能力强的教师模型生成的合成数据可以廉价地填补这一空白。但流水线并不只是“向 GPT-4 索要示例,然后训练你的模型”那么简单。细节决定了你得到的是一个在特定领域表现优于通用模型的专业系统,还是一个流畅但事实漏洞百出的系统。

结构化生成:提升生产环境中 LLM 输出的可信度

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数基于 LLM 的应用中都潜伏着一个隐形 Bug。它不会出现在单元测试中。在前一千次请求中也不会触发。它会一直潜伏,直到用户输入了带有引号的内容,或者模型出于某种莫名其妙的原因决定将其 JSON 响应包裹在 Markdown 代码块中,再或者将 "count" 字段作为字符串 "three" 而非整数 3 返回。这时,你的生产流水线就会崩溃。

“LLM 是文本生成器”与“我的应用需要结构化数据”之间的鸿沟,是大多数可靠性问题产生的原因。弥补这一鸿沟并非 Prompt 工程问题,而是一个基础设施问题。在 2026 年,我们终于拥有了能够正确解决这一问题的工具。