前言
每天上班,你是不是也在重复这些事:
一天下来,真正有价值的工作没干多少,时间全花在这些机械操作上了。
我就想:这些事情,能不能让 AI 全自动完成?
于是花了一天时间,做了一个「个人全自动办公助手 Agent」。把文件丢进去,它自动帮你读取、清洗、分析、生成报告,还能定时推送到钉钉和企业微信。
今天把整个过程分享出来。
这个工具能干什么
一句话概括:拖入文件 → 自动出报告 → 自动推送。
具体来说:
支持的文件格式:
自动处理流程:
内置 5 种报告模板:
而且系统会根据你的数据列名自动匹配最合适的模板,不需要手动选。
为什么要做这个
背景
上班族每天花在整理数据和写报告上的时间,保守估计 1-2 小时。一个月就是 30-60 小时。
这些工作有几个特点:
这恰恰是 AI Agent 最擅长的领域。
意义
对个人来说:
对团队来说:
技术架构
整体设计
用户上传文件 / 定时触发
│
▼
┌─────────────────┐
│解析 Agent │读取 Excel/CSV/Word/PDF/TXT/图片
└────────┬────────┘
▼
┌─────────────────┐
│整理 Agent │去重、清洗、分类、统计
└────────┬────────┘
▼
┌─────────────────┐
│报表 Agent │ AI 生成报告 + 数据图表
└────────┬────────┘
▼
推送到钉钉/微信/邮件
三个 Agent 各司其职,通过 LangGraph 状态机串联。每个节点执行完会检查状态,出错则终止并报告错误原因。
技术栈选择
| | |
|---|
| | |
| | 便宜(生成一份报告约 ¥0.01-0.05)、中文能力强 |
| | |
| | |
| | |
| | |
| | |
| | |
为什么用 DeepSeek 而不是 GPT-4
- 成本— DeepSeek 的价格是 GPT-4 的 1/50,日常使用月费不超过 ¥5
- 中文
- 兼容— API 格式兼容 OpenAI SDK,一行代码切换
- 速度
实现过程
第一步:文件解析
这是整个流程的入口。核心思路是:不管什么格式的文件,最终都转成统一的数据结构。
classParserAgent:
SUPPORTED_EXTENSIONS = {
".xlsx", ".xls", ".csv",
".docx", ".doc", ".pdf", ".txt",
".png", ".jpg", ".jpeg",
}
defparse(self, file_path: str) -> dict:
# 返回统一格式:
# {"file_name": str, "data": DataFrame 或 str, "metadata": dict}
表格类文件(Excel/CSV)返回 pandas DataFrame,文本类文件(Word/PDF/TXT)返回字符串。
CSV 解析有个小细节:自动尝试多种编码(utf-8/gbk/gb2312),因为国内很多导出的 CSV 是 GBK 编码。
第二步:数据清洗
拿到原始数据后,自动做以下处理:
90% 的清洗工作用 pandas 规则完成,只有需要语义理解的分类才调用 AI,控制成本。
第三步:报告生成
这是最核心的部分。设计了一套模板系统:
@register_template
classSalesDailyTemplate(ReportTemplate):
name = "销售日报"
required_columns = ["销售额", "订单", "客户", "产品", "金额"]
defextract_metrics(self, df):
# 从数据中提取关键指标
return {"总销售额": ..., "订单量": ..., "客单价": ...}
defbuild_prompt(self, data_summary):
# 构建专业的 AI 提示词
return system_prompt, user_prompt
每个模板定义了:
系统会根据上传数据的列名自动匹配最合适的模板。比如数据里有"销售额""订单"这些列,就自动用销售日报模板。
第四步:推送通知
支持三个渠道:
钉钉— 支持三种安全策略(自定义关键词/加签/IP白名单),发送时自动注入关键词、自动签名。
企业微信— 通过群机器人 Webhook 推送 Markdown 格式消息。
邮件— SMTP 发送,报告作为附件。
第五步:Web 界面
用 Streamlit 做了一个完整的 Web 界面:
- 左侧边栏:配置 API Key、选择模板、设置推送
- 主区域:拖拽上传文件 → 预览数据 → 一键生成报告
- 配置指南:手把手教用户申请各种 Key 和 Webhook
打包成桌面应用
做完功能后,面临一个问题:目标用户是上班族,不会用命令行。必须做成双击就能用的桌面应用。
方案选择
用 PyInstaller 打包。它能把 Python 程序和所有依赖打包成独立的可执行文件,用户电脑上不需要安装 Python。
踩过的坑
坑 1:Streamlit + --windowed 模式秒退
一开始用--windowed参数打包(隐藏控制台窗口),结果双击后程序秒退。
原因:Streamlit 是 Web 服务,需要一个进程持续运行。--windowed模式下主进程启动后没有东西"hold 住",直接退出了。
解决:改用--console模式,保留终端窗口作为服务进程。用 subprocess 启动 Streamlit,主进程通过process.wait()保持存活。
坑 2:打包后找不到模块
PyInstaller 静态分析 import,但 Streamlit 和 LangGraph 有大量动态导入。
解决:手动声明--hidden-import,把所有可能用到的模块都列出来。
坑 3:包体积太大
第一次打包出来 925MB,主要是 pandas、matplotlib、streamlit 这些库太大。
解决:去掉--windowed(不生成 .app bundle)后降到 355MB。还可以进一步用 UPX 压缩。
最终打包流程
# 一键打包
python build_release.py
# 输出:
# macOS → ~/办公助手数据/output/办公助手.dmg
# Windows →生成 build_windows.bat,在 Windows 上执行即可
打包脚本自动完成:
- PyInstaller 打包(含所有数据文件和隐式导入)
用户体验
最终用户的使用流程:
成本分析
开发成本
运行成本
- DeepSeek API:约 ¥5/月(日常使用)
总结
这个项目的核心思路很简单:
把重复的、有规则的、不需要创造力的工作,交给 AI Agent 自动完成。
技术上没有什么高深的东西,就是把现有的工具组合起来:
但组合在一起,就能实实在在地帮上班族每天省出 1-2 小时。
如果你也想做类似的 AI 工具,建议从最小可行产品开始:先做命令行版验证核心流程,再加界面,最后打包。不要一上来就想做得很完美,先跑起来再说。
项目完整代码已开源,有问题欢迎交流。