dsh-tool-invoice:把发票读成可验算、可对账的结构化数字

前言

在 DeepSeek Harness(DSH)里让模型「读一张发票」,常见结果是:号码、金额、税额看起来合理,却没有经过恒等式校验。发票能否入账,往往取决于一条简单关系:金额 + 税额 = 价税合计。若模型只是抄写 OCR 文本里的数字,差一分、标签错位、大写与小写不一致,都很难在对话里被系统性发现。

社区插件 yuehancn/dsh-tool-invoice(SkillHub 分类:模型推理)面向上述场景:在 Harness 里注册三个工具,从发票文本或文件中抽取字段,并附带验算与台账汇总,把「读发票」从猜数字变成可审计步骤。维护者为 yuehancn;README 标明在 dsh 0.2.0-rc.2(preview)上构建与测试,apply(ctx) 插件规范稳定,其它 dsh 版本需自行核对。许可证为 MIT,当前 package 版本为 1.0.0。

这是什么

一句话:DSH 自建工具插件,把增值税发票、英文收据等文本里的关键字段抽成结构化数据,同时检查金额关系、大小写金额一致性与税率档位是否合理。

与「让模型直接读图/读 PDF」相比,本插件强调三条普通正则难以兼顾的能力(README 原文归纳):

  1. 验算而非抄写 —— 每条检查同时给出「应有值」与「读到的值」及差额。
  2. 字段带证据 —— 每个值附带匹配到的标签(如「销售方名称」)与原句,便于人工复核。
  3. 有标签才取值 —— 孤立出现的 ¥1130.00 不猜测是金额、税额还是合计;无标签则报「未识别」。

不配 PDF/图片转文本命令时,只要已有文本(例如配合 OCR 插件或邮件正文),invoice_extract 仍可直接使用。

三个工具

invoice_status

探测本插件能否自行读文件(是否配置了文本提取命令),并列出可识别的全部字段名。适合在对话开始前确认环境与能力边界。

invoice_extract(path | text)

从一份发票提取字段并验算。参数可以是文件路径,也可以是已有文本。

可识别字段包括(节选,完整列表见 README 表格):

字段 含义
code / number 发票代码 / 发票号码
date 开票日期
seller / buyer 销售方 / 购买方
sellerTaxId / buyerTaxId 纳税人识别号
amount / tax / total 不含税金额 / 税额 / 价税合计(小写)
totalInWords 价税合计(大写)
checkCode / remark 校验码 / 备注

返回中的三类检查:

检查 含义
amount + tax == total 基本恒等式(容差可配,默认 ±2 分或 ±0.5%)
小写数字与大写金额 扫描件篡改或 OCR 错误时易在此报警
反推税率 是否落在 0/1/3/5/6/9/13% 等常见档位

另有 faithful 布尔值:全部检查通过且号码、日期、合计均存在时为 true;多数场景只需关注该字段。

invoice_ledger(paths, groupBy, outputName)

多张发票汇总为台账:总计、按字段分组小计,并标记未验算行、无法读取行、重复发票号码。指定 outputName 可将台账写入 JSON。

安装与启用

一行安装(README 原文,支持 desktop 与 web profile):

dsh plugin --profile desktop add github:yuehancn/dsh-tool-invoice

Web 版将 --profile desktop 换成 --profile web。安装完成后重启 dsh 即可在 Harness 中调用上述工具。

可选配置写在 ~/.dsh/profiles/<profile>/cordis.patch.yml,示例:

- id: tool-invoice
  config:
    outputDir: C:/Users/you/Documents/invoice-output
    textCommand: C:/poppler/Library/bin/pdftotext.exe
    textArgs: ["-layout", "{input}", "{output}"]
    toleranceCents: 2
配置项 默认 说明
outputDir invoice-output 中间文本、台账 JSON 等产物目录
timeoutMs 600000 单次调用超时(10 分钟)
textCommand 空 留空则仅接受文本;不配也可使用 invoice_extract(text=...)
textArgs ["-layout","{input}","{output}"] {input} / {output} 占位符
tolerancePercent 0.5 恒等式百分比容差
toleranceCents 2 恒等式分位容差
status / extract / ledger true 可按需关闭单个工具

README 说明:可将 textCommand 指向 dsh-tool-ocr 等插件的 CLI,形成「扫描件 → 文本 → 结构化发票」链路;文本提取命令由用户自行配置,插件不下载、不安装第三方二进制。

典型用法思路

  1. 调用 invoice_status,确认是否已配置 textCommand 以及当前可识别字段。
  2. 若已有 OCR 或 PDF 提取后的纯文本,调用 invoice_extract 传入 text;若有本地文件且已配置转文本命令,传入 path。
  3. 查看返回中的 faithful 与三条验算结果;不通过时根据差额与字段证据人工复核原票。
  4. 报销或月结前,对多份路径调用 invoice_ledger,检查重复号码与未验算行;需要落盘时设置 outputName。

解析器对脏文本做了刻意宽松处理(全角数字与标点折叠、数字串内 OCR 混淆修复、多种日期格式、两栏排版标签与值分行、红字负数、中文大写金额、英文 Stripe 类收据等)。标签须出现在行首,以避免把「Amount Excluding Tax」里的片段误读为税额——README 称此为实测踩坑后的设计,并有回归用例。

适用场景与注意

适合:在 DSH 对话或工作流中,需要把发票/收据文本变成可对账、可汇总的数据;希望恒等式与大小写金额有一致性检查;批量台账并发现重复票号。

运行与安全(README 安全说明):

  • 文本提取通过 spawn(command, argsArray) 调用,不拼接 shell 字符串。
  • 仅读写你指定的输入与 outputDir,不上传、不联网。
  • 插件以当前 dsh 进程权限运行;安装前请自行查看 GitHub 源码 与 MIT 许可证,确认 textCommand 指向的可执行文件可信。

README 提到测试套件共 288 条断言,对着真实 @deepseek-ai/dsh-tools 与子进程运行(非 mock);本地跑测试需按 README 复制 dsh 的 node_modules 后执行 node _test/run-all.mjs,e2e 使用自带替身提取器,无需 poppler 与联网。

SkillHub 目录页与 GitHub 仓库为社区生态信息,与 DeepSeek / 幻方无官方从属关系;星标等元数据以各站点当时展示为准。

结尾

dsh-tool-invoice 把发票读取从「模型猜数字」收敛为「抽字段 + 验算 + 台账」:多数调用只看 faithful,复杂报销场景可依赖 ledger 抓重复与异常行。若你已在 Harness 里处理 OCR 或邮件正文,可先不配 textCommand 验证提取与验算,再按需接上 PDF/OCR 流水线。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye