我将通过阿里云企业邮箱API获取邮件数据,并与本地部署的deepseek32b模型进行集成分析。以下是具体实现方案和代码,您可以参考并集成到您的系统中。

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 text

    formatted_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}")
            continue

    return 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] = cleaned

        return results

    except 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. 说明

  1. 邮件获取: 使用阿里云API从指定邮箱拉取最新的10封邮件。您需要使用自己的Access Token来进行认证(替换代码中的YOUR_ACCESS_TOKEN_HERE)。

  2. 邮件分析: 利用deepseek32b模型对邮件正文进行分析。模型的分析包括任务类型分类、情感分析、内容摘要和影响分析。

  3. 格式化输出: 每封邮件经过分析后,格式化输出邮件的基本信息和分析结果,方便查看和后续处理。

5. 运行环境要求

  • 本地部署deepseek32b模型,并确保模型服务正常运行,API可通过http://localhost:11434访问。
  • 安装requestslangchain_ollama库:
     
    pip install requests langchain-ollama

通过这种方式,您可以将阿里云企业邮箱与本地的deepseek32b大模型进行集成,自动分析并处理邮件内容。

posted @   *感悟人生*  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示