基于语言模型构建的文档或工单处理管道,可以通过每一次演示,却始终上不了线,因为生产环境要的东西演示不要:一份用来验收的标注集、一条留在你自己基础设施之内的数据路径、一个安放错误答案的去处,以及上线后的负责人。本文讲每个缺口是什么样子、靠什么补上,以及如何分辨哪些工程公司真正在你自己的边界之内交付这类工作。
试点是成功的。在一批人工挑选的文档上,模型抽出了字段、给工单分了类,也说服了当初提出需求的人。几个月过去,它仍然在沙箱里跑着样本数据,没有人说得清要把它接到真实队列上还需要做些什么。
这个缺口靠换模型补不上。演示回答的是模型能不能读懂一份文档。生产要问的是每一份文档会怎样——包括扫描件、被转发的邮件串,以及模型弄错的那一份——而且所用的数据可能从来就不被允许送达试点所用的那个服务。
简短的答案是结构性的。在更换模型之前,先把试点跳过的四样东西建起来:一份从真实流量中抽取、按字段打分的验收集;一条让权重、索引、日志和评估数据全部留在你的基础设施之内的数据路径;针对未通过输出的校验器和复核队列;以及一位配有容量、降级方案和监控的运营负责人。amBrain 就自身 LLM 工作可以公开证实的内容,全部如下:我们已在一家客户的金融科技边界之内,将一项 LLM 集成投入生产:把非结构化的经纪商与交易场所通知——公司行动、金融工具与保证金变更——抽取并规范化为交易系统所消费的结构化记录。客户不具名,本文不是该项目的案例研究,下文也没有任何一个数字是在我们自己的系统上测得的。
2015 年,Google 的 Sculley 等人写道,真实世界的机器学习系统中只有一小部分由机器学习代码构成,而所需的周边基础设施庞大且复杂。语言模型管道也是同样的形状,只用那一小部分搭起来的试点,周围没有任何能让它在生产环境中运行的东西。
把试点拥有的东西和生产队列需要的东西摆在一起,缺失的工作就成了一张清单:
缺失的第一件制品,是一份由真实文档组成的标注集,每份文档都附有它应当产出的答案。没有它,每一次改提示词或换模型,都由当天看输出的人说了算,而试点也无法通过一道从未被写下来的关卡。
Google 的 Rules of Machine Learning 把测量放在模型之前:Rule #2 就是「首先,设计并实现指标」。对于信息抽取和工单分派,指标不是给整份文档打的一个分数:
如果试点是在托管模型上、用样本、合成数据或经人工审核放行的文档搭起来的,而真实数据又不得送往外部提供方,那么试点的结果就无法照搬:部署在内部的模型可能是另一个模型,也可能是同一个开放权重模型、但量化方式和推理服务设置不同;无论哪种情况,它的质量都必须在验收集上重新测量。
模型是最容易想到要搬进内部的组件,但不是唯一的一个,因为语言模型管道会把数据复制到模型调用之外的更多地方:
在日志必须离开受限区域的地方,脱敏能起作用。Presidio 是一个起源于 Microsoft 的开源框架,用于检测并匿名化文本中的个人数据;它的文档写明,由于检测是自动完成的,无法保证能找出所有敏感信息。脱敏缩小的是暴露面,它不能取代把数据留在内部。
试点收到的是文档;生产环境收到的是发送方发来的任何东西。在调用模型之前,管道必须先把这些东西变成能追溯回原处的文本:
长输入需要单独对待。在 2024 年发表于 TACL 的 Lost in the Middle 一文中,Liu 等人表明,对于他们测试的模型,当相关信息位于输入上下文的开头或结尾时,性能往往最高;当它位于长上下文的中间时,性能会显著下降。作为默认做法,按章节切分长文档、并在每个分块上保留来源,比假设模型会均匀地读完整个上下文更稳妥;而对你的文档来说哪种情况成立,由验收集来说明。
约束解码把模型的输出限定为符合 schema 的 JSON:vLLM 以 structured outputs(结构化输出)的形式支持它,llama.cpp 则通过 grammars(语法)支持。它能固定记录的形状——前提是在后端所支持的 schema 特性范围之内,并且生成没有被 token 上限截断——却固定不了记录的真实性:一条格式完好的记录,照样可能带着错误的日期。
真实性要在模型之后检查,由业务方已经信任的代码来做:
模型自己的置信度是一道薄弱的关卡。OpenAI 于 2023 年发布的 GPT-4 Technical Report 显示,在一个多项选择基准上,预训练模型的校准程度很高,而后训练降低了校准程度。模型自报的确定性或某个 token 的概率,是一个需要拿验收集去检验的信号,而不是一个默认就可以信任的阈值。
任何一项检查没通过的记录,都进入复核队列,而不是进入下游系统。这个队列本身就是一个产品:它需要一个负责人、一份以复核人员工时计算的容量计划、在每个字段旁边展示的原文片段,以及能回流进验收集的更正。
客服工单是公司外部的人写的文本,而文档里可能带着发送方有意放进去的指令。OWASP Top 10 for LLM Applications 2025 把提示词注入(Prompt injection)列在第一位,其中包括间接注入:指令随模型处理的外部内容(例如某个网站或某个文件)一起进入。
同一份清单中有三项,可以转化为文档处理管道的设计规则:
OWASP 还指出,目前尚不清楚是否存在万无一失的提示词注入防范手段。真正起作用的是输出检查和权限限制,而不是提示词的措辞。
管道的行为,是若干个各自独立变化的制品共同作用的结果。把它们当作一次发布来对待,并在这次发布产出的每一条记录上存下它的标识符:
锁定版本并不能让输出完全一致。Thinking Machines Lab 在 2025 年 9 月表明,推理服务器在温度为零时,对同一个提示词也可能返回不同的补全,因为一个请求的结果取决于有多少其他请求与它共处同一批次;同一篇文章还表明,批次不变(batch-invariant)内核能消除这种差异,但要付出速度上的代价。除非服务器运行的是这类内核,否则可复现性意味着每次发布都重跑验收集并比较分数,而不是指望得到一模一样的文本。
容量按 token 规划,而不是按文档。要在真实流量上测量输入和输出长度的分布,因为一个长附件的开销可能抵得上许多条短工单,而生成时间随输出长度增长。
推理服务系统会把请求组成批次,让加速器保持繁忙。在 SOSP 2023 上发表的 vLLM 论文中,Kwon 等人报告:与他们评估的系统相比,对注意力的键值缓存做分页管理,在相同延迟水平下将吞吐量提升了 2 到 4 倍。更大的批次提高吞吐量,同时也提高每个请求的延迟;后台队列吸收得了这部分延迟,交互步骤吸收不了,所以两者要分开:
正是降级方案让开启管道这件事可以撤回。今天已有的人工流程始终是兜底,管道逐个字段地从它身上接走工作,而不是在某一天整体取代它。
服务器仪表盘告诉你管道有没有作答,却不告诉你答案对不对;而一个在新模板上质量退化的模型,延迟照样不变。监控抽取或工单管道要两者兼顾:
NIST 于 2024 年 7 月发布的 Generative AI Profile(NIST AI 600-1),按照其 AI Risk Management Framework(AI 风险管理框架)的四项职能来组织这项工作:治理、映射、测量和管理。名称本身不如它带来的后果重要:上线后的测量是一项有明确名目、配备了人手的工作,而不是试点团队有空时才做的事。
在某一天把管道对所有内容一次性开启,会把所有风险绑进同一个事件。分阶段上线则把它们分开:
一个文档读得很好、却始终没能投入生产的试点,并不是败在阅读上。它从来没有得到过一份要通过的验收集、一条允许它使用的数据路径、一个安放错误答案的去处,也没有一个在上线之后接手的负责人。
本文背后的问题——谁能把 LLM 管道部署进你自己的基础设施、并真正交付上线——有一个不需要供应商名单的判别方法。做这类工作的公司,在推荐模型之前会先问验收和运维:
每一项都是你在第一次谈话里就能问的,而含糊的回答说明试点缺失的那部分工作还没有被界定范围。
所以第一个问题不是在你的边界之内跑哪个模型,而是:你愿意接受哪些文档上的哪些字段自动化处理,以什么为衡量基准,以及校验不通过的记录由谁来接手。
除上文摘要中所述的生产集成之外,amBrain 可以公开证实的内容:amBrain 自 2019 年起做软件开发。我们有三种合作方式:整体交付、专属团队,或工程师嵌入你的团队。
带上您当前的架构和让您担心的故障场景,我们用半小时一起梳理。