对账
企业授信尽调关键信息抽取 基于 MinerU

让 AI 读财报,
数学抓出 OCR 的错。

把财报 PDF 里被机器读错的数字,一处不漏地揪出来——
在 1000 份真实招股书与年报上实测(300 官方 + 700 自建)。

%
合并三大表抽取率·招股留出
300 官方 + 700 自建实测
1.3B
小模型负责"读"
0
AI 经手的算术题
一个真实的错 · 联芸科技招股说明书
MinerU OCR 输出 · 联芸合并资产负债表 · 流动负债
↑ 这是 MinerU OCR 的真实输出 · 应付账款一行里出现了两个小数点
千位逗号被 OCR 读成句号 —— 一行里冒出两个小数点
40,206.073.20,机器只当成四万块来算——
差 4,020
藏在一份几百页文档的、一张二十多行的表里。
人眼几乎不可能翻出来。
① 重要性 · OCR 把错字也忠实复印

机器认字会错,
而错在数字上,就是量级偏差

.
逗号读成
句号
8→58
前面凭空
多一位
50→5
末位被
截断
8→3
字符
乱码
▦→▤
整列
错位串行

单看都不起眼;落到财务数字上,每一种都是量级级别的偏差。而 OCR 从不会主动说"我这里可能读错了"。

4,100+
1000 份里独立复核
确认的真实 OCR 错
≥1.1%
的数字被确认读错
(保守 · 未计待复核)
千亿
单处偏差最高量级
(多读一位/小数点错位)
① 重要性 · 人工 tie-out 的代价

逐数核对,
是最耗人又最不容错的苦活。

一份招股书
0+ 单元格

三大表逐个数字核对,一个有经验的人要核 小半天

十万份巡检
= 一支团队 0 整年

还不能出错。人海战术,覆盖不了这个量级。

这正是这套系统想替人扛下来的活——把"逐数核对"自动化,把人留给真正需要判断的疑点。

① 重要性 · 突破口

会计,是一门平衡的艺术。

每一张报表,本质都是一架必须时刻保持平衡的天平 —— 两端永远相等:

资产总计=负债合计 + 所有者权益
各级小计=Σ 各明细分项
期末余额=期初余额 + 本期增减

只要一个数字被 OCR 读错,这架天平立刻失衡错误,会自己暴露 —— 这正是我们抓错的突破口。

② 为什么走 MiniCPM-V-4.6 Heavy 路径 · 分岔

同一个问题,
两种截然不同的解法。

路线 A · 直觉做法

一个大模型,
又读又算又下结论

又快——但不可信:大模型最不可靠的恰恰是算术,还会自作主张"顺手改个数",而且你没法复现

路线 B · 我们的选择

把"读"和"算"
彻底拆开

读,交给擅长语义、偶尔出错也不致命的 AI;算,交给永不出错、可复现的代码。各司其职,错误无处藏身。

② 为什么这条路 · 两个都不能让步的约束

抽取要能泛化,校验要够便宜

约束一 · 泛化

"读" 为什么不能用正则

十万份银行真实收到的财报,格式千变万化,正则永远穷举不完 —— 面对真实多样性会立刻欠拟合。"读"必须交给能泛化的模型。

在一批"训练时没见过"的年报上实测 · 读出合并资产负债表
只用写死规则 81% +会泛化的小模型 92% +11pp
这 11 个点,就是"读"离不开小模型的硬证据(年报版式最杂、最难读)。
约束二 · 算术不可信(实测,非估算)

"算" 为什么不能交给大模型

63% deepseek 兼做核算,
漏掉 63% 的真不平衡

它把打印的合计当成"分项之和"判"平衡",用"看起来对"掩盖"其实不平"。算术交给零成本确定性代码——又对、又唯一可复现。137 张留出 BS 实测 · 详见路线对照①

我们的破局:1.3B 小模型抽取(泛化 · 近零成本) + 确定性代码校验(零模型成本)。两个约束,同时拿下。

② 为什么这条路 · 设计灵魂

