222 lines
3.3 KiB
Markdown
222 lines
3.3 KiB
Markdown
|
|
# OCR 票据识别架构
|
|||
|
|
|
|||
|
|
## 1. 定位
|
|||
|
|
|
|||
|
|
OCR 票据识别不是一个简单的图片转文字功能。
|
|||
|
|
|
|||
|
|
它在 X-Financial 中承担三件事:
|
|||
|
|
|
|||
|
|
1. 把用户上传的附件变成结构化票据信息。
|
|||
|
|
2. 为规则中心提供可判断的字段。
|
|||
|
|
3. 为 Hermes 和 User Agent 提供可解释的证据。
|
|||
|
|
|
|||
|
|
因此 OCR 应作为独立能力纳入 Capability Registry。
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
capability_type = mcp | document_processor
|
|||
|
|
capability_code = invoice_ocr
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 2. 总体链路
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
附件上传
|
|||
|
|
↓
|
|||
|
|
文件分类
|
|||
|
|
↓
|
|||
|
|
OCR 识别
|
|||
|
|
↓
|
|||
|
|
字段结构化
|
|||
|
|
↓
|
|||
|
|
票据类型归一化
|
|||
|
|
↓
|
|||
|
|
发票验真 MCP
|
|||
|
|
↓
|
|||
|
|
与报销明细匹配
|
|||
|
|
↓
|
|||
|
|
规则中心检查
|
|||
|
|
↓
|
|||
|
|
人工修正
|
|||
|
|
↓
|
|||
|
|
修正结果沉淀
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 3. 阶段拆分
|
|||
|
|
|
|||
|
|
### Phase A:附件接入与文件分类
|
|||
|
|
|
|||
|
|
目标:先识别上传的是什么。
|
|||
|
|
|
|||
|
|
输入:
|
|||
|
|
|
|||
|
|
- 图片。
|
|||
|
|
- PDF。
|
|||
|
|
- Excel。
|
|||
|
|
- Word。
|
|||
|
|
- 压缩包。
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"document_type": "invoice",
|
|||
|
|
"mime_type": "image/png",
|
|||
|
|
"page_count": 1,
|
|||
|
|
"confidence": 0.91
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
分类结果:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
invoice
|
|||
|
|
itinerary
|
|||
|
|
contract
|
|||
|
|
payment_receipt
|
|||
|
|
approval_screenshot
|
|||
|
|
other
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase B:OCR 字段提取
|
|||
|
|
|
|||
|
|
目标:从图片或 PDF 中提取票据字段。
|
|||
|
|
|
|||
|
|
结构:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"invoice_code": "",
|
|||
|
|
"invoice_number": "",
|
|||
|
|
"seller_name": "",
|
|||
|
|
"seller_tax_no": "",
|
|||
|
|
"buyer_name": "",
|
|||
|
|
"buyer_tax_no": "",
|
|||
|
|
"issue_date": "",
|
|||
|
|
"total_amount": 0,
|
|||
|
|
"tax_amount": 0,
|
|||
|
|
"currency": "CNY",
|
|||
|
|
"ocr_confidence": 0.88
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase C:字段归一化
|
|||
|
|
|
|||
|
|
目标:不同 OCR 服务返回不同字段名,必须统一。
|
|||
|
|
|
|||
|
|
示例:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
发票号码 / invoiceNo / invoice_number
|
|||
|
|
-> invoice_number
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
金额统一:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"raw": "¥1,280.00",
|
|||
|
|
"value": 1280.00,
|
|||
|
|
"currency": "CNY"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase D:验真与状态检查
|
|||
|
|
|
|||
|
|
调用发票验真 MCP。
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"verify_status": "verified",
|
|||
|
|
"voided": false,
|
|||
|
|
"red_reversed": false,
|
|||
|
|
"verified_at": ""
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase E:与报销明细匹配
|
|||
|
|
|
|||
|
|
对比:
|
|||
|
|
|
|||
|
|
- 发票金额 vs 报销金额。
|
|||
|
|
- 开票日期 vs 费用日期。
|
|||
|
|
- 销售方 vs 商户。
|
|||
|
|
- 发票类型 vs 费用类型。
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"match_status": "matched",
|
|||
|
|
"mismatch_fields": [],
|
|||
|
|
"match_confidence": 0.94
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Phase F:人工修正与回流
|
|||
|
|
|
|||
|
|
OCR 结果必须允许人工修正。
|
|||
|
|
|
|||
|
|
修正内容进入反馈池:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"field": "invoice_number",
|
|||
|
|
"before": "12345B",
|
|||
|
|
"after": "123456",
|
|||
|
|
"corrected_by": "finance_user",
|
|||
|
|
"corrected_at": ""
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 4. 数据模型建议
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
document_assets
|
|||
|
|
document_ocr_results
|
|||
|
|
invoice_structured_records
|
|||
|
|
invoice_verification_records
|
|||
|
|
document_corrections
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 5. 与规则中心关系
|
|||
|
|
|
|||
|
|
OCR 输出供规则使用:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
重复报销识别规则
|
|||
|
|
作废发票检查规则
|
|||
|
|
发票抬头异常规则
|
|||
|
|
附件完整性规则
|
|||
|
|
金额不一致规则
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 6. 与 Agent 关系
|
|||
|
|
|
|||
|
|
User Agent 使用 OCR:
|
|||
|
|
|
|||
|
|
- 解释发票为什么被拦截。
|
|||
|
|
- 帮用户补充发票信息。
|
|||
|
|
- 提醒上传清晰附件。
|
|||
|
|
|
|||
|
|
Hermes 使用 OCR:
|
|||
|
|
|
|||
|
|
- 夜间批量验真。
|
|||
|
|
- 扫描重复票据。
|
|||
|
|
- 统计发票异常趋势。
|
|||
|
|
|
|||
|
|
## 7. 开发阶段建议
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Step 1: 附件上传和文件分类
|
|||
|
|
Step 2: 接入 OCR MCP
|
|||
|
|
Step 3: 结构化字段归一化
|
|||
|
|
Step 4: 人工修正界面
|
|||
|
|
Step 5: 发票验真 MCP
|
|||
|
|
Step 6: 与报销明细匹配
|
|||
|
|
Step 7: 规则中心接入
|
|||
|
|
Step 8: Hermes 夜间批量 OCR 巡检
|
|||
|
|
```
|
|||
|
|
|