crewai-gmail-automation
用 CrewAI 多 Agent 协作实现 Gmail 智能分类、标记、草稿回复和清理的自动化工作流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 CrewAI 多 Agent 协作实现 Gmail 智能分类、标记、草稿回复和清理的自动化工作流
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图1:Gmail Automation 系统架构图
想象一下:你的邮箱里堆了 3000 多封未读邮件,其中混杂着真正的商务来信、每周Newsletter、促销广告和垃圾邮件。手动分类不仅费时,还容易遗漏重要信息。2025 年 3 月,肯尼亚开发者 Tony Kipkemboi 决定用 AI Agent 来解决这个问题——他用 CrewAI 框架写了一套 Gmail 自动化系统,让多个 AI 智能体各司其职,自动分类、标记、起草回复、甚至清理垃圾邮件。这套系统后来登上了 Hacker News 的 Show HN 栏目,获得不少关注。
传统的邮件自动化通常依赖规则引擎(if-then),比如"来自 xxx.com 的邮件打上某标签"。但这类规则脆弱且无法处理上下文模糊的场景——一封来自银行的通知是重要还是促销?Newsletter 里突然冒出的会议邀请该如何归类?
CrewAI 的思路是把一个复杂任务拆给多个专业 Agent,每个 Agent 只做一件事。它们通过共享上下文通信,按顺序协作,最终完成端到端流程。相比单一 Agent,多 Agent 架构的优势在于:每个 Agent 有明确的角色定义和专有工具,分工清晰,易于扩展和调试。
整个系统由 5 个 Agent 按顺序执行,故障容错性强:

图2:五 Agent 协作流程图
Categorizer 负责读取邮件内容,判断每个邮件的:
Categorizer 使用 FileReadTool 读取 output/fetched_emails.json,输出为结构化 JSON,再由 SimpleCategorizedEmail Pydantic 模型校验字段完整性。代码中有大量边界处理逻辑——比如当 LLM 返回的是字符串而非 JSON 时,系统会自动用正则提取 JSON 部分。
根据分类结果,Organizer 调用 GmailOrganizeTool 对每封邮件执行:
Gmail 的标签(Labels)系统被充分利用,每个分类对应一个独立标签,为后续 Gmail 过滤器打好基础。
对于标记为"需要回复"的邮件,Response Generator 调用 SaveDraftTool 生成草稿回复。这个 Agent 的背景设定是"专业商业写作者",输出要求简洁、专业、符合商务语境。它利用 LLM 的上下文理解能力,根据邮件内容和历史对话生成个性化回复。
Notifier 专门负责 Slack 通知,它用 SlackNotificationTool 把高优先级邮件的摘要发送到指定频道。通知内容包含邮件主题、发件人、分类、优先级摘要和行动建议。通知文案可自定义 headline / intro / action_header,细节考虑得很周到。
Cleaner 使用 DateCalculationTool 计算邮件年龄,识别超过一定天数的低优先级邮件,调用 GmailDeleteTool 删除它们,并执行 EmptyTrashTool 清空垃圾箱。这个 Agent 的设计目标是"在保证不误删重要邮件的前提下,持续释放 Gmail 存储空间"——作者自己在 HN 评论中也承认,trash 清空这一步用 Agent 来做其实有点"杀鸡用牛刀",但作为多 Agent 框架的演示很合适。
整个项目只依赖两个核心包:crewai[tools] 和 bs4(BeautifulSoup)。crewai[tools] 封装了 CrewAI 框架本身以及内置的 FileReadTool,bs4 用于解析 HTML 邮件正文。
LLM 支持三种选择(通过 .env 配置):
项目使用 crewai install 命令安装,该命令会解析 pyproject.toml 并安装所有依赖。Python 版本要求 3.10-3.12。
项目没有提供 Dockerfile 或 docker-compose.yml,不支持容器化一键部署。安装流程:
git clone → cd crewai-gmail-automationpython -m venv .venv && source .venv/bin/activatecrewai install(自动安装依赖).env 文件,填入 API Key 和 Gmail 凭证run_crew 即可配置环节中,最繁琐的是 Gmail App Password——需要先在 Google 账户开启两步验证,再在安全设置里生成 App Password,整个流程对非技术用户有一定门槛。
Gmail IMAP 权限申请也需手动操作,但 README 有详细步骤说明,配合截图可以顺利完成。
硬件需求极低:无需 GPU,1GB RAM + 200MB 磁盘即可运行,本质是一个 IMAP 邮件客户端 + LLM API 调用器。
项目代码结构清晰,采用 CrewAI 推荐的 @CrewBase 装饰器模式,配置与代码分离(config/agents.yaml + config/tasks.yaml),便于非程序员修改 Agent 行为而不碰代码。
Pydantic 模型覆盖了所有关键数据结构(EmailDetails、CategorizedEmail、OrganizedEmail 等),提供了 SkipValidation 机制防止 CrewAI 序列化时的类型检查问题。crew.py 中有丰富的调试回调(_debug_callback)和输出验证逻辑(_validate_categorization_output),体现了工程思维的严谨——尤其是对 LLM 输出格式不稳定性的防御性编程,值得学习。
不过,before_kickoff 钩子里直接调用 IMAP 拉取邮件,而非通过 Tool 调用,这种做法牺牲了 Agent 的自主性,但提升了确定性,在邮件场景下是合理的权衡。
文档质量高:README 包含完整的安装步骤、Gmail App Password 创建指南、Slack Webhook 配置说明,还有 YouTube 视频教程,涵盖从零到上线的全流程。
安全方面需要关注:.env 中明文存储 API Key 和 Gmail App Password,不支持环境变量注入方式,生产环境使用需额外注意凭证管理。
这个项目不是银弹,有几个明显的局限:
邮件隐私风险:所有邮件内容都会发送到 OpenAI/Gemini API 服务器进行处理。如果处理的是包含敏感商业信息或个人隐私的邮件,需要评估数据合规风险。本地 Ollama 方案虽然可以避免这个问题,但 README 注明 tool calling 有兼容性问题。
LLM 输出的不稳定性:分类和优先级判断完全依赖 LLM,不同模型或不同温度参数可能导致结果不一致。代码中的 JSON 解析降级逻辑是对这一问题的补救,但无法从根本上消除。
Gmail API 限制:IMAP + App Password 方案不如 Gmail API 强大,无法访问 Gmail 特有的 Smart Labels、Auto-Archive 等高级功能。
删除操作的不可逆性:GmailDeleteTool 删除邮件后直接清空 Trash,数据一旦丢失无法恢复,生产环境强烈建议先做备份测试。
这个项目最有价值的地方,不是技术本身,而是它展示了 CrewAI 多 Agent 架构在真实日常场景中的落地能力——不是 Demo,不是教科书例子,而是一个解决个人痛点的实际工具。登上 Hacker News 并获得关注,说明这类"用 AI 自动化重复性知识工作"的思路正在被更多开发者认可和实践。
对于想入门 CrewAI 或 Agent 开发的工程师,这个项目是一个非常好的起点:代码体量适中(核心逻辑在 crew.py + tools/ + config/ 三个目录),架构清晰,且覆盖了 Agent 开发的核心要素(角色定义、工具注册、任务编排、Pydantic 输出验证)。