1. 获取邮件数据
您的代码已经通过阿里云API成功获取了邮件数据。这部分代码已经能够从阿里云邮箱拉取指定数量的邮件并提取其基本信息,包括主题、发送时间、收件人、发件人和正文内容。
2. 分析邮件内容
您通过OllamaLLM
类调用了本地的deepseek32b
大模型进行邮件内容的分析。以下是将邮件分析部分更清晰地结合到处理流程中的详细实现:
3. 集成阿里云邮件API与deepseek32b
模型分析
以下是优化后的代码,重点是邮件数据的获取、预处理和与本地模型的集成。假设您已经在本地成功部署了deepseek32b
模型,并且模型API的访问路径为http://localhost:11434
。
代码示例:
from pprint import pprint import requests from langchain_ollama import OllamaLLM# 格式化邮件输出 def format_email_table(email_table):"""格式化输出邮件表格数据"""def clean_content(text, max_length=500):"""清理内容并限制长度"""text = text.replace('<think>', '').replace('</think>', '').strip()return text[:max_length] + '...' if len(text) > max_length else textformatted_output = (f"邮件主题: {email_table.get('邮件主题', '无')}\n"f"发送时间: {email_table.get('发送时间', '未知')}\n"f"收件人: {', '.join(email_table['收件人']) if email_table.get('收件人') else '无'}\n"f"抄送人: {', '.join(email_table['抄送人']) if email_table.get('抄送人') else '无'}\n"f"发件人: {email_table.get('发件人', '未知')}\n"f"邮件正文内容: {clean_content(email_table.get('邮件正文内容', '无内容'))}\n"f"任务类型分类: {clean_content(email_table.get('任务类型分类', '未分类'))}\n"f"情感分析结论: {clean_content(email_table.get('情感分析结论', '未分析'))}\n"f"影响分析: {clean_content(email_table.get('影响分析', '未分析'))}\n")return formatted_output# 获取邮件数据 def get_messages(email_address, inbox, count_emails_nabers):"""从指定邮箱获取并处理邮件"""url = f"https://alimail-cn.aliyuncs.com/v2/users/{email_address}/mailFolders/{inbox}/messages"querystring = {"size": str(count_emails_nabers)}headers = {"Content-Type": "application/json","Authorization": "Bearer YOUR_ACCESS_TOKEN_HERE" # 替换为实际的AccessToken }try:response = requests.get(url, headers=headers, params=querystring)response.raise_for_status()except requests.exceptions.RequestException as e:print(f"请求失败: {e}")return []messages = response.json().get('messages', [])if not messages:print("未获取到邮件。")return []processed_messages = []for message in messages:try:# 提取邮件基本信息subject = message.get('subject', '无主题')sent_time = message.get('sentDateTime', '未知时间')to_recipients = [recipient.get('email', '') for recipient in message.get('toRecipients', [])]cc_recipients = [recipient.get('email', '') for recipient in message.get('ccRecipients', [])]from_sender = message.get('from', {}).get('email', '未知发件人')# 获取邮件正文body_content = get_email_body(message)if not body_content:print("跳过无正文邮件")continue# 分析邮件内容analysis_data = analyze_email_content(body_content)# 构建结构化数据email_table = {"邮件主题": subject,"发送时间": sent_time,"收件人": to_recipients,"抄送人": cc_recipients,"发件人": from_sender,"邮件正文内容": body_content,**analysis_data}processed_messages.append(email_table)except Exception as e:print(f"处理邮件时出错: {e}")continuereturn processed_messages# 提取邮件正文内容 def get_email_body(message):"""提取邮件正文内容"""for part in message.get('parts', []):if part.get('contentType') == 'text/plain':return part.get('content', '')body = message.get('body', {})if body.get('contentType') == 'text/plain':return body.get('content', '')return message.get('summary', '')# 使用大语言模型分析邮件内容 def analyze_email_content(content):"""使用大语言模型分析邮件内容"""model = OllamaLLM(base_url="http://localhost:11434", # 本地部署的deepseek32b模型的API路径model="deepseek-r1:32b", # 使用的具体模型名称device="cuda", # 如果您有GPU,建议使用CUDA加速verbose=False)try:prompts = {"任务类型分类": "请用一句话直接分类此邮件的任务类型,不要解释和思考过程。示例:'安全告警通知'","邮件内容": "请总结出邮件的内容,要简明扼要,不要解释和思考过程。示例:'这是一封在什么时候,什么地点,要做什么的邮件'","情感分析结论": "请用一句话直接分析邮件的情感倾向,不要解释和思考过程 示例:'中性偏警示'","影响分析": "请用分点列举的简洁格式(不要任何前缀符号)分析潜在影响,不要解释和思考过程. 示例:\n1. 服务器安全风险\n2. 业务连续性影响"}results = {}for field, prompt in prompts.items():full_prompt = f"{prompt}\n\n邮件内容:\n{content[:5000]}" # 限制输入长度response = model.invoke(input=full_prompt)cleaned = response.strip()if '示例:' in cleaned:cleaned = cleaned.split('示例:')[0].strip()results[field] = cleanedreturn resultsexcept Exception as e:print(f"分析邮件内容时出错: {e}")return {"任务类型分类": "分析失败","回复话术建议": "分析失败","情感分析结论": "分析失败","影响分析": "分析失败"}# 主程序入口 if __name__ == '__main__':# 获取指定邮箱的邮件并处理res = get_messages('xxx@singsong.com.cn', 'inbox', 10)if res:print("\n处理结果:")for index, email in enumerate(res, 1):print(f"【邮件 {index}】")print(format_email_table(email))print("=" * 60)else:print("未处理任何邮件")
4. 说明
-
邮件获取: 使用阿里云API从指定邮箱拉取最新的10封邮件。您需要使用自己的Access Token来进行认证(替换代码中的
YOUR_ACCESS_TOKEN_HERE
)。 -
邮件分析: 利用
deepseek32b
模型对邮件正文进行分析。模型的分析包括任务类型分类、情感分析、内容摘要和影响分析。 -
格式化输出: 每封邮件经过分析后,格式化输出邮件的基本信息和分析结果,方便查看和后续处理。
5. 运行环境要求
- 本地部署
deepseek32b
模型,并确保模型服务正常运行,API可通过http://localhost:11434
访问。 - 安装
requests
和langchain_ollama
库:
通过这种方式,您可以将阿里云企业邮箱与本地的deepseek32b
大模型进行集成,自动分析并处理邮件内容。