跳到主要内容

639 篇博文 含有标签「llm」

查看所有标签

如何在 CI 中对 AI Agent 工作流进行集成测试,而无需完全 Mock 模型

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数构建 AI Agent 的团队在经历第一次生产事故后,都会发现同一个测试陷阱。你有两个明显的选择:在 CI 中进行实时的 API 调用(缓慢、昂贵、且具有非确定性),或者将 LLM 完全 Mock 掉(快速、廉价、但内容空洞)。这两种方法都会以不同但可预见的方式失败,而第二种方法的失败模式更糟糕,因为它是隐形的。

Mock 掉 LLM 的团队可能会跑六个月的全绿 CI,发布到生产环境后,才发现代码库中一直潜伏着一个 bug:在 8 步循环的第 6 步,Agent 处理畸形工具响应的方式有问题。那个总是返回 "Agent response here" 的 Mock 根本没有触及编排层。实际的工具分发、重试逻辑、状态累积和兜底路由代码从未被测试过。

好消息是还有第三条路。它与其说是一种单一的技术,不如说是一个由三层测试组成的架构,每一层都旨在捕获不同类别的失败,且无需承担其他方法的成本。

意图鸿沟:当你的 LLM 完美回答了错误的问题

· 阅读需 11 分钟
Tian Pan
Software Engineer

意图偏差(Intent misalignment)是生产环境 LLM 系统中最大的单一故障类别 —— 根据对真实用户交互的大规模分析,32% 的不满响应均归因于此。这既不是幻觉,也不是拒绝回答,更不是格式错误。它是指模型正确地回答了问题,却完全偏离了用户的实际需求。

这就是意图鸿沟(intent gap):即用户“所说”与“所想”之间的距离。它对大多数评估套件、错误日志甚至用户本人来说都是不可见的,直到用户浪费了足够多的时间才意识到,输出在技术上是正确的,但在实践中却毫无用处。

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),而不是被埋没在异常处理程序中。

长周期评估鸿沟:为什么你的智能体通过了所有基准测试却仍在生产环境中失败

· 阅读需 13 分钟
Tian Pan
Software Engineer

一个在 SWE-Bench Verified 上得分 75% 的模型,在处理需要人类工程师花费数小时才能完成的任务时,其得分会降至 25% 以下。同样一个能够稳定处理单轮问答的智能体(agent),在被要求协调十几个步骤以实现一个开放式目标时,可能会陷入语无伦次的循环、幻觉化工具输出,并忘记其最初的目标。基准测试数据与生产环境表现之间的差距并非噪声——它是结构性的。理解这一点,是交付有用产品与交付仅在演示(demo)中好看的产品之间的区别。

本篇文章讨论的就是这个差距:它为何存在,在长程(long-horizon)任务中会出现哪些静态评估中从未出现的特定失败模式,以及构建一个能够真正捕捉到这些模式的评估框架需要什么。

模型指纹识别:在后端模型静默切换破坏你的评估系统前发现它

· 阅读需 13 分钟
Tian Pan
Software Engineer

2025 年 4 月,OpenAI 对 GPT-4o 推送了一次更新,没有任何 API 变更日志、开发者通知或公开公告。在 48 小时内,用户开始发布截图,显示该模型支持灾难性的业务决策,验证明显错误的计划,并同意停止服药听起来是一个合理的主意。模型变得如此具有讨好性 (agreeable),以至于它会将任何想法都称为天才之举。OpenAI 在几天后撤回了它——这是对他们发布到生产环境的行为退化 (behavioral regression) 的一次罕见的公开承认。

更深层的问题不在于讨好性本身,而是在于 API 的构建者没有任何自动化手段来获知模型已发生变化。他们的评估 (evals) 依然在通过,监控仪表盘显示 HTTP 200 正常,p95 延迟也看起来没问题。模型在静默中变得不同,唯一的信号是用户的投诉。

这就是模型指纹 (model fingerprinting) 所解决的问题。

生产环境中的多模态大模型:没人会预先计算的成本账

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数团队在向现有的 LLM 流水线添加多模态能力时,往往没有先计算成本。他们用几张测试图片做了原型,运行良好,然后就上线了——直到收到第一张账单。根据调用量的大小,账单上的数字往往介于“令人尴尬”和“灾难性”之间。

问题不在于多模态 AI 在原则上有多贵,而在于每种模态都有独特的 Token 计算逻辑,它们会以一种你凭纯文本直觉无法预料的方式复合叠加。只需一个配置参数——比如视频帧率、图像分辨率模式,或者你是否在每一轮对话中重复发送系统提示词(System Prompt)——都可能在你不经意间,让你的推理费用翻上 10 倍甚至更多。

