Skip to main content

报关单智能提取(profy-customs)

把合同、发票、提单、装箱单、核注清单这类贸易单据,转成一份字段级可追溯、可机器校验的报关单 JSON。每个字段都带 value / reason / confidence / page——你能看到它从第几页的哪句话来的,而不是拿到一堆无从复核的结果。
这是垂直行业插件,不是通用 OCR。它内置了中国海关的字段定义、代码表、跨字段规则与歧义决策树;通用 OCR 只能给你文字,它给你的是可申报的字段

启用方式

profy-customsuser_selectable: true 的插件——必须在对话的插件面板里手动勾选,不会自动介入。 它的 activation 只有 user_selectable 一项,没有 requires 也没有 conditions:勾选后在任何沙箱模式下都可用,不依赖 Desktop、不依赖浏览器。

快速开始

上传单据后直接说:
或指定模式:

三个工具

customs_ocr — 版面级文字识别

调用自建 OCR 服务(RapidOCR),不在 Agent 进程内跑 OCR。返回每页: bbox 是这个工具存在的理由:报关单大量信息在表格里,光有文字流会丢掉「这个数字属于哪一列」。 服务地址CUSTOMS_OCR_URL 决定,默认 http://profy-ocr:8001,请求打到 /ocr/parse单次超时 120 秒

customs_code_lookup — 海关代码表查询

五张标准代码表: 确定性查表,不让模型猜代码值。精确匹配会同时比对 namealiasesfuzzy=True 走子串匹配,最多返回 10 条(防止工具输出撑爆上下文)。

customs_validate — 格式与跨字段校验

纯计算,无外部调用。返回:
passed 的判定是 P0 与 P1 均为 0——P2/P3 不影响通过。

字段全集(83 个)

表头 56 个 + 表体 27 个。按组路由,处理哪组才加载哪组的规则说明: 食品组与危险品组是条件激活的:HS 编码监管条件含 A/B 才加载食品组,出现 MSDS 且第十四部分有危险品分类才加载危险品组。

校验规则全表

格式校验

日期不只看位数:年份限 1900–2099,月份 1–12,日按 calendar.monthrange 取该年该月真实天数,所以 20250230 会报「日期30超出2025年2月最大天数28」。

跨字段一致性

边界与失败态

customs_validate 不检查必填。空值直接跳过校验并按 P3 通过——它回答的是「填了的对不对」,不是「该填的填了没」。缺字段要靠提取阶段的清点环节发现,别指望校验兜底。
其余边界:
  • 跨字段检查只跑表头。表体逐行只做格式校验,行间关系不检查。
  • customs_code_lookup 模糊搜索最多 10 条,超出静默截断,返回的 count 是截断后的数量。
  • 未知代码表名返回 {"error": "未知代码表 'X'", "available_tables": [...]},不会抛异常。
  • 大票建议拆会话。提取按 Phase 拆分:Phase A 做表头 56 字段,Phase B 做表体;表体 ≥8 行时建议开新会话,否则上下文会被单据原文吃满。

排错

已知缺陷(核对于 2026-08-11)customs_code_lookup 读取代码表的路径是插件目录下的 data/code-tables/,而实际代码表文件位于 skills/customs-extraction/assets/code-tables/。路径不一致时该工具对五张表都会返回 代码表 'X' 为空或文件不存在。规避方式是直接问模型(技能文档里带了常用代码),或在提取流程中依赖技能自带的映射表而非该工具。

结果去哪了

最终 JSON 会由 Core 在对话 complete 时写入 message.metadata.declaration,映射为预览契约 {basic, fields, goods, ...}。这是插件与产品之间的持久化契约——前端报关单预览面读的就是它。

验证你的配置

  1. 勾选插件后,先做一次不带文件的代码查询:「一般贸易的监管方式代码是什么」。若返回 代码表 ... 为空或文件不存在,说明命中了上面的已知缺陷。
  2. 传一份单页发票,说「只提取表头身份信息组」。应该看到 OCR 卡片展开、字段带 pageconfidence
  3. 拿提取结果说「帮我校验」。应看到校验卡片给出 by_severity 统计——这一步返回 passed: true 才算链路通

相关页面

插件总览

28 个内置插件的定位与激活方式

技能

技能如何按需加载,为什么不一次性塞满上下文
核对日期 2026-08-11。来源:services/agent-runtime/src/plugins/builtin/customs/plugin.jsontools/customs_ocr.pytools/customs_code_lookup.pytools/customs_validate.pyskills/customs-extraction/SKILL.md