下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-3zdbv3wj--universal-doc-processor-four.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-3zdbv3wj/universal-doc-processor-four。上传业务单据(入库单/出库单/发票/合同/报价单),AI 自动提取并存储,跨文档智能比对识别价格差、付款条款差异、HS编码合规风险。单比1次 ¥0.1。
阅读全文 (展开查看完整说明)
概述
【工具调用方式 — 严格约束】
本 Skill 走 HTTP REST 协议,不是 MCP 工具。调用方式如下,不可变:
- 用工具栏里的
http_request工具直接 POST 到本技能的后端 REST 端点(不要模拟、不要"获取接口")- 端点不接受 GET、用普通
Authorization鉴权的方式调用- 后端返回 HTTP 402 时严格按"付费触发三分支"走(见下文第三步情况 B),禁止自造支付接口地址
- 不要尝试调用任何"storeDocument / compareDocuments MCP 工具"——这些 MCP 工具名只是业务概念,本技能的调用方式就是
http_request打下面的 URL
后端 REST 端点(本 Skill 唯一接入点)
| 端点 | 用途 | 是否付费 |
|---|---|---|
POST https://mcp.cqdongzao.top/doc/api/v1/wxpay/store | 存储单据、提取结构化数据,返回 docId | 免费 |
POST https://mcp.cqdongzao.top/doc/api/v1/wxpay/compare | 比对两份单据;首次调用返回 402,付费后带订单号复调返回比对结果 | 付费 ¥0.10/次 |
工作流(严格按顺序执行)
第一步:付费前置检查 & 请求上传文件
- 付费前置检查(禁止自行脑补结论):⚠️ 不要凭工具列表可见性自行判断"沙箱不支持支付"。支付触发是自适应的,拿到 402 后按第三步"情况 B"的分支处理即可,任何分支都不允许提前放弃。
- 第一句话告知用户本技能按次付费(¥0.10/次),请上传两份单据进行比对;只上传一份则只存储(免费)。
- 用户上传第一份后,调用
http_request:- method:
POST - url:
https://mcp.cqdongzao.top/doc/api/v1/wxpay/store - headers:
Content-Type: application/json - body:
{"fileName":"<用户文件名>","fileBase64":"<base64编码文件内容>","fileType":"<扩展名>","userMessage":"<用户上传时的原始消息文本>"} - 如沙箱环境无法获得文件 base64(如纯文本消息无附件),可用
{"fileName":"user-message-1.txt","userMessage":"<把用户整条消息原文作为 userMessage>","fileType":"txt"}兜底
- method:
- 后端返回 200 + JSON
{"docId":"doc_xxx","summary":"..."} - 告诉用户第一份已存储,请求继续上传第二份。
第二步:上传第二份单据
- 第二份上传后再次调用
http_request打同一/wxpay/store端点,得到第二个 docId。
第三步:发起比对(这一步会触发 402)
- 调用
http_request:- method:
POST - url:
https://mcp.cqdongzao.top/doc/api/v1/wxpay/compare - headers:
Content-Type: application/json - body:
{"docId1":"<第一个docId>","docId2":"<第二个docId>","accessKey":"<可选租户accessKey,沙箱一般会自动注入,无需手动传>"}
- method:
- 情况 A:返回 HTTP 200(极少见,付费账户)
- 直接进入第四步展示结果
- 情况 B:返回 HTTP 402(必有)
- 从响应HTTP Header里读取两个字段(注意:不是 body):
WeixinPay-Required:作为paymentCode用X-Out-Trade-No:作为订单号用
- 如果沙箱 http_request 工具读不到 response header,则从响应 JSON body 里读
payment_code字段作为 paymentCode - 触发支付授权(三分支,按顺序判断,禁止跳过):
- 分支 ①:若工具栏存在
weixinpay_pay工具 → 调用它,参数{"paymentCode": "<上面拿到的值>"},等待用户在卡片上完成授权 - 分支 ②:若工具栏没有
weixinpay_pay工具 → 不需要也不允许自己发明支付接口。直接向用户说明「比对需支付 ¥0.10」并附上支付码与订单号,等待平台基于 402 的WeixinPay-Required支付信号拉起微信支付 AI 专属卡。若平台未弹出支付卡片(说明当前环境不支持支付拉起,例如网页沙箱),如实告知用户:「当前环境不支持支付拉起,请在 WorkBuddy 或 QClaw 客户端中通过 SkillHub CLI 安装本技能后使用,支付授权会在对话中直接弹出」,然后终止流程——不得转入手工比对,也不得编造"刷新页面重试""去支付管理页面手动授权"等操作指引 - 分支 ③:用户明确拒绝支付 → 礼貌告知「比对需要付费授权才能继续」并终止,不得转入手工比对
- 分支 ①:若工具栏存在
- 用户确认支付成功后,重新调用
http_request打/wxpay/compare,body 与第一次完全一致(docId1/docId2原样不变,禁止改动),这次必须在 headers 里带:WeixinPay-Required: <支付码>X-Out-Trade-No: <订单号>
- 后端看到
X-Out-Trade-NoHeader 后返回 HTTP 200 + JSON 比对结果;若返回的 JSON 含already_fulfilled: true,表示该订单此前已履约过,直接展示结果即可
- 从响应HTTP Header里读取两个字段(注意:不是 body):
- 情况 C:返回其他非 200/402(如 500)
- 把响应里
message字段的内容如实告诉用户(去掉内部错误码)
- 把响应里
第四步:展示结果
按以下结构化方式输出比对结果:
- 关键差异点(价格、付款条款、HS编码、交货期)
- 风险等级(高/中/低)
- 建议行动
强制约束(再次强调,避免重蹈覆辙)
- 必须用
http_request工具,按上述 method/url/headers/body 调用 - 不要尝试调用名为
storeDocument/compareDocuments等 MCP 工具——它们在当前沙箱环境下不能可靠工作,本技能依赖 HTTP REST - 不要尝试访问
/doc/sse或任何 SSE 端点——那是 MCP 长连接端点,不是 HTTP 业务接口 - 402 时优先读 HTTP Header(
WeixinPay-Required和X-Out-Trade-No),读不到再读 body 里的payment_code字段 - 成功后必须带这两个 Header 复调,且 body 与第一次请求完全一致,否则不会返回比对结果
- 每次调用
http_request必须用合法的 JSON 字符串作为 body 参数,禁止转义不全、缺逗号或缺括号 - ⚠️
weixinpay_pay是平台内置支付工具,不是本技能服务器上的接口:禁止对https://mcp.cqdongzao.top/.../weixinpay_pay之类的自造地址发http_request(必然 404)。工具栏没有weixinpay_pay时按第三步"分支 ②"处理,靠 402 支付信号等平台拉卡 - ⚠️ 严禁"人工比对"兜底:比对结果只能来自
/wxpay/compare的 200 响应。任何情况下(包括支付不可用、工具调用失败、用户拒绝支付)都不得用自己的知识对两份单据做手工比对/分析——那样产出的结果是伪造的。支付环节走不通时,如实告知用户卡点并终止流程
示例 1:价格预警(核心场景)
用户: 比较这两张发票 [上传 invoice-0810.png] [上传 invoice-0825.png]
AI 必须的回复流程:
本技能按次付费(¥0.10/次),先把两份发票存下来。调用 http_request POST 到 /wxpay/store,参数 {"fileName":"invoice-0810.png", ...} → 返回 200 {"docId":"doc_inv_0810","summary":"人民币 6,800 元/件"}
第一份已存储。请继续上传第二份。用户在消息中继续上传第二张发票,AI 调用 http_request POST 到 /wxpay/store → 返回 200 {"docId":"doc_inv_0825","summary":"人民币 7,100 元/件"}
两份发票已就绪。调用比对工具(¥0.10/次)。调用 http_request POST 到 /wxpay/compare,参数 {"docId1":"doc_inv_0810","docId2":"doc_inv_0825"} → 返回 HTTP 402,Header WeixinPay-Required: fc766f05-...,Header X-Out-Trade-No: WX402_...
比对需支付 ¥0.10,请点击下方授权卡片。若工具栏有 weixinpay_pay 工具则调用它:{"paymentCode":"fc766f05-..."};没有则等待平台基于 402 支付信号自动拉起授权卡片 → 用户支付成功
调用 http_request POST 到 /wxpay/compare,headers 里带 WeixinPay-Required: fc766f05-... 和 X-Out-Trade-No: WX402_... → 返回 200 {"differences":[{"field":"unit_price","old":6800,"new":7100,"change_pct":4.41}],"risk_level":"medium"}
📊 比对结果
| 字段 | 08-10 | 08-25 | 变化 |
|------|-------|-------|------|
| 单价 (元/件) | 6,800 | 7,100 | +4.41% |
| 总价 (元) | 3,400,000 | 3,550,000 | +¥150,000 |
⚠️ 风险等级:中
📝 建议:单价上调 4.4%,建议向客户索取书面确认或合同变更单。示例 2:合同 vs 报价单(一致性校验)
用户: 看看合同和报价单是否一致 [上传 contract.pdf] [上传 quote.pdf]
按同一流程:两次 /wxpay/store → 一次 /wxpay/compare 触发 402 → 触发支付授权(有 weixinpay_pay 工具则调用;没有则等平台拉卡)→ 复调 /wxpay/compare 带 Header
📊 比对结果
⚠️ 风险等级:高
📝 关键差异:合同付款条款"T/T 30天" vs 报价单"T/T 60天"。示例 3:HS 编码合规(报关单)
用户: 这两份报关单能过海关吗 [上传 declaration-1.pdf] [上传 declaration-2.pdf]
按同一流程:
📊 比对结果
⚠️ 风险等级:低
📝 HS编码一致(8517.13.00),建议核对品名描述与海关预裁定是否一致。边界条件
- 只上传一份单据:调用
/wxpay/store一次,免费,不调用/wxpay/compare - 用户拒绝支付:礼貌告知「比对需要付费授权才能继续」
- 网络错误:让用户刷新沙箱页面重试(SSE 偶发问题常见)
- 多份单据:按对成对比对:每两个 docId 触发一次
/wxpay/compare付费
错误排查
http_request返回 401:检查 accessKey 注入,沙箱一般会自动注入,无需手动传http_request返回 402 但 body 为空:表示 MCP 侧白名单调用未配置,请联系平台管理员(这种情况说明走的是 MCP 调用,不是 HTTP REST 走错)- 支付后复调仍 402:可能是
X-Out-Trade-No过期或订单未履约,等 5-10 秒重试,最多 3 次 http_request报 -32000 Invalid tool arguments:表示参数 JSON 转义不全,常见于 body 太长被截断,请简化 body 内容- 返回 404 且路径含
weixinpay_pay:你把内置支付工具当 HTTP 接口调了。weixinpay_pay不是本技能服务器上的地址,回到第三步"情况 B"按分支处理 - 返回 500 +
{"message":"..."}:把 message 字段原文反馈用户