PDF 智能体 — 让 AI 帮你从 PDF 单据里"抠"出 Excel

### 0. 先和大家打个招呼吧 :waving_hand:

**你是谁**:一名物流行业的业务运营 / 兼职独立开发者,平时大量接触空运 DEBIT NOTE、发票、提单等 PDF 单据,深知"手工复制粘贴到 Excel"有多折磨人。

**你是怎么用 TRAE 把 Demo 做出来的**

坦白讲,我本职不是程序员,Python 也是边做边学。最初想做这个工具时,光是"PDF 怎么转成结构化字段"就把我卡了将近一周——`pdfplumber`、`PyMuPDF`、OCR 三条路各有各的坑。**真正让我觉得"原来这么简单"的瞬间有三个:**

1. **让 TRAE 帮我搭架构**:我只说了一句"我要做一个能识别 PDF 物流单据的桌面端工具,支持原生提取和 OCR 双通道",TRAE 直接给出了 `pdf_smart_reader` 的模块划分建议(`native_extractor` / `ocr_processor` / `pdf_router`),还顺手帮我规划了策略路由的判断逻辑。这一步我原本以为要自己画两天架构图。

2. **让 TRAE 帮我调 LLM 提示词**:字段匹配和 Excel 抽取提示词我反复调了几十个版本,TRAE 不光帮我迭代 prompt,还主动发现了"中文冒号 vs 英文冒号"导致匹配失败这种我自己根本注意不到的细节,最后稳定到几乎 100% 命中率。

3. **让 TRAE 帮我做 UI**:我说"我要 Fluent 风格的窗口,左边是单据列表,右边是字段映射预览",TRAE 直接用 `qfluentwidgets` 写出了一整套带主题切换、带 loading 动画、带错误兜底的 PySide6 界面——这一步原本是我觉得"搞不定就放弃"的那个坎。

**最大的感受**:TRAE 不是一个"替你写代码的工具",更像一个"永远在线、从不嫌你问题low的结对编程伙伴"。你说一句人话,它帮你把脑子里的模糊想法变成可运行的工程。

-–

### 1. Demo 简介

**是什么**:一款基于 PySide6 + Fluent Design 的****桌面端 PDF 智能识别系统****(不是 Web 应用,是真正的 Windows/macOS/Linux 原生客户端),支持物流单据、发票、合同等多类型 PDF 的智能字段抽取与 Excel 模板导出。

**面向谁**

- 物流货代公司的****单据录入员、财务对账员****(核心痛点用户)

- 需要批量处理 PDF 报告的****审计、咨询、运营****人员

- 对 OCR + LLM 混合抽取方案感兴趣的****开发者****

**主要功能**(2-3 个核心):

#### ① PDF 智能解析(双通道自适应)

系统会先判断 PDF 是"原生文本型"还是"扫描图片型",自动选择 `pdfplumber` 直抽 / `Tesseract` OCR 路线,对模糊或混合版面自动启用多策略融合。

> :camera_with_flash: *(附:主界面截图 + PDF 上传后的解析进度演示)*

#### ② 模板驱动字段匹配 + 抽取

用户上传一次 Excel 模板(如《DEBIT NOTE 录入表》),系统会:

- 用 LLM 智能匹配模板字段 ↔ PDF 字段,输出置信度

- 弹出****匹配预览对话框****,让用户确认/调整映射关系

- 一键批量应用到同类型 PDF

> :camera_with_flash: *(附:字段匹配预览弹窗 + 置信度列表)*

#### ③ 一键导出 Excel + 智能代码生成

抽取完成后直接生成符合模板格式的 `.xlsx`,**附赠"代码生成器"模块**——能根据匹配规则自动生成可复用的 Python 提取代码,下次同类单据零成本复用。

> :camera_with_flash: *(附:导出后的 Excel 截图 + 代码生成器界面)*

-–

### 2. Demo 创作思路

**灵感来源**

我朋友在一家国际货代公司做财务,每天要处理 50-100 份空运 DEBIT NOTE 发票。每张发票要手动把 30 多个字段(公司名、地址、JOB NO、INV NO、件数、毛重、体积重、空运费金额……)**逐个从 PDF 复制到 Excel**。她告诉我:“做这一行五年,最想砸电脑的就是月底对账那几天。”

**想解决的问题**

- **痛点 1**:人工录入效率低(一份单据 3-5 分钟,错误率 5%+)

- **痛点 2**:不同货代公司单据版式千差万别,没有通用识别方案

- **痛点 3**:OCR 工具对中英文混排表格识别率差,LLM 又没法直接吃 PDF

**为什么做这个方向**

物流单据是****结构化但版式不统一**的典型场景——既需要 OCR 处理扫描件,又需要 LLM 理解语义匹配字段。我没有选择做一个"通用 PDF 转 Word"工具,而是**专注在"模板驱动的结构化抽取"这个垂直场景****,把"上传模板 → 自动匹配 → 批量应用"这条链路打通。

**判断和取舍**

- :white_check_mark: 选****桌面端****而非 Web:用户的 PDF 文件含商业机密,不愿上传云端

- :white_check_mark: 选****PySide6 + Fluent UI****:和 WPS、QQ 的视觉风格一致,降低学习成本

- :white_check_mark: 选****多模型可插拔****:支持 Qwen / GLM / DeepSeek / Agnes,用户可自配 API

