多模态模型抽取合同表格怎么验收:版面切片、字段约束与人工复核
来源:17golang原创
时间:2026-08-25 03:14:13 289浏览 收藏
合同表格的难点通常不在“能不能识别文字”,而在于模型会把跨页表头、合并单元格和金额单位拼错。比如付款计划里“比例”“金额”“付款节点”分散在两页,直接让模型输出 JSON,结果看起来完整,回到原文却找不到对应位置。更稳的做法是先按版面切片,再让模型只填约定字段,最后用规则和原页证据验收。
- 先保留页码、表格编号和单元格邻接关系,再请求结构化字段。
- 金额、日期、比例和必填项必须在模型输出后做独立校验。
- 每个字段都要能回指原页或切片坐标,无法回指就进入人工复核。
- 验收指标应区分字段正确、行列关系正确和证据完整,不能只看 JSON 是否能解析。
先把抽取接口的目标定成“可验收字段”
如果调用方只说“把合同表格提取出来”,接口就没有明确成功标准。一个适合验收的结果,至少要带上合同页码、表格名称、行号、字段名、规范化值和来源片段。模型负责理解视觉布局,程序负责检查类型、范围和必填关系。
{
"table": "付款计划",
"page": 7,
"rows": [
{
"row_no": 1,
"milestone": "合同签署后 10 日内",
"ratio": 0.3,
"amount": 150000,
"currency": "CNY",
"evidence": {"page": 7, "slice": "p7-table-02"}
}
]
}
这里的 evidence 不是装饰字段。它让审阅者可以从结果回到第 7 页的原始切片,判断 0.3 是“30%”还是被相邻列带进来的数字。对于金额字段,建议同时保留展示值和规范化值,避免把“15 万元”直接变成没有单位的 15。
版面切片决定模型看见什么
整份合同直接送入模型,长表格容易出现两类问题:表头在上一页、数据在下一页时列关系丢失;页脚或正文中的数字被吸进当前行。切片时不要只按固定高度裁图,应优先围绕表格边界裁剪,并为跨页表格保留上一页表头和下一页第一行。

可以把一次请求的输入元数据固定成 document_id、page、slice_id 和 table_id。同一张表的多个切片使用同一个 table_id,这样后续合并行时不会把两个表的第 1 行混在一起。
- 单页表格:保留表头、表尾和页码标记。
- 跨页表格:复制表头上下文,给续表行分配连续行号。
- 合并单元格:要求模型返回合并范围,不把空白单元格自动当成新值。
字段约束要覆盖类型、关系和业务边界
结构化输出只能保证结果符合 JSON 形状,不能保证模型读对了表格。收到结果后,至少做三层检查。
| 检查层 | 示例 | 失败处理 |
|---|---|---|
| 类型 | 比例是 0 到 1 的数字,日期能解析 | 标记字段错误,不自动修正 |
| 行列关系 | 金额与付款节点来自同一行 | 回看原切片,必要时重切 |
| 业务边界 | 付款比例合计接近 1,币种不能为空 | 转人工复核,不静默放行 |
以付款计划为例,ratio 合计不等于 1 不一定是模型错了,合同可能还有“尾款按实际结算”的开放项。规则应该把异常分成“可自动确认”和“需人工判断”,而不是见到不等于 1 就强行归一化。
错误处理:不要用空字段掩盖低置信结果
表格被扫描阴影遮住、页码缺失或列线不清时,模型可能返回一个语法正确但证据为空的对象。接口应区分输入问题、模型解析问题和业务校验问题,并在结果中保留状态。
{
"status": "needs_review",
"errors": [
{"field": "amount", "code": "evidence_missing", "row_no": 2},
{"field": "ratio", "code": "sum_out_of_range", "row_no": null}
]
}
不要把失败字段改成空字符串后继续进入合同系统。空值会让下游误以为“合同没有填写”,而不是“这次识别没有拿准”。对于同一切片的再次请求,要记录请求版本和输入摘要,避免人工复核时无法解释两次结果为什么不同。
人工复核应该围绕证据,而不是重新抄一遍

复核页面最有用的布局是左侧显示原始切片,右侧显示字段结果,中间突出异常字段。审阅者只需要确认三个问题:值是否来自正确的列,单位是否完整,行号和付款节点是否对应。确认后记录 reviewer、reviewed_at 和修改原因,后续才能统计是切片问题还是字段约束问题。
- 先按
evidence.page打开原始页面。 - 再按
slice_id定位表格区域,检查表头和相邻行。 - 最后只修改有证据支持的字段,并保留模型原值。
验收指标要分开看,准确率不是一个数字
一套小规模回归集可以包含不同表格结构:单页表、跨页表、合并单元格、带单位金额和缺失字段。验收时分别统计字段值正确率、行列关系正确率、证据可回指率和异常拦截率。这样才能知道问题究竟来自视觉理解,还是来自后处理。
对生产数据,建议保留一批脱敏样本作为固定回归集;每次更换模型、提示词或切片策略都跑一遍。指标下降时先比较失败样本,不要只看平均分。平均分上升但跨页表全错,仍然不能上线。
常见问题
结构化输出能保证合同表格一定准确吗?
不能。它主要约束字段形状,版面理解、单位识别和行列对应仍需原页证据与规则校验。
为什么不直接把整份 PDF 交给模型?
整份输入适合先做文档级定位,但表格验收仍建议围绕页码和表格边界切片,否则跨页表头和相邻数字更容易串列。
金额识别错了应该自动重试还是人工修改?
先看证据是否存在。证据缺失或单位不明时进入人工复核;只有确认切片质量或输入格式问题时,才带着相同的记录信息重试。
把可回指证据作为放行条件
合同表格抽取的最小可靠闭环是:保留版面上下文,输出受约束字段,独立校验类型和关系,为每个值绑定原页证据,异常进入人工复核。模型换了、提示词换了,验收接口仍然可以用同一套字段和回归样本判断结果是否可用。
-
303 收藏
-
295 收藏
-
240 收藏
-
476 收藏
-
225 收藏
-
229 收藏
-
104 收藏
-
394 收藏
-
113 收藏
-
科技周边 · 人工智能 | 5小时前 | 人工智能 · openai · 兼容性 · Chat Completions · 推理模型 · token预算 AI推理模型 max_tokens max_completion_tokens 参数迁移464 收藏
-
148 收藏
-
259 收藏
-
103 收藏
-
178 收藏
-
407 收藏
-
202 收藏
-
267 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习