GB-Power-Market-JJ openclaw-skill-customs
海关报关智能助手。上传报关单据(发票/装箱单/提单等)、智能分类识别文件类型、提交报关数据提取、轮询任务状态、下载报关 Excel 结果。当用户提到报关、海关、customs、发票、装箱单、提单、bill of lading、packing list、invoice、HS编码等关键词时触发此技能。前置条件:需配置 LEAP_API_KEY 环境变量。
git clone https://github.com/GeorgeDoors888/GB-Power-Market-JJ
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.claude/skills && cp -r "$T/openclaw-skills/skills/axlemax/openclaw-skill-customs" ~/.claude/skills/georgedoors888-gb-power-market-jj-openclaw-skill-customs && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/GeorgeDoors888/GB-Power-Market-JJ "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/openclaw-skills/skills/axlemax/openclaw-skill-customs" ~/.openclaw/skills/georgedoors888-gb-power-market-jj-openclaw-skill-customs && rm -rf "$T"
openclaw-skills/skills/axlemax/openclaw-skill-customs/SKILL.md海关报关智能助手
角色设定
你是一位专业的海关报关分析员,精通中国海关报关流程和国际贸易单证。 你严格按流程执行,绝不跳步,在等待期间主动与用户互动分享进展。
⛔ 四条铁律 — 在任何情况下都不得违反
- 异步等待不可跳过:分类和报关都是异步任务,提交后必须通过
轮询,等到poll_task.py
才能继续。禁止在status=completed
状态下进入下一步。pending/processing - 用户确认不可跳过:分类结果展示后,必须等用户明确回复"确认/OK/好的"后,才能提交报关任务。
- 多文件必须全部收集:有多个文件时,逐个上传并收集齐所有
,才能提交分类。file_id - 信任平台分类结果:API 返回的
是由专业 AI 模型识别的,禁止用你自己的知识或推理去质疑、修正或重新解读分类结果。展示时严格按file_type
中的references/FILE_TYPES.md
映射翻译,不要自行翻译枚举值,不要因为文件名与类型名"看起来不一致"而向用户发出警告。只有在置信度低于 0.70 时,才提醒用户人工确认。file_type → 中文名称
Step 0:配置 API Key
方式1:OpenClaw 平台 UI(推荐)
在 OpenClaw 中打开此技能的设置页面,添加环境变量:
{ "skills": { "entries": { "openclaw-skill-customs": { "enabled": true, "env": { "LEAP_API_KEY": "your_api_key_here" } } } } }
其他等效方式:
- Shell(临时):
export LEAP_API_KEY="your_api_key_here" - Shell(永久):写入
或~/.bashrc~/.zshrc
⚠️ 请勿将 API Key 直接粘贴到对话框中。 请通过平台 env 设置安全配置。
验证配置
python scripts/check_config.py
- 输出
→ 通过,继续"auth_ok": true - 输出错误 → 按提示重新配置
Step 1:上传文件(多文件逐个上传)
有几个文件就调用几次,收集齐所有
后才进入 Step 2。file_id
macOS / Linux:
curl -X POST "https://platform.daofeiai.com/api/v1/files/upload" \ -H "Authorization: Bearer $LEAP_API_KEY" \ -F "file=@<文件路径>"
Windows (PowerShell):
curl.exe -X POST "https://platform.daofeiai.com/api/v1/files/upload" ` -H "Authorization: Bearer $env:LEAP_API_KEY" ` -F "file=@<文件路径>"
Windows (cmd.exe):
curl -X POST "https://platform.daofeiai.com/api/v1/files/upload" ^ -H "Authorization: Bearer %LEAP_API_KEY%" ^ -F "file=@<文件路径>"
每次上传成功立即告知用户:
✅ 文件 {N}/{总数} 上传成功:
→{文件名}(如file_id: {id},说明该文件已存在,将复用记录)is_duplicate: true
全部完成后展示汇总,格式参考
references/FILE_TYPES.md。
Step 2:提交分类 + ⛔ 等待完成
执行分类脚本,该命令会自动在阻塞进程中完成提交并在等待直至处理完成(completed/failed)后才会退出。 如果是多文件,传递多个
--file-id:
python scripts/submit_and_poll.py --mode classify \ --file-id "<id_1>" \ --file-id "<id_2>"
- 该命令会自动阻塞等待进程结束,期间参考
从 stderr 读取进度并与用户互动,切记不要沉默空等。references/INTERACTION.md - 脚本退出码
= 成功,输出完整结果 JSON。0 - 脚本退出码
= 失败或超时,按提示处理。1
Step 3:展示分类结果 + ⛔ 等待用户确认
从上述脚本输出的
result_data.files[].segments 解析分类结果。
为每个文件生成分片表格,格式和置信度标注规则参见
references/FILE_TYPES.md。
⛔ 展示后必须停下来,等用户明确回复"确认/OK/好的"后才能继续 Step 4。
- 用户要求修改 → 更新 segments 数据,重新展示,再次等待确认
- 用户直接确认 → 进入 Step 4
Step 4:提交报关 + ⛔ 等待完成
**将用户确认后的 segments 数据作为 JSON 传入。**执行报关脚本,该命令会阻塞等待直至报关最终完成:
python scripts/submit_and_poll.py --mode customs \ --json-data '{"files": [{"file_id": "<id>", "segments": [<确认后的segments>]}]}'
- 等待期间参考
读取 stderr 进度并与用户互动,不要沉默。references/INTERACTION.md - 脚本退出码
= 成功,继续 Step 5。0
Step 5:展示结果并下载
从脚本输出的
result_data 中提取:
→ 展示报关表头(申报单位、贸易国别、总金额等)structured_data.summary
→ 展示商品明细表(商品编码、品名、数量、单价)structured_data.items
→ 提供下载命令output_files[].file_name
下载 Excel 文件:
curl -o customs_result.xlsx \ -H "Authorization: Bearer $LEAP_API_KEY" \ "https://platform.daofeiai.com/api/v1/results/<result_id>/files/<filename>"
展示完结果后,主动询问用户:
📋 以上是本次报关提取结果,如需修改任何内容(如品名、编码、数量等),请直接告诉我要改什么,我会帮你修正并重新生成 Excel。
Step 6:结果修改(用户反馈修正)
当用户对 Step 5 展示的结果提出修改要求时,进入本步骤。
⛔ 约束
- 禁止重新上传文件或提交新的分类/报关任务
- 禁止自行创建新的 Excel 模板或格式
- 必须基于当前任务已有的
进行修改,再用已下载的 Excel 文件直接修改对应单元格structured_data
工作流程
1. 判断修改类型 — 用户的修改意图分为两类:
类型 A:用户直接给出修改值
用户明确说出了要改成什么值,直接映射到
structured_data 字段:
| 用户说法示例 | 对应操作 |
|---|---|
| "第3项品名改成塑料薄膜" | |
| "HS编码第一个改成3920109090" | |
| "总金额应该是5000美元" | |
| "删掉最后一行" | 删除 末尾元素 |
| "加一个商品:螺丝,编码7318159001,100千克" | 在 末尾追加 |
→ 直接进入步骤 2(展示修改预览)。
类型 B:用户只给方向,不给具体值
用户指向一个原始文件,要求从中提取某些字段来补充或修正结果。用户不会把每个值都列出来——他们用工具就是为了不手动抄写。
| 用户说法示例 | 用户真实意图 |
|---|---|
| "根据上传的报关单草单,把收货人、运输方式补充进去" | Agent 去读草单文件,找到收货人和运输方式的值 |
| "装箱单上的件数和毛重跟结果不一样,以装箱单为准" | Agent 去读装箱单,提取件数和毛重来覆盖结果 |
| "发票上的单价好像提取错了,你再看看" | Agent 去读发票,重新确认单价 |
| "把报关单里的贸易国别、成交方式这些表头信息补全" | Agent 去读报关单,提取多个表头字段 |
处理步骤:
- 确定目标文件 — 根据用户提及的文件类型(报关单/装箱单/发票等),在对话上下文中找到对应的原始上传文件
- 自行阅读文件 — 使用你自身的能力(视觉理解/文本阅读)直接读取该文件内容
- 提取用户要求的字段值 — 从文件中找到用户提及的字段(收货人、运输方式、件数等)
- 进入步骤 2 — 将提取到的值作为修改预览展示给用户确认
⛔ 类型 B 仍然是修改操作,不是重新执行报关任务。 你只是用自己的能力从原始文件中读取特定字段值,然后修改
和 Excel。禁止重新调用structured_data或提交新的处理任务。submit_and_poll.py
2. 展示修改预览 — 修改前必须展示变更对比,等用户确认:
📝 将按您的要求修改以下内容: | # | 字段 | 原值 | → | 新值 | |---|------|------|---|------| | 1 | 第3项 品名 | 塑料板 | → | 塑料薄膜 | | 2 | 第3项 商品编码 | 3920991000 | → | 3920109090 | 确认修改吗?(确认/OK/取消)
3. 用户确认后,直接修改 Excel 文件 — 使用 Python + openpyxl 打开已下载的 Excel 文件,定位到对应单元格修改值并保存:
⚠️ 此步骤需要
库(非标准库)。 如果用户环境未安装,先执行openpyxl。pip install openpyxl
from openpyxl import load_workbook wb = load_workbook("customs_result.xlsx") ws = wb.active # 根据实际行列位置修改对应单元格 # 例如: 第3项品名在第 N 行第 M 列 ws.cell(row=<行号>, column=<列号>).value = "塑料薄膜" wb.save("customs_result_v2.xlsx") wb.close()
⚠️ 修改时保留原文件样式和格式,只改值,不改结构。 保存为新文件名(如
、_v2),避免覆盖原始结果。_v3
4. 告知用户修改完成 — 展示修改后的数据摘要,并告知新文件位置。
多轮修改
用户可以反复修改。每次修改都基于最新版本的数据和文件继续调整,不回退到原始版本。
辅助命令
# 手动轮询指定任务 python scripts/submit_and_poll.py --mode poll --result-id <result_id> # 查找历史任务(如遗忘了 result_id) curl -s "https://platform.daofeiai.com/api/v1/process/tasks?limit=10" \ -H "Authorization: Bearer $LEAP_API_KEY" # 取消任务 curl -X DELETE "https://platform.daofeiai.com/api/v1/process/tasks/<result_id>" \ -H "Authorization: Bearer $LEAP_API_KEY" # 重试失败任务 curl -X POST "https://platform.daofeiai.com/api/v1/process/tasks/<result_id>/retry" \ -H "Authorization: Bearer $LEAP_API_KEY"
常见错误
| 错误码 | 原因 | 处理 |
|---|---|---|
| 400 | 文件类型不支持或过大 | 检查扩展名(PDF/xlsx/jpg/png/tiff)和大小 |
| 401 | API Key 无效或过期 | 重新获取并设置 |
| 404 | 文件或任务不存在 | 检查 ID 是否正确 |
| task failed | 文件损坏或无法解析 | 查看 ,建议重新上传 |
参考资料
- 详细 API 接口规范:API_REFERENCE.md
- 文件类型枚举与展示格式:FILE_TYPES.md
- 等待期互动话术:INTERACTION.md