# 《WaLiOffice - AI Agent 智能办公平台》第4-2节:附件处理与状态管理
作者:小傅哥
博客:https://bugstack.cn (opens new window)
沉淀、分享、成长,让自己和他人都能有所收获!😄
# 一、前言
大家好,我是技术UP主小傅哥。
上一节我们搞定了配置管理,这节来解决一个非常实际的问题 —— 用户上传了文件,怎么提取内容?
场景是这样的:用户上传一个 Word 文档,想让 AI 帮他总结;上传一个 Excel,想让 AI 分析数据;上传一个 PPT,想让 AI 理解里面的内容。所有这些,都需要先把文件内容读出来,才能喂给 LLM。
而且这里有两个消费方,需求完全不同:
- LLM 要的是"文字" ——不管排版,把内容拼成纯文本塞进上下文
- 前端要的是"结构" ——段落、表格、幻灯片、工作表,才能渲染出漂亮的富预览
所以 WaLiOffice 的文件提取模块是一套解析、两种输出。这节我们就来搞定它。
# 一、本章诉求
- 理解 Office 文件的本质:Word/Excel/PPT 本质上都是 ZIP + XML,搞清楚这个就不怕了
- 掌握 ZIP/XML 解析:用 Rust 的
zipcrate + 正则提取 Office 文件内容 - 实现结构化提取:不只提取文字,而是提取"段落/表格/幻灯片/工作表"的结构,让前端能渲染富预览
- 支持 PDF 提取:用系统命令
pdftotext提取 PDF 文字,命令不存在时兜底 - 截断保护:超大文档不能撑爆 LLM 上下文窗口
# 二、技术背景:Office 文件是什么
# 2.1 你以为的 Word vs 实际的 Word
很多人觉得 Word 文件就是"文字",但它实际上是一个 ZIP 压缩包:
example.docx (其实是个 zip 文件)
└── [Content_Types].xml ← 文件清单
└── _rels/
└── word/
├── document.xml ← 真正的文档内容(XML 格式)
├── styles.xml ← 样式定义
└── theme/
└── docProps/
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Excel(.xlsx)和 PowerPoint(.pptx)也是同样的结构,只是 XML 路径不同:
| 格式 | 内容 XML | 文本标签 |
|---|---|---|
| .docx | word/document.xml | <w:t> |
| .xlsx | xl/worksheets/sheetN.xml + xl/sharedStrings.xml | <v> / <t> |
| .pptx | ppt/slides/slideN.xml | <a:t> |
理解了这一点,处理思路就清晰了——解压 → 读 XML → 解析内容。三种格式是同一套打法的三个变体。

