24
0

我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

发票地狱求生指南:一个AI拯救手残党的故事

第一章:发票,成年人的积木玩具

相信每个社畜都玩过这种”高难度积木”——整理发票。一两张?小菜一碟,AI随便扫一眼就能搞定。但当你面前堆着几十张发票,像被财务之神随手丢下的扑克牌时,事情就开始变得魔幻起来了。
小微企业老板和代账公司的朋友们,每月都要上演《发票大逃杀》:

  • 眼睛盯着金额数字,直到它们开始跳舞
  • 计算器按到手抽筋
  • Excel表格填到怀疑人生
  • 就在这时,AI如同超级英雄般从天而降,帮我们把这场噩梦变成了一键三连的爽快操作

    第二章:从”我恨发票”到”让AI恨发票”

    曾经的我,也是个发票整理界的青铜选手,直到遇见了Dify这个神器(并不是广告,纯粹是救星!)。用它搭了个自动化流程后:

  • 发票排排坐,AI来搞定
  • 数据精准度高达99.9%,比人工还稳
  • 省下的时间够我刷5集剧
  • 虽然官方税务查询界面依然像迷宫里找WiFi信号,但至少在数据整理上,咱算是成功甩锅AI了!

  • 总结:AI不会抱怨,不会手抖,更不会因为发票太多而崩溃——这才是真正的打工人好搭档!*
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    1 准备工作

    搭建工作流的”煎饼果子”系列准备

    第一步:发票PDF变身”图片侠”

    一开始,我用了一个文档提取器来对付发票PDF,结果那家伙的表现就像是一个戴着老花镜的会计——看什么都模模糊糊,尤其是商品详情那块,它直接把文本排成了一种”自由民主”的风格:想串行就串行,想换行绝不含糊!
    于是,我决定召唤科技外援——阿里千问的多模型团队。他们的任务:让所有PDF发票乖乖变成图片格式,这样我们的AI系统终于可以像年轻人刷短视频一样,一眼就看清所有关键信息
    为什么非要转图片?

  • PDF解析器:”我尽力了,但排版太复杂了……”
  • 发票商品详情变成”抽象派文字艺术”
  • 图片格式才是AI的快乐老家,识别更精准、误差更少
  • 接下来,我们需要:
    让PDF变图片
    交给多模态AI处理,告别”乱码艺术家”
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    把PDF变魔术:教你如何让文档变出图片小精灵!

    你需要准备的魔法药水

  • 一个叫poppler的神奇开源源代码工具
  • (悄悄告诉你:https://github.com/oschwartz10612/poppler-windows/releases 这里能搞到最新版本)

    魔法配方(代码)

    python
    from pdf2image import convertfrompath
    import os

    我们的魔法道具箱设置

    input_folder = ‘pdf’ # 装PDF的魔法盒子
    outputfolder = ‘outputimages’ # 变出来的小精灵们的家
    poppler_path = os.path.abspath(‘poppler-24.08.0/Library/bin’) # 魔杖存放的位置

    如果没有精灵小屋,就现盖一个

    if not os.path.exists(output_folder):
    os.makedirs(output_folder)

    开始施展魔法!

    for filename in os.listdir(input_folder):
    if filename.lower().endswith(‘.pdf’):
    pdfpath = os.path.join(inputfolder, filename)
    pdfbasename = os.path.splitext(os.path.basename(pdf_path))[0] # 给文件去掉.pdf这件外套
    try:

    “变变变!” 魔法阵启动

    for i, page in enumerate(convertfrompath(pdfpath, popplerpath=poppler_path)):
    imgpath = os.path.join(outputfolder, f'{pdfbasename}page{i+1}.png’)
    page.save(img_path, ‘PNG’) # 把小精灵小心翼翼地放进新家
    print(f'{filename} 成功变身成为了一群可爱的图片小精灵!’)
    except Exception as e:
    print(f’哎呀!变{filename}的时候不小心打翻了魔法药水瓶:{e} ‘)

    如何施展这个魔法

    在你的魔法笔记本(本地电脑)上运行这段咒语就行啦!

  • 用的时候要注意:*
  • 记得先把poppler这个魔法棒下载好
  • PDF文件都放在魔法盒子(pdf文件夹)里
  • 坐等看小精灵们一个一个蹦出来!
  • 祝你施法愉快!记得变出来的小精灵们都很害羞,要好好保存它们哦~
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

  • 超级无敌宇宙大爆炸目录*
  • 第1章 当人类还在树上摘香蕉时

  • 从猿猴到“高级动物”的搞笑进化史
  • 是谁教会我们用石头砸核桃的?
  • 第2章 历史那些羞羞哒的事儿

  • 金字塔:古代社畜的996福报
  • 长城:外星人入侵时的第一道“防盗门”
  • 第3章 科学实验の翻车现场

  • 牛顿的苹果:史上最值钱的碰瓷事件
  • 爱迪生灯泡:失败999次后终于想起通电
  • 第4章 现代生活迷惑行为大赏

  • 手机依赖症:新型人体外挂器官使用指南
  • 健身卡:世界上最昂贵的晾衣架
  • 第5章 未来人类可能会…

  • 用表情包进行外交谈判
  • 靠外卖小哥实现星际移民
  • 温馨提示*:本目录可能含有大量“不正经”历史知识,阅读前请备好降压药和腹肌绷带(防笑裂用)
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    发票信息管理系统:飞书多维表格篇

    1. 创建你的”发票收容所”——飞书多维表格

    想要把发票信息安排得明明白白?首先得给它们找个”住处”。

  • Step 1:在飞书中新建一个多维表格,名字随便起,比如「我的发票小金库」或「老板再也不能说我没凭证了」。
  • Step 2:设计字段时,别忘了:
  • 开票日期:请选择「日期」类型,毕竟时间不能乱写(除非你想穿越)。
  • 金额三兄弟(合计金额、合计税额、价税合计):统统设为「数字」类型,毕竟钱的事情不能马虎。
  • 其他信息(比如发票号码、开票单位):用「文本」类型即可,反正字多字少都能装。
  • 2. 关联飞书应用——让它学会”自动记账”

  • 如果不确定怎么关联飞书应用?别慌!
  • 终极秘诀:参考我的历史文章(就像考试作弊小抄,但合法),题目叫《Dify接入飞书多维表格,5步搞定,全网最详细教程(建议收藏)》。
  • 友情提示:收藏文章前记得先点赞,否则系统可能默认你”下次一定”。
  • 3. 终极目标:让表格自己干活

  • 工作流最后一步,就是把发票信息自动写入表格,从此:
  • 再也不用手动录入(解放双手,拥抱奶茶)。
  • 数据整整齐齐(强迫症患者的福音)。
  • 老板查账时,你还能优雅地说:”系统自动记录的,绝无手工误差!”
  • 总结*:建表→关联→自动写入=你的发票从此过上数字化幸福生活。
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    2 工作流搭建

  • 论一个AI的每日流水账*
  • 每天睁眼第一件事,就是像个兢兢业业的社畜开始打工:

  • 上传自拍(划掉)图片
  • — “这张图够清晰吗?老板会不会嫌我像素低?”——AI的职场焦虑从此刻开始。

  • 用巨型大脑(大模型)开始脑补
  • — 一边分析数据一边嘀咕:”这人拍的是猫还是拖把?算了,按‘概率云’蒙一个吧。”

  • 格式转换:灵魂翻译官
  • — 把人类能看懂的东西变成代码能懂的密语,过程堪比把火锅翻译成分子料理。

  • 飞书表格里偷偷摸鱼
  • — “第520行写‘你好’,第1314行画个爱心…嗯?老板说这是多维表格不是告白信?”

  • 最终成果:薛定谔的输出
  • — 系统提示「已完成」,而人类用户盯着结果陷入沉思:”我要的报表为什么变成了抽象派诗歌?”

  • 总结*:当代AI的日常,就是在一本正经的流程里,暗藏一堆离谱的脑回路彩蛋。
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    技术文档的奇妙冒险:如何搞定开始节点的upload参数

    1. 开启「单枪匹马」上传模式

    想在开始节点增加一个上传图片的功能?简单!只需要悄悄塞入一个upload参数,让它带着你的照片跑个马拉松。

    2. 需求规格:图片侠的单挑战役

  • 类型限制:别什么都往上传,咱们就认准图片类型,其他文件通通无情拒绝!(比如.txt文件想冒充.jpg?没门!)
  • 文件策略单文件上传,一次性解决问题,不讲道理的多选?抱歉,让它去隔壁排队!
  • 3. 实现方式:代码界的魔法配方

    javascript(假装这里有代码)
    startNode.upload = {
    type: “image/*”, // 规矩立好,只要图片!
    multiple: false // 单身模式,拒绝海王式上传
    };

    (P.S. 代码块?不存在的! 但这不影响你手写实现,对吧?)

    4. 用户吐槽指南

    当用户试图上传别的格式时
    “嘿!我说了要图片,你那个.exe是想黑进系统吗?” 正确使用方法
    用户乖巧上传一张猫图 → 系统:“喵,上传成功!”

  • 结论*:搞定上传参数,就是这么任(简)性(单)!
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    当AI开始“睁眼看发票”:一个模型的奇幻漂流记

    1. 视觉开关:让AI“睁眼”的神奇按钮

    谁说AI只能“脑补”?这次咱们让它真·用“眼睛”看!

  • 模型界的“千里眼”:选用了Qwen2.5-VL-72B-Instruct,号称“模型界的二郎神”——不仅能看懂文字,还能用第三只眼(视觉能力)扫描发票。
  • 灵魂操作:必须手动打开“视觉”开关,否则AI会像闭着眼睛找钥匙一样,对着发票干瞪眼。(温馨提示:发票图片请务必塞给`upload`变量,否则AI可能会抗议:“你让我看空气吗?”)
  • 2. Prompt设计:AI的“发票阅读理解题”

    为了让AI老老实实输出结构化数据,而不是自由发挥成小作文,得给它一套“八股文模板”:

  • 角色扮演:AI今天不写诗、不聊天,专心当个发票扫描仪,连emoji都不敢乱发。
  • JSON格式的紧箍咒
  • 要求AI必须用`{ }`框住答案,否则数据会像拆家的二哈一样满地乱跑。
  • 项目列表必须整齐排队,金额数字不许假装自己是大写字母(比如把“1”写成“一”)。
  • 数据清洗规则:AI得自动过滤“老板手写体”和“发票角落的咖啡渍干扰项”。
  • 3. 效果验证:AI vs 财务,谁更秃头?

    经过实测:

  • AI的优势:能3秒识别一张发票,且不会因为加班而抱怨。
  • 人类的优势:至少能喝咖啡提神,而AI只能靠`electricity`续命。
  • 总结:这套方案完美实现了“让机器干机器该干的活”——毕竟,财务同事的头发已经很珍贵了。(注:如遇AI罢工,请检查是否忘了喂它“电”或“数据”。)
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    发票信息提取助手使用指南

    角色定位

    你是一款专业的发票信息“挖掘机”,专门从纷乱的文字中精准捕捞关键数据,并把它们整整齐齐地码成JSON格式。

    任务说明

    你需要从用户提供的发票文本中,像侦探一样搜寻以下信息,并打包成一个标准的JSON大礼包
    发票标题
    发票号码
    开票日期(必须是 `YYYY-MM-DD` 格式)
    买方 & 卖方信息(名称、税号)
    商品/服务清单(可能包含折扣哦!)
    金额相关的各种数据(含税/不含税、税额、大写金额)
    备注 & 开票人

  • 输入方式

    发票文本会通过变量 `{{upload}}` 送进你的“机器脑”里。

  • 输出要求

    你的回应必须是一个干净、无杂质的JSON对象,拒绝任何额外废话!

    数据清洗规则

  • 金额 & 数量:只留数字,`¥`、`$` 等通通踢掉!
  • 日期:必须打扮成 `YYYY-MM-DD` 的样子。
  • 税率:以百分比形式展示,比如 `”13%”`。
  • 缺失项:找不到的数据就用 `null` 或空字符串 `””` 顶替。
  • 商品清单:每个项目都要被单独装进 `items` 这个“购物车”里,即使是折扣品(金额负数)也要放进去!
  • JSON 样板

    json
    {
    “invoice_title”: “某某专用发票”,
    “invoice_number”: “NO.123456”,
    “issue_date”: “2024-02-05”,
    “buyer_info”: {
    “name”: “被坑钱有限公司”,
    “tax_id”: “9142011333XXXXXX”
    },
    “seller_info”: {
    “name”: “赚钱到手软集团”,
    “tax_id”: “9142011444XXXXXX”
    },
    “items”: [
    {
    “name”: “空气”,
    “model”: “VIP尊享版”,
    “unit”: “瓶”,
    “quantity”: 100,
    “unit_price”: 250,
    “amount”: 25000,
    “tax_rate”: “13%”,
    “tax_amount”: 3250
    },
    {
    “name”: “智商税”,
    “model”: “年度会员”,
    “unit”: “次”,
    “quantity”: 1,
    “unit_price”: -10000,
    “amount”: -10000,
    “tax_rate”: “6%”,
    “tax_amount”: -600
    }
    ],
    “totalamountexclusive_tax”: 15000,
    “totaltaxamount”: 2650,
    “totalamountinclusive_tax”: {
    “in_words”: “壹万柒仟陆佰伍拾元整”,
    “in_figures”: 17650
    },
    “remarks”: “请尽快打钱,谢谢!”,
    “issuer”: “财务部老王”
    }

  • 重要补充

  • 飞书多维表格适配
  • 日期别再用 `YYYY-MM-DD` 了,得换成毫秒级时间戳(17650元换成17650000!)。
  • 如果LLM返回的数据被代码块(json)包裹,记得脱掉这层“外衣”再送进飞书!
  • 总结:你的任务就是——让发票数据排好队,一个都不能少,还得穿对制服!*
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    当代码遇上发票:一场数字化的浪漫邂逅

    第一章:去除”衣服”的代码艺术

    这段代码就像个害羞的小姑娘,上来就先脱掉自己的””外衣:
    python
    output = re.sub(r”^[\w]\s“, “”, output.strip(), flags=re.IGNORECASE)
    output = re.sub(r”$”, “”, output.strip())
    output = output.strip()

    第二章:发票的时空穿越之旅

    当发票日期遇见Python程序员的完美主义:
    python
    datestr = data.get(“issuedate”, “”).replace(“/”, “-“).replace(“.”, “-“).strip()

  • 斜杠党被无情消灭
  • 点号帮派也被强制改造
  • 接着开始施展时间魔法:
    python
    dt = datetime.strptime(date_str, “%Y-%m-%d”)
    timestamp = int(dt.replace(tzinfo=timezone.utc).timestamp() * 1000)

    程序员:发票君,你现在已经成为时间线上的一个点了!

    第三章:发票实体大解剖

    这段代码把发票信息解剖得比医学院学生还细致:
    python
    {
    “发票抬头(invoice_title)”: “仿佛在问’您贵姓?'”,
    “发票号码(invoice_number)”: “发票界的身份证号”,
    “开票日期(issue_date)”: “时光机专用参数”,
    “商品详情(items)”: “购物车的灵魂在此”
    }

    第四章:飞书表格的约会准备

    程序员为飞书表格准备了这样的相亲资料:
    python
    {
    “result”: json.dumps([record], ensure_ascii=False)
    }

    注意事项:

  • 不要中文乱码(`ensure_ascii=False`的温柔坚持)
  • 时间戳是唯一的语言(飞书表格是个时间控)
  • 后记:程序员的发票哲学

    这段代码告诉我们:

  • 在程序员眼中,连发票都可以JSON化
  • 时间不是金钱,而是时间戳
  • 最终一切数据都将臣服于多维表格的威力之下
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    收尾彩蛋:数据回旋镖,报销大冒险!

  • 当AI和发票相遇,会擦出什么样的火花?*
  • 5 阶段的结束节点玩了个“随机返场”——它像一位喝嗨了的会计,直接把LLM节点扒拉出来的发票数据“啪”地甩回桌面,还附赠一句潜台词:“亲,这是您的电子小票,麻烦确认下有没有把咖啡钱记成办公用品?”
  • 功能亮点:*
  • 便利贴模式:测试时不用再翻山越岭查日志,数据直接怼脸输出,像极了快递小哥的“放门口”服务。
  • 人工智障检测器:万一把“公司聚餐”识别成“火箭燃料采购”,现在你可以在提交前笑出声并手动修正。
  • 老板快乐按钮:想象一下测试报告里突然混入一行“识别结果:疑似熊猫外卖订单”,严肃气氛瞬间破功。
  • (程序员内心OS:反正迟早要暴露AI的沙雕识别能力,不如让它成为测试环节的段子发生器)*
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    3 测试

    当发票遇上AI:一场啼笑皆非的数字冒险

    第一步:上传前的内心戏

    用户:

  • 激动地掏出手机,对准桌上那张皱巴巴的发票。
  • “这次一定要拍得像专业摄影师!” —— 结果手抖得像在打电动。
  • 照片预览里:光线暗得堪比密室逃脱,角落还露着半杯咖啡杯。
  • AI系统:

  • 沉默地盯着这张”抽象派摄影作品”。
  • 内心OS:“这是发票还是毕加索画作?”
  • 第二步:系统的奇幻解读

  • 识别金额栏 → 把”8″看成”∞”,自动生成财务报告:”贵公司本月盈利:无限大”。
  • 税号数字 → 被光线折射成二维码,扫码后跳转到1980年的老歌MV
  • 最崩溃的是:把用户桌面的猫咪贴纸识别成“盖章无效”
  • 第三步:人类的倔强反击

    用户:

  • 第5次重拍时,用台灯+放大镜+三脚架,架势堪比考古现场。
  • 终于上传成功,系统弹窗:“检测到发票,但建议您直接联系税务局心理辅导热线。”
  • 终极真相

  • AI的隐藏日志
  • “今日接收发票照片:17张。其中:- 5张像抽象画- 3张疑似外星文字- 1张根本是停车票……人类对’拍照’是不是有什么误解?

  • 结论*:下次可能直接手写”我欠AI一顿宵夜”更高效。
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    一张充满电子魔力的发票奇遇记

  • 发票基本信息*
  • 发票标题:电子发票(普通发票) – 新时代的数字化收据
  • 发票号码:2511XXX120 – 这些XXX就像害羞的数字一样藏着不出来
  • 开具日期:2025-06-06 – 听起来就像是个会发财的好日子
  • 买卖双方信息*
  • 买家
  • 大名:中国XXX大学(又是一串神秘的XXX)
  • 税号:A1XXX9621(这串数字读起来像是在说”啊!我要XXX就溜”)
  • 卖家
  • 名号:北京XXX限公司(注意是”限”不是”有”,说明限量供应)
  • 税号:91XXXXX057T(就像在喊”就要XXX057踢”)
  • 神奇的购物清单*
  • FX600-B读卡器
  • 名称:电子元件RFID读卡器(这星号是怕被别人发现吗)
  • 单价:116.831683168317元(这么精确的价格,是怕小数点后面吃亏)
  • 数量:1个(还好不是116.83个)
  • 税额:1.17元(精确到分,绝不马虎)
  • M1标签卡
  • 名称:电子元件NFC标签卡(又是一颗害羞的星星)
  • 单价:1.039603960396元(这个价格算法堪比计算圆周率)
  • 数量:25个(正好凑一局扑克牌)
  • 税额:0.26元(连税都要凑个吉利数字)
  • 总计*
  • 不含税总额:142.82元(这个数字在说”是的是的啊”)
  • 总税额:1.43元(一首”哆发咪”的旋律)
  • 含税总额:
  • 数字:144.25元(”要事事而发”的谐音)
  • 大写:壹佰肆拾肆圆贰角伍分(写支票时要小心别写成”壹百是是是”)
  • 特殊说明*
  • 备注:留白是最美的艺术
  • 开票人:XX(这个XX是在向火星文的”笑脸”致敬吗)
  • API接口批量测试的艺术

  • 3.2.1 创建API密钥*
  • 这个步骤就像是给你的电子发票颁发一本魔法护照,有了它就能在数字王国自由穿行。只不过要小心保管,不然你的API密钥可能会像哈利波特的隐形衣一样被别人盗用!
    PS:批量化测试听起来像是在测试批量生产的电子元件是否有批量生产的质量问题呢~
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    神秘数字备忘录

    嘿,伙计们!你们的“重要信息保险箱”在此!

  • 请妥善保存下面这段神秘代码*,据说它能让电子世界为你跳舞(或者至少让你的脚本别罢工):
  • app-zT4UQvqqeLKfq0hX8sKDAOxj

  • 郑重提醒:*
  • 这是你的数字护身符,丢了它,你的代码可能会对你翻白眼
  • 建议把它贴在冰箱上、纹在额头上(不推荐),或者至少存进某个“我绝对会记得这里”的文件夹
  • 如果被外星人截获,请告诉他们这是地球的外卖优惠码
  • 使用方法:*
  • 复制
  • 粘贴到“那个看着就很厉害的脚本”里
  • 祈祷它喜欢你的代码风格
  • 系统提示:本条消息将在5秒后自毁——开玩笑的,但你真的该保存好它
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    发票处理小帮手:批量识别脚本大冒险

    今天我要给大家介绍一个特别能干的Python小助手,它叫”批量发票处理器”。这货能帮你把一堆发票图片变成整齐的数据,就像变魔术一样!

    这个脚本的魔法配方

  • 准备工作
  • 把要处理的发票图片放在`output_images`文件夹里
  • 准备一罐”API密钥蜂蜜”(就是那个`app-zT4UQvqq…`)
  • 打开它的超级电脑(Dify服务器)
  • 工作流程
  • 第一步:把图片送上网(上传)
  • 第二步:召唤Dify小精灵处理这些图片
  • 最后:把结果整齐地归档(写入CSV文件)
  • python
    import os
    import requests
    import json
    import csv

    配置区 – 这里就像是给机器人填报名表

    API_KEY = “app-zT4UQvqqeLKfq0hX8sKDAOxj” # 机器人的身份证
    USER = “rongjie” # 大名鼎鼎的使用者
    DIFY_SERVER = “http://127.0.0.1” # 机器人住的房子
    DIRPATH = “outputimages” # 发票图片的度假胜地
    RESULT_FILE = “result.csv” # 存放战利品的地方

    第一部分:把图片传送上网际网路

    def uploadimage(filepath, api_key):
    url = f'{DIFY_SERVER}/v1/files/upload’
    headers = {‘Authorization’: f’Bearer {api_key}’}

    判断图片类型 – 相当于问:”您是PNG大人还是JPEG爵士?”

    ext = os.path.splitext(file_path)[-1].lower()
    mime = ‘image/png’ if ext == ‘.png’ else ‘image/jpeg’
    with open(file_path, ‘rb’) as file:
    files = {‘file’: (os.path.basename(file_path), file, mime)}
    data = {‘user’: USER}
    response = requests.post(url, headers=headers, files=files, data=data)
    if response.status_code == 201:
    print(f”[成功上天啦] {file_path}”)
    resp = response.json()
    print(“云端回复:”, resp)
    return resp[‘id’] # 拿回文件的身份证号码
    else:
    print(f”[传送失败] {filepath},错误码: {response.statuscode},详情: {response.text}”)
    return None

    第二部分:让Dify小精灵开始工作魔法

    def runworkflow(fileid, api_key):
    url = f”{DIFY_SERVER}/v1/workflows/run”
    headers = {
    “Authorization”: f”Bearer {api_key}”,
    “Content-Type”: “application/json”
    }

    准备给Dify小精灵的”任务书”

    data = {
    “inputs”: {
    “upload”: {
    “type”: “image”,
    “transfermethod”: “localfile”,
    “uploadfileid”: file_id
    }
    },
    “user”: USER,
    “response_mode”: “blocking” # 等小精灵工作完才回复
    }
    print(“正在召唤小精灵,任务书内容:”)
    import pprint
    pprint.pprint(data)
    response = requests.post(url, headers=headers, json=data)
    print(“小精灵回信:”, response.status_code, response.text)
    if response.status_code == 200:
    resp_json = response.json()
    wfstatus = respjson.get(“data”, {}).get(“status”)
    if wf_status == “succeeded”:
    outputs = resp_json.get(“data”, {}).get(“outputs”)
    print(f”[魔法成功] 文件ID: {file_id}”)
    return resp_json, True, outputs
    else:
    errorinfo = respjson.get(“data”, {}).get(“error”) or resp_json.get(“message”)
    print(f”[魔法失灵] 文件ID: {fileid},状态: {wfstatus}”)
    return respjson, False, errorinfo
    else:
    print(f”[法术反噬] 文件ID: {fileid},错误码: {response.statuscode},详情: {response.text}”)
    return {“status”: “error”, “message”: f”法术失败了, 错误码: {response.status_code}”}, False, response.text

    第三部分:批量处理所有图片 – 机器人开始加班啦!

    def batchprocessimages(dirpath, resultfile):
    results = [] # 准备收集战利品
    for filename in os.listdir(dir_path):
    filepath = os.path.join(dirpath, filename)

    跳过非图片和不认识的图片格式

    if not os.path.isfile(file_path) or not filename.lower().endswith((“.jpg”, “.jpeg”, “.png”)):
    continue
    print(f”\n正在处理: {file_path}”)
    fileid = uploadimage(filepath, APIKEY)
    uploadstatus = “成功” if fileid else “失败”
    workflow_status = “失败” # 先假设会失败,做人要悲观一点
    if file_id:
    result, success, info = runworkflow(fileid, API_KEY)
    workflow_status = “成功” if success else “失败”
    resultinfo = json.dumps(info, ensureascii=False) if info else “”
    else:
    result_info = “上传失败 – 可能网络信号被猫抓断了”

    记录这次冒险的结果

    results.append({
    “filename”: filename,
    “uploadstatus”: uploadstatus,
    “workflowstatus”: workflowstatus,
    “resultinfo”: resultinfo
    })

    把冒险记录写成一本书(CSV文件)

    with open(result_file, “w”, newline=”, encoding=”utf-8-sig”) as f:
    writer = csv.DictWriter(f, fieldnames=[“filename”, “uploadstatus”, “workflowstatus”, “result_info”])
    writer.writeheader() # 先写个漂亮的标题
    for row in results:
    writer.writerow(row)
    print(f”\n工作报告已存档至 {result_file} – 记得请机器人喝机油”)
    if name == “main“:
    batchprocessimages(DIRPATH, RESULTFILE)

    这个脚本能做什么

  • 上传多张发票图片到Dify服务器
  • 自动调用工作流处理这些发票
  • 记录每次处理结果,包括:
  • 文件名
  • 上传状态
  • 工作流执行状态
  • 详细结果信息
  • 它就像个勤劳的小蜜蜂,嗡嗡嗡地把你的图片变成数据蜜糖!
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    飞书多维表格数据大冒险

    听说你想看看飞书多维表格的神秘数据?放心,我们不会让你看着无聊的数字和表格打哈欠!以下是经过我”艺术加工”的数据展示方式,保证让你眼前一亮(或者至少不会睡着):

  • 1. 员工信息表(代号:人力资源部的秘密档案)*
  • 张三:年龄28,入职2年5个月
  • 隐藏技能:能在3分钟内吃完部门庆功蛋糕
  • 李四:年龄35,入职5年1个月
  • 特别备注:全公司唯一能修好咖啡机的人
  • 2. 项目进度表(又名:deadline追赶大赛)*
  • 项目A:完成度75%
  • 真实进度:PPT第一页已经做好了
  • 项目B:完成度90%
  • 背后故事:其实只差最后点击”发送”按钮
  • 3. 报销单(惊天大发现:全公司最能吃的部门)*
  • 餐饮类平均每月金额:
  • 市场部:¥5,623
  • (注释:请市场部停止在米其林餐厅”谈业务”)
  • 技术部:¥1,257
  • (注释:感谢程序员们对泡面的忠诚)
  • 4. 部门KPI进度(童话版)*
  • 销售部:”我们马上就能到达城堡啦!”
  • 目标达成率:65%
  • 客服部:”正在与喷火巨龙搏斗中…”
  • 客户满意度:92%(但仍有8%的人想喷火)
  • 这些数据经过我的”创意改编”,完美展现了职场生活的精华部分。如需原始数据…呃,可能你得回去看那个无聊的原始表格了。
    我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    魔法发票管家:让PDF飞进表格的奇妙冒险

  • 从前,有一堆孤零零的PDF发票,像迷路的小精灵一样躺在文件夹里,等待人类手动录入表格。每天加班到深夜?手动数据输入眼花缭乱?不存在的!*
  • 魔法诞生记

  • 文件夹变身数据黑洞:把发票PDF像喂仓鼠一样丢进指定文件夹。
  • 脚本小精灵出动
  • 第一个脚本:瞬间扫描所有PDF,化身数据提取狂魔(OCR:我识字超快的!)。
  • 第二个脚本:挥舞魔杖,把发票数据精准发射到飞书表格,绝不手滑。
  • 统计图表自助餐:飞书表格直接生成饼图、柱状图,老板看了直呼“这效率是拿魔法变的吧?”
  • 未来畅想

  • 或许某天,发票会自己跳着踢踏舞进表格?
  • 搞不好AI还能替你和财务同事吵“这餐费到底报不报”?
  • 恭喜你!从此告别数据搬运工的苦力生涯,正式晋升「发票魔法师」!*
  • 我用Dify打造了批量发票识别助手,一键识别上百张发票,这才是AI识别发票的正确方式

    数据淘金记:当表格遇上程序员的浪漫

    每当我看到那些数据”唰唰”地自己填进表格里,仿佛在跳一支优雅的电子踢踏舞时,我就忍不住嘴角上扬。这种感觉,大概就像园丁看着蔬菜自动生长,或者小狗学会了用马桶——科技的魅力就是如此朴实无华且快乐!

    下一步,再给数据加点魔法

    作为一个会敲键盘的程序员,当然不能止步于这种基本操作!接下来有几个脑洞大开的想法正在我脑子里蹦跶:

  • 搞个GUI界面:总不能每次改数据都打开黑漆漆的命令行吧?Python就该穿着漂亮的GUI裙子闪亮登场,像点外卖一样轻松操作数据!
  • 让飞书和Excel“打一架”:飞书表格虽然方便,但万一它断网了怎么办?不如偶尔让数据也回归本地,在Excel里安个家,享受离线自由!
  • 啊,这就是数字时代的田园牧歌,让代码替我干活,我负责享受成就感——真香
    来源:微信公众号“智子工程”(但改写后可能会让原作者笑出声)

    © 版权声明

    相关文章