【效率】邮件分类与自动回复智能体
1. 需求分析与技术架构
1.1 核心需求
邮件分类与自动回复智能体需要具备以下核心能力:
- 邮件读取:自动读取和解析邮件内容
- 邮件分类:根据邮件内容自动分类(工作、个人、促销等)
- 优先级识别:识别邮件的紧急程度和重要性
- 信息提取:从邮件中提取关键信息(日期、时间、任务等)
- 自动回复:根据邮件内容生成合适的自动回复
- 个性化回复:根据发件人和内容生成个性化的回复
- 任务提醒:基于邮件内容创建任务提醒
- 批量处理:支持批量处理多封邮件
1.2 技术架构
我们将采用以下技术栈构建邮件分类与自动回复智能体:
┌─────────────────────┐
│ 用户界面层 │
│ Gradio Web界面 │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ 智能体核心层 │
│ LangChain + LLM │
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ 工具与数据层 │
│ 1. 邮件读取工具 │
│ 2. 分类模型 │
│ 3. 信息提取工具 │
│ 4. 回复生成器 │
│ 5. 任务管理工具 │
└─────────────────────┘2. 环境搭建与依赖配置
首先,我们需要创建项目并安装必要的依赖:
# 创建项目目录
mkdir email-classification-agent
cd email-classification-agent
# 初始化Python环境
python -m venv venv
venv\Scripts\activate # Windows
# 或 source venv/bin/activate # macOS/Linux
# 安装依赖
pip install langchain langchain-openai gradio pandas numpy scikit-learn3. 核心功能实现
3.1 配置文件管理
创建 config.py 文件管理配置信息:
# config.py
import os
from dotenv import load_dotenv
load_dotenv()
# API密钥配置
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
# 系统配置
SYSTEM_PROMPT = """你是一个专业的邮件处理助手,负责分类邮件并生成合适的回复。
你的职责包括:
1. 分析邮件内容,确定邮件类型和优先级
2. 从邮件中提取关键信息
3. 根据邮件内容生成专业、礼貌的回复
4. 识别需要后续跟进的任务
5. 确保回复符合上下文和邮件的正式程度
请保持专业的沟通风格,根据邮件的内容和语气调整回复的风格和内容。"""
# 邮件分类配置
EMAIL_CATEGORIES = {
"工作": ["工作", "项目", "会议", "任务", "截止日期"],
"个人": ["个人", "家庭", "朋友", "聚会", "邀请"],
"促销": ["促销", "优惠", "折扣", "活动"],
"垃圾邮件": ["垃圾", "广告", "不需要"],
"重要": ["紧急", "重要", "立即", "必须"]
}
# 优先级配置
PRIORITY_LEVELS = {
"高": "需要立即处理的紧急邮件",
"中": "需要在近期处理的邮件",
"低": "可以稍后处理的邮件"
}
# 回复模板配置
REPLY_TEMPLATES = {
"默认": "感谢您的邮件。我会尽快处理您的请求并回复您。",
"确认": "已收到您的邮件,我确认会按照您的要求处理。",
"追问": "感谢您的邮件。为了更好地帮助您,我需要了解更多关于...",
"拒绝": "感谢您的邮件。很遗憾,我无法满足您的请求,因为...",
"接受": "非常感谢您的邮件。我很高兴接受您的邀请/提议。"
}3.2 邮件处理工具
创建 email_processor.py 文件处理邮件:
# email_processor.py
import re
from langchain_openai import ChatOpenAI
from config import OPENAI_API_KEY, EMAIL_CATEGORIES, PRIORITY_LEVELS
class EmailProcessor:
"""邮件处理类"""
def __init__(self):
self.llm = ChatOpenAI(
api_key=OPENAI_API_KEY,
model="gpt-3.5-turbo",
temperature=0.3
)
def parse_email(self, email_content):
"""解析邮件内容"""
# 提取发件人
sender_match = re.search(r'发件人[::]\s*(.+)', email_content)
sender = sender_match.group(1).strip() if sender_match else "未知"
# 提取主题
subject_match = re.search(r'主题[::]\s*(.+)', email_content)
subject = subject_match.group(1).strip() if subject_match else "无主题"
# 提取日期
date_match = re.search(r'日期[::]\s*(.+)', email_content)
date = date_match.group(1).strip() if date_match else "未知"
# 提取正文
body_match = re.search(r'正文[::]\s*(.+)$', email_content, re.DOTALL)
body = body_match.group(1).strip() if body_match else ""
return {
"sender": sender,
"subject": subject,
"date": date,
"body": body
}
def classify_email(self, email_content):
"""分类邮件"""
prompt = f"""
请分析以下邮件内容,确定其分类和优先级:
邮件内容:
{email_content}
分类选项:
{EMAIL_CATEGORIES}
优先级选项:
{PRIORITY_LEVELS}
请返回:
1. 主要分类
2. 优先级
3. 分类理由
"""
response = self.llm.invoke(prompt)
return response.content
def extract_info(self, email_content):
"""提取邮件中的关键信息"""
prompt = f"""
请从以下邮件内容中提取关键信息:
邮件内容:
{email_content}
需要提取的信息包括:
1. 任务或请求
2. 截止日期
3. 会议时间和地点
4. 联系人信息
5. 其他重要信息
请以结构化格式返回提取的信息。
"""
response = self.llm.invoke(prompt)
return response.content
def generate_reply(self, email_content, style="专业"):
"""生成邮件回复"""
prompt = f"""
请根据以下邮件内容生成一个{style}风格的回复:
邮件内容:
{email_content}
回复要求:
1. 开头礼貌问候
2. 针对邮件内容作出回应
3. 提供必要的信息或追问
4. 结尾礼貌结束语
5. 保持专业、简洁的语言风格
请直接生成回复内容,不要包含其他无关信息。
"""
response = self.llm.invoke(prompt)
return response.content
def identify_tasks(self, email_content):
"""识别邮件中的任务"""
prompt = f"""
请从以下邮件内容中识别需要后续跟进的任务:
邮件内容:
{email_content}
任务识别要求:
1. 提取需要完成的具体任务
2. 确定任务的截止日期(如果有)
3. 评估任务的优先级
4. 提供完成任务的建议步骤
请以结构化格式返回识别的任务。
"""
response = self.llm.invoke(prompt)
return response.content
def process_batch_emails(self, emails):
"""批量处理邮件"""
results = []
for i, email in enumerate(emails):
print(f"处理邮件 {i+1}/{len(emails)}")
try:
# 解析邮件
parsed = self.parse_email(email)
# 分类邮件
classification = self.classify_email(email)
# 提取信息
info = self.extract_info(email)
# 生成回复
reply = self.generate_reply(email)
# 识别任务
tasks = self.identify_tasks(email)
results.append({
"index": i+1,
"parsed": parsed,
"classification": classification,
"extracted_info": info,
"reply": reply,
"tasks": tasks
})
except Exception as e:
results.append({
"index": i+1,
"error": str(e)
})
return results3.3 智能体构建
创建 agent.py 文件构建智能体:
# agent.py
from langchain_openai import ChatOpenAI
from langchain.agents import AgentType, initialize_agent
from langchain.memory import ConversationBufferMemory
from email_processor import EmailProcessor
from config import OPENAI_API_KEY, SYSTEM_PROMPT
# 初始化LLM
llm = ChatOpenAI(
api_key=OPENAI_API_KEY,
model="gpt-3.5-turbo",
temperature=0.7
)
# 初始化记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 初始化工具类
email_processor = EmailProcessor()
# 定义智能体工具
from langchain.tools import tool
@tool
def process_email(email_content: str) -> str:
"""处理单封邮件,包括分类、信息提取和回复生成"""
try:
# 解析邮件
parsed = email_processor.parse_email(email_content)
# 分类邮件
classification = email_processor.classify_email(email_content)
# 提取信息
info = email_processor.extract_info(email_content)
# 生成回复
reply = email_processor.generate_reply(email_content)
# 识别任务
tasks = email_processor.identify_tasks(email_content)
return f"邮件处理完成:\n\n解析结果:{parsed}\n\n分类结果:{classification}\n\n提取信息:{info}\n\n生成回复:{reply}\n\n识别任务:{tasks}"
except Exception as e:
return f"处理邮件时出错:{str(e)}"
@tool
def process_batch_emails(emails: str) -> str:
"""批量处理多封邮件"""
try:
# 解析邮件列表
email_list = emails.strip().split('\n\n=== 邮件分隔符 ===\n\n')
email_list = [e.strip() for e in email_list if e.strip()]
# 批量处理
results = email_processor.process_batch_emails(email_list)
# 生成摘要
summary = f"批量处理完成,共处理 {len(results)} 封邮件\n\n"
for result in results:
if "error" in result:
summary += f"邮件 {result['index']}:处理失败 - {result['error']}\n"
else:
summary += f"邮件 {result['index']}:\n"
summary += f" 发件人:{result['parsed']['sender']}\n"
summary += f" 主题:{result['parsed']['subject']}\n"
summary += f" 分类:{result['classification'].split('\n')[0]}\n"
summary += f" 优先级:{result['classification'].split('\n')[1]}\n"
summary += "\n"
return summary
except Exception as e:
return f"批量处理邮件时出错:{str(e)}"
@tool
def generate_custom_reply(email_content: str, style: str, instructions: str) -> str:
"""生成自定义风格的邮件回复"""
try:
# 构建提示词
prompt = f"""
请根据以下邮件内容生成一个{style}风格的回复,并遵循以下特别说明:
邮件内容:
{email_content}
特别说明:
{instructions}
回复要求:
1. 开头礼貌问候
2. 针对邮件内容作出回应
3. 遵循特别说明中的要求
4. 结尾礼貌结束语
5. 保持符合风格要求的语言表达
请直接生成回复内容,不要包含其他无关信息。
"""
response = llm.invoke(prompt)
return response.content
except Exception as e:
return f"生成自定义回复时出错:{str(e)}"
# 定义工具列表
tools = [
process_email,
process_batch_emails,
generate_custom_reply
]
# 初始化智能体
email_agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
memory=memory,
system_message=SYSTEM_PROMPT,
verbose=True
)3.4 Web界面构建
创建 app.py 文件构建Gradio Web界面:
# app.py
import gradio as gr
from agent import email_agent
# 处理单封邮件
def handle_process_email(email_content):
# 调用智能体处理邮件
result = email_agent.invoke(f"处理以下邮件:\n{email_content}")
return result['output']
# 处理批量邮件
def handle_process_batch_emails(emails):
# 调用智能体批量处理邮件
result = email_agent.invoke(f"批量处理以下邮件:\n{emails}")
return result['output']
# 生成自定义回复
def handle_generate_custom_reply(email_content, style, instructions):
# 调用智能体生成自定义回复
result = email_agent.invoke(f"生成{style}风格的回复,特别说明:{instructions},邮件内容:\n{email_content}")
return result['output']
# 创建Gradio界面
with gr.Blocks(title="邮件处理智能助手") as demo:
gr.Markdown("""
# 邮件处理智能助手
自动分类邮件、提取信息并生成回复,提高邮件处理效率!
""")
# 标签页
with gr.Tabs():
# 单封邮件处理标签页
with gr.TabItem("单封邮件处理"):
email_input = gr.Textbox(label="输入邮件内容", lines=15, placeholder="请输入邮件内容,格式如下:\n发件人:xxx\n主题:xxx\n日期:xxx\n正文:xxx")
process_btn = gr.Button("处理邮件")
result_output = gr.Textbox(label="处理结果", lines=20)
process_btn.click(
fn=handle_process_email,
inputs=[email_input],
outputs=[result_output]
)
# 批量邮件处理标签页
with gr.TabItem("批量邮件处理"):
batch_input = gr.Textbox(label="输入多封邮件", lines=20, placeholder="请输入多封邮件,每封邮件之间用 '=== 邮件分隔符 ===' 分隔")
batch_btn = gr.Button("批量处理")
batch_output = gr.Textbox(label="处理结果", lines=15)
batch_btn.click(
fn=handle_process_batch_emails,
inputs=[batch_input],
outputs=[batch_output]
)
# 自定义回复标签页
with gr.TabItem("自定义回复"):
reply_email_input = gr.Textbox(label="输入邮件内容", lines=10, placeholder="请输入需要回复的邮件内容")
style_input = gr.Dropdown(label="回复风格", choices=["专业", "友好", "正式", "非正式", "简洁", "详细"])
instructions_input = gr.Textbox(label="特别说明", lines=5, placeholder="请输入回复的特别要求或说明")
reply_btn = gr.Button("生成回复")
reply_output = gr.Textbox(label="生成的回复", lines=15)
reply_btn.click(
fn=handle_generate_custom_reply,
inputs=[reply_email_input, style_input, instructions_input],
outputs=[reply_output]
)
# 启动应用
if __name__ == "__main__":
demo.launch(share=True)4. 部署与使用
4.1 本地部署
# 运行应用
python app.py4.2 Docker容器化
创建 Dockerfile 文件:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 7860
CMD ["python", "app.py"]创建 requirements.txt 文件:
langchain
langchain-openai
gradio
pandas
numpy
scikit-learn
python-dotenv4.3 使用流程
单封邮件处理:
- 在"单封邮件处理"标签页输入邮件内容
- 点击"处理邮件"按钮
- 查看智能体的处理结果,包括分类、信息提取、回复和任务识别
批量邮件处理:
- 在"批量邮件处理"标签页输入多封邮件,每封邮件之间用"=== 邮件分隔符 ==="分隔
- 点击"批量处理"按钮
- 查看批量处理的摘要结果
自定义回复生成:
- 在"自定义回复"标签页输入需要回复的邮件内容
- 选择回复风格
- 输入特别说明或要求
- 点击"生成回复"按钮
- 查看智能体生成的自定义回复
5. 功能测试与优化
5.1 测试场景
单封邮件处理测试:
- 输入不同类型的邮件(工作、个人、促销)
- 验证智能体的分类准确性
- 检查信息提取的完整性
- 评估自动回复的质量
批量邮件处理测试:
- 输入多封不同类型的邮件
- 验证智能体的批量处理能力
- 检查处理结果的一致性
- 评估处理速度和效率
自定义回复测试:
- 为同一邮件生成不同风格的回复
- 验证回复风格的准确性
- 检查特别说明的执行情况
- 评估回复的专业性和相关性
边界情况测试:
- 测试处理空邮件或格式不正确的邮件
- 测试处理非常长的邮件
- 测试处理包含特殊内容的邮件
5.2 优化建议
邮件读取优化:
- 增加对不同邮件格式的支持(Outlook、Gmail等)
- 实现与邮件客户端的集成(如通过IMAP/POP3协议)
- 支持附件处理和解析
分类能力增强:
- 训练专门的邮件分类模型,提高分类准确性
- 实现用户自定义分类标签
- 支持基于历史分类的学习和优化
回复质量提升:
- 增加更多回复风格选项
- 实现回复模板的自定义和管理
- 支持多语言回复生成
功能扩展:
- 增加邮件提醒和跟进功能
- 实现与日历系统的集成
- 支持邮件归档和检索
用户体验优化:
- 增加邮件处理历史记录
- 实现回复的编辑和修改功能
- 优化界面设计,提高操作流畅性
6. 总结与展望
6.1 项目总结
本实战案例成功构建了一个邮件分类与自动回复智能体,具备以下核心功能:
- ✅ 邮件自动分类和优先级识别
- ✅ 关键信息提取
- ✅ 智能自动回复生成
- ✅ 任务识别和提醒
- ✅ 批量邮件处理
- ✅ 自定义回复风格
- ✅ Web界面交互
- ✅ Docker容器化部署
6.2 未来展望
智能化升级:
- 引入更先进的自然语言处理模型,提高理解能力
- 实现基于用户历史邮件的个性化学习
- 开发邮件意图识别系统,更准确地理解用户需求
功能扩展:
- 支持团队邮件协作处理
- 实现邮件数据分析和可视化
- 增加邮件安全性检查
- 支持多语言邮件处理
集成能力:
- 与主流邮件客户端(Outlook、Gmail、QQ邮箱等)集成
- 与任务管理工具(Todoist、TickTick等)集成
- 与日历系统(Google Calendar、Outlook Calendar等)集成
技术创新:
- 探索使用本地大模型进行邮件处理,保护隐私
- 实现邮件处理的自动化工作流
- 开发邮件智能助手的移动应用版本
通过本项目的实践,我们不仅掌握了AI智能体在邮件处理领域的应用方法,也了解了从邮件解析到自动回复的完整技术流程。随着技术的不断进步,邮件分类与自动回复智能体将在提高工作效率、减少信息过载方面发挥越来越重要的作用,成为现代办公环境中不可或缺的助手。