- :cross_mark: 没有做"全自动无人工干预":保留****匹配预览确认环节****,避免 AI 误识别导致财务事故

-–

### 3. Demo 体验地址(三选一)

由于本 Demo 是 **PySide6 桌面端应用**(非 Web),按官方规则采用:

> **:white_check_mark: 方案二:交互式可体验的 HTML 格式文件 + 演示视频**

>

> 1. **产品展示页**:[`创意展示.html`](https://trae-api-cn.mchost.guru/api/ide/v1/text_to_image?prompt=PDF%20agent%20dashboard%20UI%20mockup&image_size=landscape_16_9)(项目根目录下 `创意展示.html`,可直接用浏览器打开查看产品形态与功能介绍)

> 2. **功能演示视频**:[待补充:请将演示视频上传至 B 站/YouTube 后回填链接]

> 3. **源码 & 完整工程**:见项目仓库(包含 `app.py` 主程序、`pdf_smart_reader/` 核心模块、`configs/` 模板库)

> :light_bulb: *如评审需要本地运行版本,可基于 `requirements.txt` 一键 `pip install -r requirements.txt` + `python app.py` 启动(已支持 Windows / macOS)。*

-–

### 4. TRAE 实践过程

**完整开发流程**(按时间线):

#### 阶段 1:需求拆解 + 架构设计 :triangular_ruler:

- 向 TRAE 描述业务场景:“物流单据识别 + 模板驱动 + 桌面端”

- TRAE 输出了 `pdf_smart_reader` 三层架构(Router → Extractor → Parser)

- **关键截图**:架构设计对话、`pdf_router.py` 路由策略实现

- **Session ID**:`【.872383174419312:9e3837c21410edb9449790106e1e1990_6a4894d7afe6ab25b3952fa9.6a49b60ba3e66efd8dfbe1b1.6a49b60b30a217605617a854:Trae CN.T(2026/7/5 09:40:27)】`

#### 阶段 2:核心功能实现 — 智能字段匹配 :robot:

- 提示词迭代:从 v1 的"自由发挥"到 v27 的"强制匹配规则"

- TRAE 帮我发现了****中文全角冒号 `:` vs 英文半角冒号 `:`****导致 LLM 匹配失败的隐性 Bug

- **关键截图**:字段匹配预览弹窗、置信度排序、用户手动调整

- **Session ID**:`【.872383174419312:9e3837c21410edb9449790106e1e1990_6a4894d7afe6ab25b3952fa9.6a49b60ba3e66efd8dfbe1b1.6a49b60b30a217605617a854:Trae CN.T(2026/7/5 09:40:27)】`

#### 阶段 3:UI 实现 — Fluent 风格界面 :artist_palette:

- 一句话需求:“我要像 WPS 那种现代化界面,左侧单据列表 + 右侧字段映射”

- TRAE 用了 `qfluentwidgets` 直接生成完整 PySide6 窗口代码

- **关键截图**:主界面、主题切换、loading 动画、错误提示 InfoBar

- **Session ID**:`【.872383174419312:9e3837c21410edb9449790106e1e1990_6a4894d7afe6ab25b3952fa9.6a49b60ba3e66efd8dfbe1b1.6a49b60b30a217605617a854:Trae CN.T(2026/7/5 09:40:27)】`

#### 阶段 4:批量处理 + 代码生成器 :hammer_and_wrench:

- 痛点:“同一类型单据下次还要重跑,能不能自动生成提取代码?”

- TRAE 帮我设计了 `code_generator.py`,根据匹配规则自动生成可复用 Python 脚本

- **关键截图**:批量队列、自动生成的提取代码片段

- **Session ID**:`【.872383174419312:9e3837c21410edb9449790106e1e1990_6a4894d7afe6ab25b3952fa9.6a49b60ba3e66efd8dfbe1b1.6a49b60b30a217605617a854:Trae CN.T(2026/7/5 09:40:27)】`

### 5. 对应的报名审核通过的帖子链接

> **报名审核通过帖**:`【https://forum.trae.cn/t/topic/45423】`

>

> 报名赛道:**学习工作**

> 报名时间:`【2026-06-25 09:40:27】`

*以上为本项目【PDF 智能体】的初赛参赛帖,真诚感谢评审老师的时间 :raising_hands: 如有疑问欢迎在评论区交流~*

pdf智能体开发.zip (729.3 KB)

PDF 智能体最有业务判断的地方,是没有把财务/物流单据做成全自动黑盒,而是保留“匹配预览确认”:模型先把 Excel 模板字段和 PDF 字段配上置信度,再让人确认或调整,这很贴近月底对账这种不能错的场景。建议把评委入口再落细一点:ZIP 解压后先打开创意展示.html 看产品形态,再说明本地版要装 requirements、准备示例 PDF 和 Excel 模板,按“上传 PDF→加载模板→看预览→导出 xlsx→生成复用代码”走一遍;现在展示页链接像占位接口,视频也写待补充,评委容易找不到真正体验路径。我们《衍境》在生活娱乐赛道,做互动影游创作系统,也是在把复杂流程拆成可确认的节点:【生活娱乐赛道】衍境 Demo:EvoMap 驱动的互动影游智能体创作系统 如果后面要做组会展示,建议再补一张“失败样本→复活分支→结果变化”的总览图,这样观众会更容易一眼看懂。