同一份文档跑三次,字段值为什么在“数字”和“字符串”之间摇摆?

2 阅读6分钟

一份权益分派公告,字段清单不变、文档不变、模型不变,连跑三次。第一次“每股现金红利”输出 0.02,第二次变成 "0.02",第三次又回到 0.02。更隐蔽的是“参与分配股本基数”:一次是 536006217,两次是 "536,006,217"——同一个数,带上了千分位逗号,变成了字符串。

下游系统按整数字段接收,收到带逗号的字符串时当场解析失败。但抽取界面看起来一切正常:值都在,位置也对,没有任何报错。问题不在“抽没抽到”,而在“抽出来的东西是什么形态”。

输出格式漂移,不是模型能力问题,是契约缺失

大模型做抽取时,输出的是“给人看的文本”,而不是“给系统用的数据”。这句话的差别在于:文本允许灵活,数据要求恒定。

典型的表现有几类:

  • 数字与字符串摇摆。0.02 和 "0.02" 在人类眼里是同一个值,在 JSON Schema 里是两种类型。下游校验一开,前者通过,后者失败。
  • 千分位与纯数字混用。536006217 和 "536,006,217" 数值相等,但后者无法直接参与计算或入库。
  • 日期格式不统一。同类型的两份公告,一份抽成 2026/10/14,另一份抽成 2026年10月14日[citation:10]。类型都是字符串,但归一化规则没有锁定。
  • 空值表达不一致。有时是 null,有时是空字符串,有时是 “无”。下游不知道哪一种才算“真正缺失”。

这些失败有一个共同特点:单看每一次输出,字段值都是对的;放在批量处理的上下文里,口径就漂了。三次运行三种形态,系统无法判断该信任哪一个。

排查方法很直接:同一份文档、同一套字段,连续跑三次,逐字段比对类型和格式,而不只是比对数值。重点看数字字段是否始终为数值类型、日期字段是否遵循同一格式、空值是否有统一表达。任何一项不一致,这一层的输出就不能直接接入下游。

为什么“每次跑都不一样”比“跑错了”更难处理

跑错了至少知道要修。输出格式漂移的麻烦在于:每一次看起来都对,验收时抽检一两次也查不出来,直到批量任务跑完、数据进了数据库,下游报表对不上,才回头发现源头形态不一致。

更隐蔽的是,这种漂移会随文档类型放大。在单一模板上,模型可能恰好稳定输出同一种格式;换一类文档,提示词的措辞微调一下,输出形态就跟着变。测试时用一份文档跑通,不代表生产环境批量跑时口径一致。

对字段有严格类型要求的场景——金额要参与计算、日期要排序、编号要精确匹配——格式漂移不是“小瑕疵”,而是阻断性故障。一个带千分位的字符串混进数值列,整条数据管道都可能中断。

字段契约要锁的是类型和格式,不只是字段名

大多数抽取配置的起点是“要抽哪些字段”。但字段清单只回答了“抽什么”,没有回答“抽出来长什么样”。

一个可执行的字段契约,至少要在字段名之外锁定三件事:数据类型(数值、字符串、日期、布尔)、归一化规则(千分位是否去除、日期统一成什么格式、全半角如何处理)、空值表达(缺失时返回什么、无法识别时返回什么)。这三件事不锁定,抽取结果就只能在“能看”的层面停留,进不了“能用”的层面。

更合理的做法是把契约放在模板层而不是提示词层。提示词是自然语言,每次调用都可能被模型“灵活理解”;模板锁定的是输出结构,同一字段在同一模板下每次输出都遵循同一套类型和格式规则[citation:10]。前者适合探索,后者适合生产。

审核规则要能拦住格式问题,而不只是值错误

抽取结果进入复核队列时,通常关注的是“值对不对”。但格式漂移的问题恰恰是“值对但形态不对”,字符级核对看不出来,必须靠规则校验拦截。

可以设计几类针对性的校验规则:数值字段的类型检查、日期字段的格式正则、金额字段的千分位规则、空值字段的一致性检查。当同一字段在批量结果中出现多种格式时,规则应能标出异常并阻止直接导出。

规则的作用不是替代人工判断,而是把“看起来都对”的结果里那些形态不一致的条目筛出来。人工只需处理被拦截的部分,而不是逐条检查每一个字段的类型。

溯源要看“这次输出和上次有什么不同”

格式漂移的排查,单看一条结果没有意义。需要的是对比能力:同一文档多次运行的输出对照、同一字段在批量结果中的类型分布、每次抽取使用的模板版本。

如果系统只展示“当前结果”,复核人员无法知道这个 "0.02" 是第一次就这样,还是这次才变成字符串。可追溯的抽取记录应该包含:本次使用的字段契约版本、该字段的历史输出类型、同批次中同字段的格式一致性状态。有了这些,排查路径才是“先看契约是否锁定,再看批量结果是否一致”,而不是重新跑一遍碰运气。

用一组对照样本验证输出稳定性

验证项观察重点
同一文档连跑三次数字字段是否始终为数值类型
同类型文档两份日期格式是否一致
含千分位的金额字段是否被归一化为纯数字
字段缺失的样本空值表达是否统一
批量导出结果同一字段的类型分布是否单一

每项记录输出值和数据类型,重点标记“数值对但类型不一致”的情况。这类问题在值级验收里是隐形的,只有对照类型才能暴露。