月底报销地狱,我用 WorkBuddy 串起腾讯云 OCR + TTS 三个 Skill 治好了

📅 2026/8/21 21:10:20
月底报销地狱,我用 WorkBuddy 串起腾讯云 OCR + TTS 三个 Skill 治好了
月底报销地狱我用 WorkBuddy 串起腾讯云 OCR TTS 三个 Skill 治好了前言那张对不上的发票上周五下班前财务群里 我「你 7 月那张云服务器的报销合计金额加税额跟价税合计对不上打回了重新填。」我翻出那张电子发票核对确实——我手抄的时候把税额那一栏看串了行。这不是第一次。作为一个后端我每个月要处理十几张发票云资源的、出差住宿的、外包服务的。拍照、打开 Excel、抄发票号、抄税号、抄金额、再对一遍价税合计一张熟练操作也要五到十分钟明细多的能拖到一刻钟。更烦的是两个隐形雷重复报销靠脑子记金额不平肉眼当场发现不了全靠财务事后打回来回一折腾就是半天。这类活儿的特征很清楚规则死板、重复度高、容错率低。它不需要创造力只需要耐心而耐心恰恰是月底最稀缺的东西。这次腾讯云把 OCR、TTS 封装成了标准 Skill一键挂进 WorkBuddy。我想试试能不能在 WorkBuddy 里只说一句「帮我处理这些发票」剩下的识别、风控、出单、播报全自动这篇就是从零搭到跑通的完整复盘所有数据都是真实实测。一、先把要什么想清楚不是「能识别」是「能提交」动手前我先给自己划了条线我要的不是一个 OCR 演示。单纯调个发票识别接口返回一堆字段那只是把「手抄」换成了「看屏幕核对」省不了几分钟。我要的是一个业务闭环发票进来 → 自动抽出结构化字段号码、买卖方、金额、明细自动风控 → 金额勾稽、重复票拦截、超限额驳回、抬头校验直接产出一张可提交的报销单JSON 给系统、Markdown 给人看处理完语音播报「已生成价税合计 xxx 元」不用盯屏幕也知道结果。区别就在这张表里只调 OCR我要的 Agent返回一堆字段输出可提交的报销单不管金额平不平自动勾稽并标风险不管是不是本公司抬头购买方白名单校验不管重复报销同号票直接拦截无反馈语音播报处理结果二、方案三个 Skill 分工一个 Agent 编排最终用到三块能力各司其职环节Skillslug职责发票识别tencentcloud-ocr-vatinvoice增值税/电子发票全字段主力供应商核验tencentcloud-ocr-bizlicense发票销售方 vs 营业执照交叉比对可选加分项语音确认tencentcloud-tts把「处理完成」变成一句能听的反馈编排 规则invoice-reimburse-agent自研OCR 之后的活跑规则引擎、出报销单、判通过/驳回灵魂是自研的编排 Agent ——invoice-reimburse-agent。它不调 API它做「OCR 之后的事」把识别结果丢进规则引擎跑六类业务风控再决定这张票通过、复核还是驳回。为什么一定要有这层因为OCR 识别对了业务不一定对。字段全识别正确但它可能是一张重复提交的票、一张金额对不上的票、一张超公司单笔限额的票。OCR 管「看得清」规则引擎管「该不该报」。这层判断才是 Agent 相对裸接口的价值。三、从「不知道怎么配」开始直接问 WorkBuddy我最欣赏 WorkBuddy 的一点不用先弄懂密钥、OCR 开通、环境变量遇到不会的直接问它。我一上来没查配置教程直接让它做一次不上传发票的最小自检。它检查了 Skill 文件、鉴权变量、运行依赖把问题缩小到两处TENCENTCLOUD_SECRET_ID/KEY没读到、tencentcloud-sdk-python没装。模糊的「Skill 用不了」到这里变成两个能具体处理的问题。我不知道密钥去哪建直接追问「从哪获取 TENCENTCLOUD_SECRET_ID/KEY」。它给了访问管理 CAM 的直达地址、创建步骤、以及「SecretKey 只显示一次」的提醒。我照着进 CAM 建密钥、开通 OCR 服务——这一步涉及账号授权必须本人做WorkBuddy 负责诊断和带路我负责确认。SDK 它直接帮我装进了托管 venv。这段配置过程反而最能体现 WorkBuddy 的作用不知道就问出错就把现状交给它查。用户可以不知道 SecretId 在哪建、OCR 有没有开、Skill 怎么加载环境变量它会根据实际检查结果给下一步并把能执行的本地修复做完。四、造一批「有坑」的发票要检验风控真能拦住问题光有正常票不够得主动造坑。我用 Pillow 画了 4 张脱敏发票主体名、税号、金额全虚构不涉及任何真实信息每张对一个风控场景文件场景预期invoice_1_normal正常票30001803180 平通过invoice_2_mismatch金额不平小写故意写 5800实际应 5300驳回invoice_3_over价税合计 66780超单笔限额 5 万驳回invoice_4_dup与正常票同号码模拟重复报销驳回五、一句话跑通4 张票1 通过 3 拦截真正的重头戏。我让 WorkBuddy 批量处理整个目录它调编排 Agent 一条命令跑完python skills/invoice-reimburse-agent/scripts/reimburse.py\--invoice-dir demo/invoices\--output-dir demo/output\--tts结果非常干脆——正常票通过三张问题票全部被精准拦截各自标出具体风险码[OK] invoice_1_normal.png → approved total3180.0 risks[] [OK] invoice_2_mismatch.png → rejected total5800.0 risks[AMOUNT_MISMATCH] [OK] invoice_3_over.png → rejected total66780.0 risks[OVER_LIMIT] [OK] invoice_4_dup.png → rejected total3180.0 risks[DUPLICATE_INVOICE] count4 approved1 rejected3 error0 total_amount78940.0 wall_clock≈5.36s单张≈1.34s生成的报销单正常票金额勾稽打钩、建议通过不平票直接把 500 元差额算给你看、建议驳回截图位 7补WorkBuddy 里打开某张reimburse_*.md报销单的实际界面可选。六、踩坑实录真实调用远比 demo 曲折这部分我觉得最有价值。demo 数据永远理想一接真实接口坑就来了。坑 1全电发票的金额字段会「错位」最隐蔽也最关键。我造的正常票明明写着合计金额 3000、税额 180但 OCR 返回的「金额信息」里合计金额和合计税额竟然都是 ¥180.00——真正的 3000 被拆到了「明细条目」里价税合计小写 3180 跑到了「其他信息」字段。结果编排脚本抽出来的 total 是None一张好票差点被误判。原因是电子/全电发票的返回结构和传统增值税票不完全一致。SKILL 文档提到会做字段映射但实际落点仍可能有偏差。光看文档不够必须打出真实 JSON 逐字段对照。解法给编排脚本加了个extract_amounts()稳健抽取三层兜底——价税合计从「小写金额→价税合计→其他信息里的小写」依次找不含税合计缺失或明显偏小时用明细最大不含税额兜底两项齐了但价税合计缺就反推。改完正常票恢复 3000/180/3180勾稽正确通过。坑 2TTS 资源包耗尽不能拖垮整条流水线第一次带--tts跑四张票全报[ERR]TTS 失败: UnsupportedOperation.PkgExhausted资源包额度已用尽问题是 TTS 只是最后「锦上添花」的播报它一失败整张报销单被标成 error 作废了——这不合理。报销单该出还得出语音是次要的。解法把 TTS 调用单独包进 try/except失败记一条tts:{ok:false}继续走绝不影响主流程。核心链路和增强链路做故障隔离这是 Agent 编排的一条硬原则。我也把这个错误码补进了 TTS 的 SKILL.md方便下次直接查。坑 3批量顺序要可控重复票检测依赖「先见正常票、再见同号票」的顺序。目录默认按文件名排序我一开始命名让重复票排在了前面导致「正常」那张反被当重复。加1_/2_/3_/4_前缀显式控制顺序后才稳定。小细节批量场景不注意就翻车。七、效果对比从十分钟到一秒多用真实接口跑完数据落到实处指标人工这个 Agent单张处理5–15 分钟≈1.34 秒金额勾稽靠肉眼易漏自动差 1 分钱都拦重复报销靠记忆同号票直接驳回超限额财务事后发现提交前拦截4 张票批量半小时起5.36 秒0 漏检数字之外我更在意风控前置过去这些问题都是财务打回来才知道现在在我点「提交」之前就被揪出来了来回沟通成本直接归零。八、一点思考Skill 是工具节点Agent 是编排台做完这个小东西我对 Skill 和 Agent 的分工有了具体体感。Skill 的价值是「可组合的专家能力」——OCR、TTS 各把一件事做到专业我不用关心底层模型怎么调。Agent 的价值是「业务闭环」——把这些能力按业务逻辑编排并补上机器能力之外的判断该不该报、平不平、重不重。而WorkBuddy 是那个编排台它把我不懂的配置一路带过把失败现状接过去查把专业识别交给腾讯云 Skill自己只做组织和收尾。还有一条我越来越信财务这类场景宁可不自动通过也要把风险明明白白暴露出来。我的状态机只有三态——通过、复核、驳回任何一条 high 级风险都不静默放过。Agent 可以提效但不能替人背锅它要把问题端到我面前而不是替我拍板。下一步想接的企业微信审批流自动提单、费控系统费用科目主数据、火车票/行程单等更多票种。Skill 矩阵里这些能力都现成缺的只是把它们串进闭环的那点编排功夫。如果你也在被某类单据反复消耗不妨试试这个思路——把腾讯云 Skill 当积木让 WorkBuddy 当编排台用一层薄薄的规则引擎兜住业务剩下的交给一句话。