展开本页目录
开始前准备什么
- 准备完整表头、单位和合计可见的清晰表格;本页用虚构五行练习图。
- 定义编号文本、数量整数、金额小数字符串和空值规则。
- 先完成单张图片输入验证,再接实际识别与本地导出。
- 预留人工复核和标准答案对照,不能用生成 XLSX 代替识别验收。
- 识别表头
- 保留行列
- 验证 JSON
- 检查金额
- 导出与复核
说明依赖版本、离线命令、请求协议与验收边界;所有素材为虚构资料。
本地编码真实图片,生成 Chat、Responses 或 Anthropic 请求体;不联网、不保存 Key。
五行六列,包含前导零编号和两处空白备注;用于实际输入及逐格对照。
输出固定 JSON 契约,保留空值、列数、行序与合计。
由虚构素材代码给出的标准答案,不是模型识别结果。
本地代码写出的标准字段,用于独立对照;与模型输出文件分开保存。
gpt-5.4-mini 对虚构表格的真实返回,保持原始字段;单次小样,不是跨资料准确率。
从真实模型返回写出的五行工作簿;文档 ID 由操作者提供并记录来源,不改原始响应。
真实HTTP、耗时、usage、逐字段检查与匹配后的控制台扣费;金额仅代表本次通道。
本地检查重复编号、公式样文本、字段类型及金额,输出数据与待确认表,不联网。
这六列,分别应该是什么类型
| 列 | 保存类型 | 避免什么 |
|---|---|---|
| 编号 | 字符串,例如 001 | 自动变成数字 1 |
| 商品 | 原文字符串或 null | 把相似商品合并或改名 |
| 数量 | 整数或 null | 把空值当 0、把单位放进数字 |
| 单价 / 金额 | 两位小数字符串或 null | 识别时丢小数点,计算时用浮点累计 |
| 备注 | 原文字符串;可见空白为 null | 沿用上一行备注或把空白变成猜测 |
- 列
- 编号
- 保存类型
- 字符串,例如 001
- 避免什么
- 自动变成数字 1
- 列
- 商品
- 保存类型
- 原文字符串或 null
- 避免什么
- 把相似商品合并或改名
- 列
- 数量
- 保存类型
- 整数或 null
- 避免什么
- 把空值当 0、把单位放进数字
- 列
- 单价 / 金额
- 保存类型
- 两位小数字符串或 null
- 避免什么
- 识别时丢小数点,计算时用浮点累计
- 列
- 备注
- 保存类型
- 原文字符串;可见空白为 null
- 避免什么
- 沿用上一行备注或把空白变成猜测
用列数明确的 JSON 承接识别结果
片段只列出前两条明细,完整五行标准 JSON 在下载区。总额应读取原图合计;再由程序对明细独立重算,两者不一致时才产生冲突。不要把合计混进 rows,也不要让程序把模型输出补成标准答案。
本地标准答案片段;不是模型 API 响应
{
"document_id": "DEMO-TABLE-001",
"currency": "CNY",
"headers": ["编号", "商品", "数量", "单价(元)", "金额(元)", "备注"],
"rows": [
["001", "蓝色水杯", 3, "29.90", "89.70", "新品"],
["002", "牛皮纸袋", 12, "1.20", "14.40", null]
],
"total_quantity": 32,
"total_amount": "185.60"
}先跑标准答案,再换成真实响应
- 先安装说明中的 openpyxl。下载转换器拒绝重复 ID、错误列数、公式样文本和输出覆盖,避免将未核对文本作为电子表格公式执行。
- 金额关系用 Decimal 检查;导出时金额写入数值单元格,以 0.00 显示,编号写入文本单元格。
- 不可读的必填字段留空并高亮;冲突进入“待确认”工作表。输出文件成功不代表所有识别单元格正确。
- 获得模型 JSON 后,保持其原始文件,再将副本送入转换器;人工修正另存版本。
离线验证导出流程,没有 API 调用
python3 growth-batch7-vision-table-to-xlsx.py \
growth-batch7-vision-table-expected.json \
--output standard-roundtrip.xlsx用五行标准答案定位偏差
完整练习标准为 5 行、6 列,数量合计 32、金额合计 CNY 185.60。标准由本地制作素材的代码确定;不能把标准答案下载、离线导出或金额一致称作模型 OCR 准确率。真实识别还要逐格比较商品原文、行序和空值。
| 编号 | 数量与单价 | 金额 | 备注 |
|---|---|---|---|
| 001 | 3 × 29.90 | 89.70 | 新品 |
| 002 | 12 × 1.20 | 14.40 | 空白 |
| 003 | 2 × 16.50 | 33.00 | 加急 |
| 004 | 5 × 8.00 | 40.00 | 空白 |
| 005 | 10 × 0.85 | 8.50 | 盘点 |
- 编号
- 001
- 数量与单价
- 3 × 29.90
- 金额
- 89.70
- 备注
- 新品
- 编号
- 002
- 数量与单价
- 12 × 1.20
- 金额
- 14.40
- 备注
- 空白
- 编号
- 003
- 数量与单价
- 2 × 16.50
- 金额
- 33.00
- 备注
- 加急
- 编号
- 004
- 数量与单价
- 5 × 8.00
- 金额
- 40.00
- 备注
- 空白
- 编号
- 005
- 数量与单价
- 10 × 0.85
- 金额
- 8.50
- 备注
- 盘点
真实调用:五行表格与标准逐格一致
2026-10-08 的这次请求实际读取虚构 table-input.png,返回 plain JSON。它不是本地标准答案被复制成“实测”:原始响应、独立标准和导出文件分开保存并逐字段比较。下载区的实际 XLSX 从真实 JSON 写出;该响应没有 document_id,因此来源标签由操作者显式提供,工作簿记录 provided_by_operator,原始响应不改。
这张清晰、简单六列表格通过,不证明模糊扫描、合并单元格、多页续表或所有语言都能达到同样结果。本次控制台花费列USD 0.000364已按本人测试凭证、型号、完成时间和usage匹配;它仅代表这一通道的一次调用,不能作为其他型号、分组或任务的统一价格。实际XLSX已完成36项单元格与格式检查,保留文本编号、两处空白及金额显示;格式、参数、权限或通道变化后仍需要自己的小样验收。
| 检查 | 实际结果 | 判断 |
|---|---|---|
| 模型与接口 | gpt-5.4-mini · /v1/chat/completions | 本次视觉输入可用 |
| HTTP / 完整请求耗时 | 200 / 11.812秒 | 接口成功 |
| 行列与文本 | 5行6列,商品、001–005、表头和标题一致 | 本张逐字段检查通过 |
| 空值与金额 | 002/004备注为null;金额185.60、数量32 | 与独立标准一致 |
| 返回 usage | prompt1267 / completion156 / total1423 | 真实返回已保存 |
| 实际账单 | USD 0.000364 · 11:32:48(Asia/Shanghai) | 按输入1267/输出156 tokens等匹配,控制台显示精度6位小数 |
| 实际XLSX | 36项逐单元格与格式检查通过 | 真实响应导出,与本地标准答案独立保存 |
- 检查
- 模型与接口
- 实际结果
- gpt-5.4-mini · /v1/chat/completions
- 判断
- 本次视觉输入可用
- 检查
- HTTP / 完整请求耗时
- 实际结果
- 200 / 11.812秒
- 判断
- 接口成功
- 检查
- 行列与文本
- 实际结果
- 5行6列,商品、001–005、表头和标题一致
- 判断
- 本张逐字段检查通过
- 检查
- 空值与金额
- 实际结果
- 002/004备注为null;金额185.60、数量32
- 判断
- 与独立标准一致
- 检查
- 返回 usage
- 实际结果
- prompt1267 / completion156 / total1423
- 判断
- 真实返回已保存
- 检查
- 实际账单
- 实际结果
- USD 0.000364 · 11:32:48(Asia/Shanghai)
- 判断
- 按输入1267/输出156 tokens等匹配,控制台显示精度6位小数
- 检查
- 实际XLSX
- 实际结果
- 36项逐单元格与格式检查通过
- 判断
- 真实响应导出,与本地标准答案独立保存
从实际 JSON 导出;输出路径必须不存在
python3 growth-batch7-vision-table-to-xlsx.py \
table-ocr-result.json --document-id DEMO-TABLE-001 \
--output actual-ocr.xlsx这些情况先暂停自动入库
- 照片裁掉表头或单位:补完整原图,不猜字段意义。
- 合并单元格和跨页续表:先定义展开规则,保留区域与来源页;本页六列模板不能自动处理全部形状。
- 负金额、税率、百分比或不同币种:补自己的数据契约,不能套本页正数 CNY 规则。
- 商品名称识别正确但金额移列:从行列结构重新提取,不靠总额平衡掩盖错配。
- 导出表可打开但字符串、空值或格式变化:读取实际 XLSX 单元格类型复查后再交付。
怎样确认已经完成
- 原图、真实响应 JSON 与导出 XLSX 作为不同文件保存。
- 5 行6列与原图一致,合计未进入明细。
- 001–005 保存为字符串,两处备注仍为空。
- 金额逐行计算并与185.60合计独立对照。
- 通过算术仍逐格检查原文、列关系和最终 XLSX 类型。
常见问题
模型能直接生成 Excel 文件吗?
本流程让模型返回可校验的 JSON,程序生成真实 XLSX。这样能检查字段类型、金额和空值,避免把模型描述的“文件”当成已交付的可用文件。
总金额对了,就能自动入库吗?
不够。商品、编号、行序或空值仍可能错;还需要逐格核对及符合业务规则的人工确认。