AI 只负责
代码只负责

读 · 语义理解

交给 MiniCPM-V-4.6

这是哪张表、哪一列、哪个科目——大模型擅长,偶尔贴错个标签也不致命

算 · 确定性运算

交给纯代码引擎

所有加减勾稽——代码最擅长、永远可复现,绝不会幻觉、绝不会改数。

铁律:AI 逐字照抄数字,绝不参与任何加减、绝不顺手改数。把易错的算术从 AI 手里拿走,正是它能"抓出错"而非"引入新错"的根本。

② 为什么这条路 · 小模型 Heavy

对单份文档,
上百次小模型精读。

+
次 / 单份文档
MiniCPM-V-4.6(1.3B)的调用

每次只问一个受约束的小问题。切得越碎,单次越简单、越可控、越能并发——13 亿参数也能稳,成本近乎为零。

实测单表抽取 1.3~7 秒/张 · 单次成本近乎为零
② 为什么这条路 · MiniCPM-V-4.6 承担的七类语义活

七类语义活,每一类都在真实地跑。

01判别表种
02表头期次
03列角色
04双栏拆分
05密集抽取
06风险召回
07回头自证
② 为什么这条路 · 最唬人的两块硬骨头

再脏的表,会读的模型照样拿下

难题一 · 跨页断表

一张表被切成两页,
续页连表头都丢了

资产负债表上半截在第 12 页、下半截在第 13 页,续页连期次表头都没了。写死的规则一断就废。

小模型登场:一眼认出“这是上一张表的下半身”,借回表头、对齐每一列;脏到列都错位,就让模型连读三遍投票,把两页严丝合缝拼回一张完整的表。

难题二 · 异形宽表

十几列的所有者权益变动表,
母公司、合并还挤一行

列错一格,整张表的勾稽就全盘皆错。这是最容易“串列”的表。

小模型登场:逐格读懂每列是什么、每个数字归哪一栏、哪是母公司哪是合并;列对齐交给模型理解到位,再由确定性引擎逐列逐行复核。

越唬人的版式,越证明这条路对:读的脏活累活全压给会泛化的小模型,算账只信确定性引擎。模型越强,读得越准。

② 为什么这条路 · 让 1.3B 变可靠的三个工程决定

效果,是从实测里打磨出来的。

决定一 · 抽取形态

把抽取压成
一次问答

旧的多轮来回:240 场全军覆没
100% 数字逐字保留

单步 NDJSON 输出 · 1.3~7 秒一张表,截断也只丢最后一行。

决定二 · 混合管线

确定性表格优先
LLM 只做兜底

有结构的表格走纯代码逐格抽取,100% 忠实、根本不惊动模型;只有零散文本才请 MiniCPM-V-4.6 出马。

能不让 AI 碰的,就不碰。

决定三 · 可复现

零温采样
外加多源投票

temperature=0 让单次确定;再可选叠加 N 轮投票,逐行取众数,把一致率和冲突全部暴露。

稳定 ≠ 正确,冲突也摆上台面。

② 为什么这条路 · 算术交给代码:25 条等式交叉盘问

这 25 条校验,
具体在查什么?

这套等式·全 700 份里实际跑到 98.7% 的文档——不是纸面规则
实例 · 联芸 BS_SUBTOTAL_TIE 跑起来 ↓
规则 BS_SUBTOTAL_TIE · 流动负债合计 = Σ 分项
表上打印的合计230,148,626.02
引擎把分项加起来0.00
差额= 40,206,073.20
不多不少,正好是应付账款被读错丢掉的量级 —— 数学精确指回了犯错的那一格。
② 为什么这条路 · 零假阳的架构保证

AI 的幻觉,进不了最终结论

AI 的输出

只是标签

它不算账、不判对错。贴错了,最坏只是错个标签,不会变成假警报

报错的依据

只由等式裁决

每条标红都是一条会计等式真的不平衡——纯代码、可复现、与哪版模型无关

报了之后

给得出证据

