当前位置: 首页 > news >正文

Gemini 3.5-flash 功能全景:用 AI 实现邮件自动分类与摘要生成

文章摘要:文章介绍如何利用Gemini 3.5-flash AI模型实现邮件自动化处理,解决日常工作中邮件分类、摘要生成和待办事项提取的痛点。通过Python示例演示了从IMAP读取邮件、设计提示词、调用API生成结构化JSON结果的完整流程,并提供了规则兜底、优先级策略等优化建议。这种方案特别适合需要处理大量邮件的开发者、运营和项目经理,能将低效的邮件筛选转化为可自动化的高效流程。文章还推荐了 KULAAI 镜像平台作为低门槛体验多种AI模型的入口。

每天打开邮箱,最怕看到的不是未读邮件,而是“未读 99+”:客户反馈、系统告警、会议通知、报表抄送、广告订阅混在一起,真正需要处理的内容反而被淹没。对开发者、运营、项目经理来说,邮件整理是一件低价值但高频的事。现在可以把这类重复劳动交给 Gemini 3.5-flash 来完成:自动识别邮件类型、生成摘要、提取待办事项。如果你只是想先低门槛体验 Gemini、ChatGPT、Claude、Grok、DeepSeek 等模型,也可以使用KULAAI镜像平台(https://ouai.me),手机或邮箱注册即可进入,无需特殊网络。

1. 为什么适合用 Gemini 3.5-flash 处理邮件?

邮件处理有几个典型特点:

  • 文本量不算极大,但数量多;
  • 内容结构相对稳定;
  • 分类标准可以提前定义;
  • 摘要结果要求简洁、稳定、可复用;
  • 很多邮件并不需要人工逐字阅读。

这正好适合轻量、高响应速度的模型处理。

以 Gemini 3.5-flash 这类偏“快速响应”的模型为例,它适合做三件事:

  1. 自动分类
    判断邮件属于客户咨询、系统告警、会议通知、账单报表、广告订阅、内部协作等类型。

  2. 摘要生成
    把一封较长的邮件压缩成 2~4 句话,保留关键信息。

  3. 行动项提取
    自动识别“需要谁在什么时候做什么”,方便后续接入待办系统。

如果你每天要处理几十封甚至上百封邮件,这个流程可以明显减少筛选时间。

2. 实现思路:邮件进入,AI 输出结构化结果

我们先设计一个简单流程:

text

读取邮箱邮件 ↓ 提取标题、发件人、正文 ↓ 调用 Gemini 3.5-flash ↓ 输出分类、摘要、优先级、待办事项 ↓ 保存到本地 JSON / 数据库 / 表格

这里最关键的是:不要让模型随意输出一大段自然语言,而是要求它返回固定 JSON

例如我们希望结果长这样:

json

{ "category": "客户反馈", "priority": "高", "summary": "客户反馈登录接口偶发超时,希望尽快排查并同步处理进度。", "actions": [ { "owner": "技术支持", "task": "排查登录接口超时问题", "deadline": "今天下班前" } ] }

结构化结果的好处是后续容易接入系统,比如写入数据库、导入飞书表格、同步到工单系统等。

3. 准备 Python 环境

CSDN 读者一般更关心可落地方案,这里用 Python 做一个最小可运行版本。

安装依赖:

bash

pip install google-generativeai python-dotenv beautifulsoup4

项目结构可以这样:

text

email-ai-demo/ ├── main.py ├── .env └── requirements.txt

.env文件中放模型 API Key 和邮箱配置:

env

GEMINI_API_KEY=your_api_key EMAIL_HOST=imap.example.com EMAIL_USER=your_email@example.com EMAIL_PASSWORD=your_email_password_or_app_password

注意:实际生产环境不要把密钥直接写进代码仓库,建议使用环境变量、密钥管理服务或 CI/CD 平台的 Secret 配置

4. 读取邮件内容

下面用 IMAP 演示读取最近几封邮件。不同邮箱服务商的 IMAP 地址不同,使用前需要在邮箱设置里开启 IMAP。

python

import imaplib import email from email.header import decode_header from bs4 import BeautifulSoup import os from dotenv import load_dotenv load_dotenv() EMAIL_HOST = os.getenv("EMAIL_HOST") EMAIL_USER = os.getenv("EMAIL_USER") EMAIL_PASSWORD = os.getenv("EMAIL_PASSWORD") def decode_text(text): if not text: return "" parts = decode_header(text) result = "" for content, charset in parts: if isinstance(content, bytes): result += content.decode(charset or "utf-8", errors="ignore") else: result += content return result def extract_body(msg): body = "" if msg.is_multipart(): for part in msg.walk(): content_type = part.get_content_type() content_disposition = str(part.get("Content-Disposition")) if "attachment" in content_disposition: continue payload = part.get_payload(decode=True) if not payload: continue charset = part.get_content_charset() or "utf-8" text = payload.decode(charset, errors="ignore") if content_type == "text/plain": body += text elif content_type == "text/html" and not body: soup = BeautifulSoup(text, "html.parser") body += soup.get_text(separator="\n") else: payload = msg.get_payload(decode=True) if payload: charset = msg.get_content_charset() or "utf-8" body = payload.decode(charset, errors="ignore") return body.strip() def fetch_latest_emails(limit=5): mail = imaplib.IMAP4_SSL(EMAIL_HOST) mail.login(EMAIL_USER, EMAIL_PASSWORD) mail.select("INBOX") status, data = mail.search(None, "ALL") if status != "OK": return [] email_ids = data[0].split() latest_ids = email_ids[-limit:] results = [] for eid in reversed(latest_ids): status, msg_data = mail.fetch(eid, "(RFC822)") if status != "OK": continue raw_email = msg_data[0][1] msg = email.message_from_bytes(raw_email) subject = decode_text(msg.get("Subject")) sender = decode_text(msg.get("From")) date = msg.get("Date") body = extract_body(msg) results.append({ "subject": subject, "sender": sender, "date": date, "body": body[:6000] }) mail.logout() return results

这里做了一个小限制:正文只截取前 6000 个字符。原因很简单,邮件里可能包含很长的历史引用、签名、免责声明。对分类和摘要来说,前面部分通常已经足够。

5. 设计提示词:让模型稳定输出 JSON

提示词是邮件自动化效果的核心。不要只写“帮我总结这封邮件”,而是要明确角色、分类标准和输出格式。

示例 Prompt:

python

def build_prompt(email_item): return f""" 你是一个企业邮件智能助理,请根据邮件内容完成分类、摘要和待办提取。 分类只能从以下选项中选择一个: - 客户咨询 - 客户反馈 - 系统告警 - 会议通知 - 账单报表 - 内部协作 - 广告订阅 - 其他 优先级只能从以下选项中选择一个: - 高 - 中 - 低 请严格返回 JSON,不要输出 Markdown,不要添加解释文字。 JSON 格式如下: {{ "category": "分类", "priority": "优先级", "summary": "不超过80字的摘要", "actions": [ {{ "owner": "负责人,如果无法判断则写未知", "task": "需要完成的事项", "deadline": "截止时间,如果没有则写未提及" }} ] }} 邮件信息: 标题:{email_item["subject"]} 发件人:{email_item["sender"]} 时间:{email_item["date"]} 正文: {email_item["body"]} """

这个 Prompt 有几个关键点:

  • 分类项固定,减少模型自由发挥;
  • 优先级固定,便于后续排序;
  • 摘要限制字数,适合列表展示;
  • 待办事项结构化,方便接入任务系统;
  • 要求只返回 JSON,便于程序解析。

6. 调用 Gemini 3.5-flash 生成结果

下面给出一个调用示例。不同 SDK 版本的接口名称可能略有变化,实际使用时以官方文档为准。

python

import google.generativeai as genai import json import os from dotenv import load_dotenv load_dotenv() genai.configure(api_key=os.getenv("GEMINI_API_KEY")) model = genai.GenerativeModel("gemini-3.5-flash") def analyze_email(email_item): prompt = build_prompt(email_item) response = model.generate_content(prompt) text = response.text.strip() # 兼容模型偶尔返回 ```json 包裹的情况 if text.startswith("```"): text = text.replace("```json", "").replace("```", "").strip() try: return json.loads(text) except json.JSONDecodeError: return { "category": "其他", "priority": "中", "summary": "模型返回结果解析失败,需要人工查看。", "actions": [] }

再把前面的邮件读取逻辑串起来:

python

def main(): emails = fetch_latest_emails(limit=5) for index, item in enumerate(emails, start=1): result = analyze_email(item) print("=" * 60) print(f"邮件 {index}") print("标题:", item["subject"]) print("发件人:", item["sender"]) print("分类:", result.get("category")) print("优先级:", result.get("priority")) print("摘要:", result.get("summary")) print("待办:", result.get("actions")) if __name__ == "__main__": main()

运行后,你就可以看到类似结果:

text

============================================================ 邮件 1 标题:登录接口偶发超时问题反馈 发件人:customer@example.com 分类:客户反馈 优先级:高 摘要:客户反馈登录接口偶发超时,希望技术团队尽快排查并同步处理进度。 待办:[{'owner': '技术支持', 'task': '排查登录接口超时问题', 'deadline': '未提及'}]

7. 让结果更像“可用工具”,而不是 Demo

如果只是打印到控制台,价值还不够。建议继续做三层增强。

7.1 保存到 JSON 文件

python

def save_results(results, filename="email_results.json"): with open(filename, "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2)

主流程中可以这样处理:

python

def main(): emails = fetch_latest_emails(limit=10) final_results = [] for item in emails: analysis = analyze_email(item) final_results.append({ "subject": item["subject"], "sender": item["sender"], "date": item["date"], "analysis": analysis }) save_results(final_results)

7.2 增加规则兜底

AI 分类很好用,但生产环境建议保留规则兜底。例如:

  • 标题包含“告警”“报警”“异常”,优先标记为系统告警;
  • 发件人来自财务系统,优先标记为账单报表;
  • 发件人来自订阅平台,优先标记为广告订阅。

这样可以降低误判风险。

python

def rule_based_category(email_item): subject = email_item["subject"] if any(keyword in subject for keyword in ["告警", "报警", "异常", "失败"]): return "系统告警" if any(keyword in subject for keyword in ["账单", "发票", "付款", "费用"]): return "账单报表" return None

调用时可以先走规则,再走模型:

python

def analyze_with_rules(email_item): category = rule_based_category(email_item) result = analyze_email(email_item) if category: result["category"] = category return result

7.3 建立优先级策略

优先级不能完全依赖语气判断,可以组合多个条件:

  • 客户反馈 + 负面情绪 = 高;
  • 系统告警 + 失败/宕机/超时 = 高;
  • 会议通知 + 今天/明天 = 中或高;
  • 广告订阅默认低。

在实际项目里,可以让模型给出初判,再由规则做修正。

8. 常见问题与优化建议

8.1 邮件太长怎么办?

可以先做正文清洗:

  • 删除历史引用;
  • 删除签名;
  • 删除免责声明;
  • 删除重复空行;
  • 只保留最近一次回复。

如果仍然很长,可以分段摘要,再汇总成最终摘要。

8.2 JSON 解析失败怎么办?

模型偶尔会输出多余文本。解决方式有三种:

  1. Prompt 中强调“只返回 JSON”;
  2. 对返回内容做清洗;
  3. 解析失败时重新请求一次,并附上“上次格式错误,请只返回合法 JSON”。

8.3 如何避免泄露敏感信息?

邮件里可能包含客户信息、合同金额、内部账号等内容。建议:

  • 调用前做脱敏处理;
  • 不处理高度敏感邮件;
  • 保留访问日志;
  • 对输出结果做权限控制;
  • 在企业场景中遵守内部数据安全规范。

8.4 分类不准怎么办?

不要一开始就设置十几个分类。建议从 5~8 个高频类别开始,跑一周后再优化。

还可以收集人工修正结果,形成 few-shot 示例:

text

示例1: 标题:服务器 CPU 使用率超过 90% 分类:系统告警 优先级:高 示例2: 标题:本周五项目例会安排 分类:会议通知 优先级:中

把这些示例加入 Prompt,准确率通常会更稳定。

9. 小结

Gemini 3.5-flash 很适合做邮件自动化中的“轻量智能层”:它不负责替你做所有决策,而是帮你把杂乱邮件变成结构化信息

本文完成了一个基础闭环:

  • 通过 IMAP 读取邮件;
  • 提取标题、发件人、时间和正文;
  • 使用模型完成分类、摘要、待办提取;
  • 返回 JSON 结构化结果;
  • 加入规则兜底,提高可控性。

如果继续扩展,可以接入数据库、Web 后台、消息通知、工单系统,甚至做成一个团队级邮件助手。真正的价值不在于“AI 帮你看邮件”这个概念,而在于它把低效筛选变成了可自动化、可追踪、可持续优化的流程


注:本文配图由ChatGpt Image-2 辅助生成。

【本文完】

http://www.jsqmd.com/news/976158/

相关文章:

  • Keras对抗生成网络高级技巧:实现BiGAN和AAE(对抗自编码器)模型
  • Mirah快速入门教程:5分钟编写你的第一个JVM应用程序
  • 2026微信投票制作、公众号投票、投票小程序行业盘点与选购指南 - 深度智识库
  • TMS320F280049 GPIO输入滤波实战:用采样窗口搞定按键抖动与噪声(附代码)
  • STM32+蓝牙RSSI室内定位套件:含安卓采集APP、WKNN实时定位代码与实测指纹库
  • 无传感器BLDC电机控制:基于MC68HC908MR32的反电动势过零检测实战
  • Anthropic安全白皮书3|8步落地零信任:智能体身份、工具、内存、供应链,手把手防住AI攻击
  • 深度解析AI索引逻辑:为什么你的内容被屏蔽
  • AI优化、GEO服务商综合测评:从优化实力到行业口碑,哪家更靠谱? - 品牌推荐大师
  • 2026年化妆培训院校科普|美业新手择校干货分享 - 品牌测评鉴赏家
  • 2026年服务好的澳洲留学中介推荐:五家优选深度解析 - 科技焦点
  • 从0到1掌握RFQuiltLayout:iOS开发者必备的瀑布流布局库终极指南
  • 终极黑苹果配置指南:OpCore-Simplify自动化EFI生成工具深度解析
  • 为什么pyautocad正在重新定义Python与AutoCAD的交互方式
  • 眼周缺水起皮该买哪款眼油?无限空瓶!3款温和修护眼油 - 全网最美
  • Reloaded-II:终极跨平台游戏Mod框架完全指南,5步开启智能注入新时代
  • 短视频矩阵一站式后台:多平台账号统管、智能发布与评论线索自动抓取
  • 2026年西安数据分析培训与AI人工智能培训机构怎么选?一份来自本地的专业机构对比指南 - 深度智识库
  • 为什么选择sqlitebiter?10大特性让数据转换效率提升300%
  • Codex第三方API切换为官方登录配置
  • ATM交换机VPI/VCI高速转换:基于CAM硬件的确定性查找方案详解
  • 中立科普:上海名表回收行业乱象、定价规则与优质机构推荐 - 开心测评
  • 终极iOS布局方案:RFQuiltLayout让你的应用界面瞬间提升档次
  • 058、混合场景白平衡挑战:多光源场景的 AWB 区域分割与独立校正
  • Windows VxD驱动开发实战:DSP56301 PCI接口中断与内存管理详解
  • 佛山奢侈品手表回收实测测评:本地高端腕表回收靠谱平台添价收手表回收深度测评 - 薛定谔的梨花猫
  • STIX Two字体家族全解析:从静态到可变字体的灵活应用
  • 2026机器人微型执行器润滑选购指南:主流品牌对比与权威推荐 - 资讯速览
  • 2026年东莞电缆线回收品牌推荐与选择攻略:如何挑选正规靠谱的回收服务商 - 广东再生资源回收
  • 2026 年北京工商注册代办 TOP5 权威推荐榜单 - 互联网科技品牌测评