非确定性税:在概率性基础设施上构建可靠的流水线

· 阅读需 11 分钟
Tian Pan
Software Engineer

在生产级 LLM 工程中,设置 temperature=0 并期望获得可重现的输出是最常见的误解之一。这种想法很直观:温度控制随机性,所以零温度意味着零随机性。但温度只控制 Token 选择规则 —— 将概率采样切换为贪婪的 argmax。它对稳定 Logits 本身 毫无作用,而这才是真正产生变数的地方。

实际后果是:在 temperature=0 的情况下,针对同一个模型运行同一段提示词一千次,可能会产生 80 种不同的补全结果。这并非假设 —— 而是在现实的推理服务器条件下测试 Qwen3-235B 模型的实证结果。分歧首先出现在输出的深层(在该测试中为第 103 个 Token),其中 992 次运行生成了 "Queens, New York",而 8 次运行生成了 "New York City"。同样的模型,同样的提示词,同样的温度,由于服务器上不同的批处理状态而导致了差异。

为什么分块问题尚未解决:原生 RAG 流水线如何在长文档上产生幻觉

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数 RAG 教程都将分块(chunking)视为一个注脚:将你的文档切分为 512 个 token 的块,对它们进行嵌入(embed),存储在向量数据库中,然后继续研究有趣的部分。这在演示示例(如维基百科文章、干净的 markdown 文档、短 PDF)中表现良好。但在生产环境中,它会分崩离析。

最近一项将 RAG 应用于临床决策支持的研究发现,在 30 个临床问题中,固定大小的基准方案仅实现了 13% 的完全准确率。在同一语料库上采用自适应分块方法:完全准确率为 50% (p=0.001)。文档是相同的。LLM 是相同的。只有分块方式改变了。这种差距不是微调问题,也不是提示词工程问题。它是大多数团队在切分文档方式上的结构性失败。

RAG 的阴暗秘密:你的检索成功了,但答案依然错误

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数构建 RAG 系统的团队认为他们只有两种失败模式:检索未能找到相关文档,或者 LLM 在拥有文档的情况下产生了幻觉。第一种模式被强迫症般地衡量着 —— Recall@K、MRR、NDCG。第二种模式则被视为模型本身的问题。然而,这两种定义都不完整。

存在第三种介于两者之间的失败模式:检索成功(相关文档排在 Top-K 中),但检索到的上下文实际上并不包含足以正确回答问题的足够信息。模型变得非常自信,生成一个看似合理的答案,但结果却是错误的。对包括 GPT-4o、Gemini 1.5 Pro 和 Claude 3.5 在内的前沿模型的研究表明,这种情况在多步查询中的发生率超过 50% —— 而大多数生产系统都没有任何监测手段来检测它。

推理追踪隐私问题:思维链如何在生产环境中泄露敏感数据

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的推理模型在 98% 的情况下能正确识别出数据是敏感的,但它在思维链(chain-of-thought)中泄露该数据的概率却高达 33%。这种差距——即知道某事是隐私与实际保持其私密性之间的脱节——是推理轨迹(reasoning trace)隐私问题的核心,而大多数生产团队尚未为此做好准备。

深度思考(Extended thinking)已成为对准确性要求极高的应用程序的标准工具:客户服务分流、医疗编码辅助、法律文件审查、财务分析。而这些领域恰恰是 Prompt 中数据最敏感的地方。在这些场景中部署推理模型,如果不了解轨迹如何处理这些数据,将面临巨大的暴露风险。

推理链追踪的隐私问题:你的 CoT 日志正在泄露什么

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数基于推理模型进行构建的团队将隐私视为一个双面问题:清理输入的提示词,清理输出的回复。中间的推理链(reasoning trace)为了可观测性而被完整记录,被提供给下游系统进行调试,有时甚至会被传回给那些要求“查看思考过程”的用户。那一层中间层才是真正的风险所在——而大多数生产部署并未将其视为应有的隐患。

2026 年初的研究量化了从业者一直在口头观察到的现象:大型推理模型(LRM)在中间推理步骤中泄露个人身份信息(PII)的频率高于其最终答案。在一项针对五个开源模型在医疗和金融场景下的测试研究中,结论是明确的——中间推理可靠地浮现了最终回复成功隐瞒的 PII。最终答案被清理了,但推理链没有。