附差额金额、勾稽路径、OCR 原文——直接告诉你"这里差 4,020 万"

还有一道忠实性守卫:反查每个抽出的数字是否真出现在 OCR 原文里——绝大部分能精确回查命中,对不上的主要是 OCR 噪声本身,而非 AI 捏造

17 项抽取方案逐一落地 · 另一个独立 AI 专挑毛病(对抗式复审)、修复 约 12 处潜在误报 · 2069 项自动化测试全绿
这道守卫已覆盖非财报金额:注册资本 / 募投 / 合规金额 / 持股比例也逐个回查 OCR 原文,抽错就像财报数字一样自动标红——非财报字段第一次也有了「抓 OCR 错」的能力。
② 为什么这条路 · 路线对照①:把整件事丢给大模型『一把梭』(竞品常见路线)

把"算"也交给大模型,
它会用"看起来对"掩盖"其实不平"。

137 张留出合并资产负债表 · 让 deepseek-chat(v4-flash)像竞品那样『读+算+判一把梭』(我们早期也试过这条路) · 它漏掉的,确定性引擎逐项真加全抓到
联芸 · 应付账款被 OCR 读成 40,206.073.20(真值 4,020 万)
deepseek-chat 自查『流动负债合计 = Σ分项』
它报的"分项之和"230,148,626.02
↑ 直接 = 打印的合计,根本没把分项加起来 → 判"平衡✓"、漏掉 4,020 万真错
我们确定性引擎 · 逐项真加
差额= 40,206,073.20
算术可信 · 核心
63%大模型漏报
(漏掉 40/63 真实不平衡)

我们 63/63 全抓到,差额精确到分

忠实性
64处把 OCR 坏值"顺手改干净"
→ 错误从台账里消失

我们 0 改写 · 逐字照抄

大模型不是不会(逐字抽取它没错,甚至标出了可疑值)——是不会(真去)这正是我们把"算"交给确定性代码的理由。

② 为什么这条路 · 路线对照②:同岗位换抽取器(都只逐字抽取,下游同一确定性引擎)

抽取岗位要的是忠实+便宜,不是"聪明"。

137 张留出合并资产负债表 · 三个抽取器拿同一条逐字 prompt · OCR 原文逐字为准 · 变量只剩"用谁抽"
抽取器
抽全率
忠实率
静默改值
成本/表
延迟
确定性逐格 · 我们(干净表主路)
100%
100%
0
¥0
~毫秒
MiniCPM-V-4.6(1.3B 单抽宽表)
55%
92.6%
18
¥0
4.8s
deepseek-chat(大模型抽取)
100%
100%
0
¥0.008
12.8s

结构化表 → 确定性逐格最划算(100% 忠实·零成本·毫秒级·可复现):大模型抽得也准,但白花钱还慢;1.3B 单抽宽表只抽出一半。所以小模型的岗位是零散文本字段+坏表兜底,表格交给代码——抽取,不必为"大"买单。

非财报五类字段也走这条岗位线:公司概况 / 股权 / 募投 / 风险 / 合规——小模型逐字抄原文,分类·去重·打假交确定性代码,和财报数字同一套「读归读、算归算」。
③ 效果 · 1000 份真实招股书 / 年报

1000 份真招股书 / 年报,
逐份实测出来的。

%
合并三大表
抽取率
%
母公司报表
抽取率
%
文档级
六表齐套
%
勾稽校验
触达率
前三项=招股书,在 700 份"训练时没见过"的文档上实测(分母只算这份文档里确实有的报表)| 校验触达取全部 700 份

年报更脏、表更宽,合并三大表 93.9%——距 95% 仅 1.1pp,已逼近 1.3B 小模型+脏 OCR 的物理上限。抽出的数字绝大多数都能在 OCR 原文精确回查。

③ 效果 · 核心价值:1000 份里,到底替人抓住了什么

36 万个数字 逐格核过一遍。

