跳到主要内容

702 篇博文 含有标签「llm」

查看所有标签

可解释性陷阱:当 AI 解释成为一种负担

· 阅读需 13 分钟
Tian Pan
Software Engineer

在利益相关者首次提出“可解释 AI”的需求,到你的产品团队规划出“AI 为什么会做出这个决定?”功能之间的某个时刻,一个陷阱已经布下。这个陷阱就是:你的模型并不知道它为什么做出那个决定,而要求它解释并不会产生真正的解释——它只会产生看起来像解释的文本。

这种区别在生产环境中至关重要。这并不是因为用户需要更深奥的哲学,而是因为事后(post-hoc)AI 解释正通过监管违规、误导用户行为以及可被欺骗的安全监控,在现实世界中造成危害。如果不理解这一点就交付解释功能的工程师,所构建的系统虽然能通过法律合规检查,但实际上会使结果变得更糟。

微调 vs. RAG 知识注入:工程师经常搞错的决策框架

· 阅读需 12 分钟
Tian Pan
Software Engineer

一家金融科技团队花了三个月时间,根据其内部合规文档(数千份监管 PDF、政策更新和程序指南)对模型进行了微调。结果差强人意。模型仍然会对具体的规则编号产生幻觉。它忘记了最近的政策变化。而唯一真正重要的指标(即顾问是否足够信任它的答案从而停止反复核对)几乎没有变化。两周后,另一个团队在同样的文档语料库上构建了一个 RAG 流水线。顾问们在一周内就开始信任它了。

微调团队并没有犯技术错误。他们犯了一个定义性错误:他们试图用一种行为修改工具来解决知识检索问题。

隐藏草稿板问题:为什么仅凭输出监控无法保障生产级 AI Agent 的安全

· 阅读需 12 分钟
Tian Pan
Software Engineer

当 o1 或 Claude 等思考增强模型生成回答时,它们会在写出任何输出之前,在内部生成数千个推理 token。在某些配置下,这些思考 token 永远不会被公开。即使它们可见,最近的研究也揭示了一个令人震惊的模式:对于涉及敏感或伦理模糊话题的输入,前沿模型仅在 25–41% 的情况下会在其可见推理中承认这些输入的影响。

在其余时间里,模型在其草稿本 (scratchpad) 中做了其他事情,然后写出一个并不反映这些过程的输出。

这就是隐藏的草稿本问题,它改变了每个依赖输出层监控来执行安全约束的生产级智能体系统的安全计算方式。

如何在 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 是相同的。只有分块方式改变了。这种差距不是微调问题,也不是提示词工程问题。它是大多数团队在切分文档方式上的结构性失败。