一款基于 Electron + React 的桌面应用程序,通过百度 OCR 智能识别发票信息,支持批量重命名文件;内置 AI 发票助手,可按预设整理规则扫描目录、比价复核,并通过 OpenAI 兼容大模型生成风险分析。
- 🔍 智能识别:自动识别发票的物品名称、金额
- 📄 多格式支持:支持 PDF、JPG、PNG、OFD 格式
- 📝 批量处理:一次性处理多个发票文件
- ✏️ 手动调整:支持手动修改识别结果
- 🔢 序号自增:输入起始序号,自动递增
- 🤖 AI 发票助手:右侧可收起侧边栏,输入发票目录即可执行整理与比价流程
- 💰 价格合理性检查:基于
data/price-book.csv的本地价格证据判断合理、略高、明显偏高或需人工确认 - 🧠 LLM 分析:支持 OpenAI-compatible
/chat/completions接口,结合预设 skill、OCR 和价格证据输出复核建议 - 🛡️ 安全预览:AI 只生成整理建议和报告,不会自动重命名;必须先载入表格并人工确认
┌────────────────────────────────────────────────┐
│ 发票批量命名工具 [⚙️ 设置] │ [AI助手]
├────────────────────────────────────────────────┤
│ ┌──────────────────────────────┐ │
│ │ 拖入发票文件或文件夹 │ │
│ │ 或 点击选择 │ │
│ └──────────────────────────────┘ │
├────────────────────────────────────────────────┤
│ 待处理文件: 5个 │
├────┬──────┬──────────────┬────────┬────┬──────┤
│ √ │ 序号 │ 原文件名 │ 物品名称│张数│ 金额 │
├────┼──────┼──────────────┼────────┼────┼──────┤
│ ✓ │ 200 │ invoice.pdf │ 电子模块│ 1 │14.50 │
│ ✓ │ 201 │ receipt.pdf │ 元器件 │ 1 │10.09 │
│ ✓ │ 202 │ fapiao.pdf │ LoRa模块│ 1 │369.00│
└────┴──────┴──────────────┴────────┴────┴──────┘
[取消] [批量重命名 (3)]
右侧「AI 助手」按钮可展开侧边栏:输入类似 整理 "D:\发票\1月" 并检查价格是否合理,系统会扫描该目录、OCR 识别、匹配本地价格证据,并在侧栏中展示 LLM 分析和整理建议。
{序号}_{物品名称}_{张数}_{金额}.{扩展名}
示例:
200_电子模块_1张_14.50元.pdf201_元器件_1张_10.09元.pdf202_LoRa模组_1张_369.00元.pdf
- 前往 Releases 页面
- 下载最新版本的
发票批量命名工具-x.x.x-Setup.exe - 双击安装,按提示完成安装
- 从桌面或开始菜单启动
环境要求:
- Node.js 18+
- npm 或 yarn
步骤:
# 克隆项目
git clone https://github.com/bearsio/fapiao.git
cd fapiao
# 安装依赖
npm install
# 启动应用
npm run dev本工具使用百度 OCR API 识别发票,需要配置 API 密钥。
- 首次启动会自动弹出配置窗口
- 填入 API Key 和 Secret Key
- 点击保存
💡 免费额度:每月 1000 次调用,个人使用完全够用
AI 助手可以接入任何兼容 OpenAI Chat Completions 的服务:OpenAI、DeepSeek、通义千问兼容接口、OneAPI、Ollama 等。
在「设置」中启用并填写:
| 字段 | 示例 | 说明 |
|---|---|---|
| Base URL | https://api.openai.com/v1 |
兼容接口地址,系统会调用 /chat/completions |
| Model | gpt-4o-mini / deepseek-chat / qwen-plus |
模型名称 |
| API Key | sk-... |
本地 Ollama 可留空 |
LLM 只负责总结和复核建议;价格判断仍必须基于 OCR 和价格证据,不允许编造市场价格。
手动流程:添加文件 → 自动识别 → 调整信息 → 批量重命名
AI 流程:输入目录 → 扫描识别 → 本地价格表比价 → LLM 复核建议 → 载入表格 → 人工确认重命名
点击上传区域,选择发票文件或文件夹:
- 支持单个文件
- 支持多个文件
- 支持整个文件夹
应用会自动调用百度 OCR 识别:
- 🟡 黄色:识别中
- 🟢 绿色:识别成功
- 🔴 红色:识别失败
在表格中可以修改:
- 序号:输入起始序号,后续自动递增
- 物品名称:OCR 识别结果
- 张数:PDF 页数或手动修改
- 金额:OCR 识别结果
确认信息后,点击「批量重命名」完成操作。
- 点击右侧「AI 助手」展开侧边栏。
- 输入任务,例如:
整理 "C:\Users\bear\Desktop\发票\1月" 并检查价格是否合理。 - 按 Enter 或点击「发送运行」。
- 查看:识别物品、发票金额、市场价范围、价格判断、证据来源、建议文件名和 LLM 分析。
- 如结果可用,点击「载入到重命名表格」,再在主表格中人工确认并执行批量重命名。
价格证据来自 data/price-book.csv,格式如下:
keyword,normalizedName,source,title,price,unit,url,capturedAt
STM32,STM32模块,内部价格表,STM32模块常用采购价,18.50,件,,2026-04-29如果没有匹配证据,系统会标记为「无价格证据」或「需人工确认」,不会让模型凭空估价。
| 技术 | 用途 |
|---|---|
| Electron | 跨平台桌面框架 |
| React | UI 库 |
| TypeScript | 类型安全 |
| Zustand | 状态管理 |
| Tailwind CSS | 样式框架 |
| Vite | 构建工具 |
| 百度 OCR | 发票识别 |
| OpenAI-compatible API | LLM 发票复核分析 |
| 本地 CSV 价格表 | 价格证据来源 |
fapiao/
├── electron/ # Electron 主进程
│ ├── main.ts # 入口文件
│ ├── preload.cjs # 预加载脚本
│ └── services/ # 服务层
│ ├── ocrService.ts # OCR 识别
│ ├── fileService.ts # 文件操作
│ ├── agentService.ts # AI 发票助手编排
│ ├── llmService.ts # OpenAI-compatible 大模型调用
│ ├── priceService.ts # 本地价格证据比价
│ └── configService.ts # 配置管理
├── src/ # React 前端
│ ├── components/ # UI 组件
│ ├── stores/ # 状态管理
│ ├── utils/ # 工具函数
│ └── App.tsx # 主应用
├── skills/ # AI 助手默认整理 skill
├── data/ # 本地价格表
├── docs/ # 文档
├── package.json
└── vite.config.ts
npm run devnpm run buildnpm run distA: 可能原因:
- 图片不清晰
- 发票格式不标准
- 建议使用扫描件而非照片
A: 检查:
- Key 是否正确复制(无多余空格)
- 百度云账号是否正常
- OCR 应用是否启用
A: 百度免费版限制 2次/秒,应用已自动处理限流和重试。
A: 不会。AI 助手只生成整理建议、比价报告和 LLM 分析;必须点击「载入到重命名表格」并人工确认后,才会执行原有批量重命名流程。
A: 系统会标记为「无价格证据」或「需人工确认」,不会让大模型编造价格。请在 data/price-book.csv 中补充对应物品的价格证据。
- ✅ 新增右侧可收起 AI 发票助手侧边栏
- ✅ 新增按目录扫描并载入重命名表格的整理流程
- ✅ 新增本地价格表比价复核
- ✅ 新增 OpenAI 兼容 LLM 分析配置
- ✅ 新增预览式 Agent 报告,避免自动修改文件
- 🎉 首次发布
- ✅ 支持 PDF/JPG/PNG/OFD 格式
- ✅ 百度 OCR 智能识别
- ✅ 批量重命名
- ✅ 序号自动递增
- ✅ 可编辑识别结果
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 GitHub Issues 反馈。
如果这个项目对你有帮助,请给个 ⭐ Star 支持一下!