抽取并逐格勾稽
的数字总量
平均每份报告
的数字个数
标红的
等式不平衡处
%
文档至少
命中 1 处疑点
标红率 3.75%(标红/数字)· 平均每份 ~14 处 · 抽取值忠实回查命中 87.4%
对账工作台仪表盘 · 三木集团年报
↑ 对账工作台:小模型读 · 确定性引擎审,逐表逐格出结论(真实产品)

这些标红是真错还是假错?我们对 1000 份逐条独立复核每一处标红(codex + 多 agent)—— 确认 4,100+ 处真实 OCR 误读(销售收现少计 4 亿 · 存货漏读 1 亿 · 最高偏差千亿级);约占可判定标红 4 成(官方集达 6 成),其余为抽取口径 / 源表舍入。

③ 效果 · 规模化的成本账

"对每一份都做一次体检",
第一次在成本上成立

单份文档(OCR 后)
秒级

完成抽取 + 全部 25 条勾稽核验实测单表抽取 1.3~7 秒

10 万份全量巡检(外推)
~0 小时

读交给近零成本小模型,算是纯代码,两头都能并行。

文档之间彼此独立,加机器就近似线性提速,没有中心瓶颈。

③ 效果 · 赛题要的尽调字段,逐条可追溯到文件

财务之外,赛题要的字段每一类都抽到、可追溯

最新「怎么抽」:小模型只抄、代码来管。 这五类字段里,小模型只逐字照抄原文(公司名·金额·风险描述,不改不换算);分类·去重·打假全交确定性代码——类别让模型从固定选项里挑(不靠代码猜关键词,换个说法也不失灵),每个金额回 OCR 原文核对、对不上就像财报数字一样自动标红,并根治了小模型「照抄示例」的污染(实测泄漏 36→0)。
③ 效果 · 每条证据精确到 bbox,可回调原文

不止页码——证据精确到那一格的 bbox

对账工作台:联芸原始PDF三态高亮 + 复核面板
↑ 产品实拍 · 左侧原始 PDF 按 bbox 三态高亮(绿=勾稽通过 · 红=疑似 OCR 错 · 灰=无规则覆盖),右侧复核面板把差额直接标到那一格
36.3 万个数字 · 每个都挂 Evidence

{ page, chapter,
  block_type, quote,
  bbox:[x0,y0,x1,y1] }

抽取值 → bbox 坐标 → 回到原文那一格。OCR 读成 40,206.073.20,原文那一格是 40,206,073.20

按 bbox 自动截取原文片段回溯 · 持续开发中
③ 效果 · 价值落地

省的是人月,
防的是事故

场景一

授信尽调底稿

上千个字段先跑平,只把真正不平的几处推到客户经理面前。

每份 ~363 个数字 → 仅 ~14 处需人工复核

场景二

监管 / 交易所巡检

人海覆盖不了的十万份级入口,秒级单份、小时级全量。

场景三

数据供应商质检

入库前过一道勾稽闸,等式不平的脏数据当场拦下。

③ 效果 · 下一步要走的路

校验器,还能织得更

更多勾稽

文本数字 ↔ 表格数字

把正文与附注里散落的金额,跟报表对应数字做交叉勾稽,让校验网覆盖到表格之外的每一处引用。

用上 OCR 置信度

采纳 MinerU confidence

读取 MinerU 返回的置信度,对低置信的数字优先复核,把"可能读错"在算账之前就标出来。

攻坚最脏的表

所有者权益变动表校验

SCE 是最宽、最易串列的表,OCR 结果也最脏;正在让小模型把它读稳,再接入这套校验体系。

设计哲学

小模型负责
确定性数学负责

速度来自 AI,信任来自数学。

把一个近零成本的小模型,拆细、约束、互证、复算,逼成一台既能规模化、又值得信任的读表机器。

账面OCR · quaesto OCR

谢谢,欢迎提问。

微信二维码
扫码加我微信
基于 MinerU + MiniCPM-V-4.6 · 企业授信尽调关键信息抽取
账面OCR · quaesto OCR
1 / 17
↑ ↓ ← → / 空格 / 翻页笔 · F 全屏