Install
openclaw skills install openclaw-skill-customs海关报关单据处理助手。上传报关单据(发票、装箱单、提单等),AI 自动分类识别文件类型, 提取报关结构化数据,生成标准报关 Excel。当用户提到报关、海关、customs declaration、 invoice、packing list、bill of lading、HS 编码等关键词时,使用此技能。
openclaw skills install openclaw-skill-customs严格按 Step 0 → Step 6 顺序执行,绝不跳步。在等待期间主动与用户互动分享进展。
submit_and_poll.py 轮询,等到 status=completed 才能继续。禁止在 pending/processing 状态下进入下一步。file_type 是由专业 AI 模型识别的,禁止用你自己的知识或推理去质疑、修正或重新解读分类结果。展示时严格按 references/FILE_TYPES.md 中的 file_type → 中文名称 映射翻译,不要自行翻译枚举值,不要因为文件名与类型名"看起来不一致"而向用户发出警告。只有在置信度低于 0.70 时,才提醒用户人工确认。在 OpenClaw 中打开此技能的设置页面,添加环境变量:
{
"skills": {
"entries": {
"openclaw-skill-customs": {
"enabled": true,
"env": {
"LEAP_API_KEY": "your_api_key_here"
}
}
}
}
}
其他等效方式:
export LEAP_API_KEY="your_api_key_here"~/.bashrc 或 ~/.zshrc⚠️ 请勿将 API Key 直接粘贴到对话框中。 请通过平台 env 设置安全配置。
python scripts/check_config.py
"auth_ok": true → 通过,继续当用户提到报关意图或发送第一个文件时,立即创建本次任务的工作目录:
mkdir -p tasks/customs_<YYYYMMDD_HHMMSS>/raw
以当前时间戳命名(如
customs_20260408_231500)。后续所有步骤的中间文件(classify_result.json、customs_payload.json 等)都存放在该任务目录下。
每当用户发送一个文件,将其保存到任务目录的 raw/ 子目录中:
cp <平台提供的文件路径> tasks/customs_<id>/raw/
保存后立即确认:
✅ 已收到
{文件名}(工作区已有 {N} 个文件) 📎 请继续发送下一个文件,或说「开始处理」进入分类。
⛔ 在用户明确发出处理意图之前,禁止进入 Step 2。 每次收到文件都只做保存和确认这两件事。
用户说"开始处理"/"开始"/"就这些"后:
raw/ 目录内所有文件(含文件大小),展示汇总表python scripts/file_transfer.py --mode upload \
--file-path "tasks/customs_<id>/raw/file1.pdf" \
--file-path "tasks/customs_<id>/raw/file2.xlsx"
file_id,展示上传结果汇总,进入 Step 2执行分类脚本,该命令会阻塞等待直至任务处理完成(completed/failed)后才返回。
如果是多文件,传递多个 --file-id:
python scripts/submit_and_poll.py --mode classify \
--file-id "<id_1>" \
--file-id "<id_2>" \
--save-to tasks/customs_<id>/classify_result.json
--save-to tasks/customs_<id>/classify_result.json:任务完成后自动将完整结果保存到任务目录,Step 3~4 均从此文件读取数据。references/INTERACTION.md 的话术与用户互动,切记不要沉默空等。
0 = 成功,输出完整结果 JSON。1 = 失败或超时,按提示处理。从任务目录的 classify_result.json 中的 result_data.files[].segments 解析分类结果。
为每个文件生成分片表格,格式和置信度标注规则参见 references/FILE_TYPES.md。
⛔ 展示后必须停下来,等用户明确回复"确认/OK/好的"后才能继续 Step 4。
classify_result.json 中对应 segment 的 file_type 字段,重新展示表格,再次等待确认⚠️ 修改任务目录下的
classify_result.json时仅更改file_type字段,不得展开、删除或省略其他字段(type、confidence、pages等必须完整保留)。
先一键生成 customs payload,再提交报关任务。
# 第一步:从 classify_result.json 自动组装完整 segments,生成 customs_payload.json
python scripts/build_payload.py --input tasks/customs_<id>/classify_result.json \
--output tasks/customs_<id>/customs_payload.json
# 第二步:提交报关任务,阻塞等待完成
python scripts/submit_and_poll.py --mode customs \
--json-file tasks/customs_<id>/customs_payload.json \
--save-to tasks/customs_<id>/customs_result.json
references/INTERACTION.md 的话术与用户互动,不要沉默。
0 = 成功,继续 Step 5。从任务目录的 customs_result.json 中提取:
result_data.structured_data.summary → 展示报关表头(申报单位、贸易国别、总金额等)result_data.structured_data.items → 展示商品明细表(商品编码、品名、数量、单价)result_data.output_files[].file_name → 提供下载命令下载 Excel 文件(保存到任务目录):
python scripts/file_transfer.py --mode download --result-id <result_id> --filename <filename> \
--output tasks/customs_<id>/customs_result.xlsx
展示完结果后,立即执行 Step 5.5 合规性检查(不等用户指令)。
展示结果后,在询问用户是否修改之前,自动执行合规检查。
structured_dataCOMPLIANCE_RULES.md 中规定的输出格式生成报告合规报告输出完毕后,主动询问用户:
📋 如需修改任何内容(如品名、编码、数量等),请直接告诉我要改什么。或回复「确认」继续。
当用户对 Step 5 展示的结果提出修改要求时,参照 MODIFICATION.md 执行。
核心约束:禁止重新上传文件或提交新任务,必须基于已有 structured_data 和已下载的 Excel 文件直接修改单元格。修改前必须展示变更对比并等待用户确认。
修改字段时,Agent 应打开 FIELD_GUIDE.md 查阅对应字段的规范,在修改预览中附带合规提示(详见 MODIFICATION.md)。
# 手动轮询指定任务
python scripts/submit_and_poll.py --mode poll --result-id <result_id>
# 查找历史任务(如遗忘了 result_id)
python scripts/submit_and_poll.py --mode list-tasks --limit 10
# 取消任务
python scripts/submit_and_poll.py --mode cancel --result-id <result_id>
# 重试失败任务
python scripts/submit_and_poll.py --mode retry --result-id <result_id>
| 错误码 | 原因 | 处理 |
|---|---|---|
| 400 | 文件类型不支持或过大 | 检查扩展名(PDF/xlsx/jpg/png/tiff)和大小 |
| 401 | API Key 无效或过期 | 重新获取并设置 LEAP_API_KEY |
| 404 | 文件或任务不存在 | 检查 ID 是否正确 |
| task failed | 文件损坏或无法解析 | 查看 error_message,建议重新上传 |