使用 Gradio 与 AI 打造一个智能邮件分类与回复助理
在信息爆炸的时代,每天处理堆积如山的电子邮件已成为许多人的日常。如何快速从中筛选出重要邮件,并优雅地草拟回复,是提升工作效率的关键。
今天,我们将引导您使用 Python、强大的 Gradio 框架以及一个大型语言模型(LLM)API,从零开始打造一个“智能邮件分类与回复助理”。这个应用程序不仅能自动判断邮件的紧急程度,还能为您生成得体的回复草稿。
应用链接:mlsqqqq/TextAnalysis
项目目标
我们的目标是建立一个直观的 Web UI,用户可以:
- 粘贴邮件内容:将任何邮件文本输入到应用程序中。
- 自动分类:AI 将邮件自动归类为“需立即处理”、“可稍后回复”或“广告 / 垃圾邮件”。
- 生成回复草稿:对于需要回复的邮件,AI 会自动生成一份简洁、礼貌的回复建议。
- 调整参数:用户可以自由调整模型的“温度”和“最大回复长度”,以控制回复的创意性和篇幅。
我们将使用哪些工具?
- Python: 我们的开发语言。
- OpenAI SDK: 用于与大型语言模型 API 进行交互。虽然我们使用的是 OpenAI 的客户端库,但它可以配置为与任何兼容的 API 端点(如 DeepSeek)连接。
- Gradio: 一个非常出色的 Python 库,可以快速为您的机器学习模型或任何 Python 脚本创建简洁、易于交互的 Web UI。
代码详解
现在,让我们深入了解这段代码的核心组成部分。
1. 初始化 API 客户端
这是应用程序与 AI 大脑沟通的桥梁。我们使用 openai 库来创建一个客户端实例。请注意,base_url 参数让我们可以灵活地将请求指向任何兼容的 API 服务。
Python
# 请先安装 OpenAI SDK: pip install openai
import os
import gradio as gr
from openai import OpenAI
# --- 1. 初始化 API 客户端 ---
api_key = 'sk-edc6b3cecf5b4290886c607c0f0bd4c9' # 为了安全,建议从环境变量读取
client = None
initialization_error = None
if not api_key:
initialization_error = "错误:API Key 未设置。"
else:
try:
# 这里的 base_url 可以指向任何兼容 OpenAI 的 API 端点
client = OpenAI(
api_key=api_key,
base_url="https://api.deepseek.com" # 示例端点
)
print("API 客户端初始化成功。")
except Exception as e:
initialization_error = f"API 客户端初始化失败: {e}"
安全提示:直接在代码中硬编码 API Key 是不安全的做法。在生产环境中,强烈建议您使用环境变量 (os.environ.get('YOUR_API_KEY')) 来管理您的密钥。
2. 设计完美的系统提示词 (System Prompt)
系统提示词是我们赋予 AI 角色和指令的关键。一个清晰、结构化的提示词能让模型更好地理解它的任务,并以我们期望的格式输出结果。
Python
# --- 2. 系统提示词 ---
SYSTEM_PROMPT = """你是一位智能邮件分类与回复助理。
你的任务:
1. 根据邮件内容判断其类别,类别仅限于:
- 需立即处理
- 可稍后回复
- 广告 / 垃圾邮件
2. 如果邮件是正常沟通类(非广告),请自动生成一份简短、自然、礼貌的回复草稿。
3. 输出格式要求:
分类:<类别>
回复草稿:<生成的邮件回复内容或“无须回复”>
请保持输出简洁清晰。
"""
这个提示词明确定义了 AI 的角色(助理)、任务(分类与回复)以及最重要的输出格式。这种结构化要求有助于我们后续解析模型的输出。
3. 核心分析函数
这是应用程序的大脑。analyze_email 函数接收来自前端的邮件内容和参数,将它们与系统提示词组合,然后发送给 AI 模型。
Python
# --- 3. 核心分析函数 ---
def analyze_email(email_text, temperature, max_new_tokens):
"""使用 AI API 分析邮件并生成回复"""
if initialization_error:
return initialization_error
if not client:
return "错误:API 客户端未成功初始化。"
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": f"以下是用户收到的邮件内容:\n{email_text}"}
]
try:
print("正在向 API 发送请求...")
response = client.chat.completions.create(
model="deepseek-chat", # 您可以更换为您想用的模型
messages=messages,
temperature=temperature,
max_tokens=int(max_new_tokens),
stream=False
)
print("已收到 API 的回复。")
output = response.choices[0].message.content
return output.strip()
except Exception as e:
print(f"调用 API 时发生错误: {e}")
return f"调用 API 时发生错误,请检查您的网络连接、API Key 或终端日志。\n错误详情: {e}"
此函数处理了所有后端逻辑:检查初始化状态、构建请求、调用 API 并处理潜在的错误。
4. 使用 Gradio 搭建用户界面
Gradio 的魅力在于它能用极少的代码构建出交互式界面。我们使用 gr.Blocks 来获得更灵活的布局控制。
Python
# --- 4. Gradio 页面布局 ---
with gr.Blocks(css="""...""") as demo:
gr.HTML("<div id='title'>📧 智能邮件分类与回复助理</div>")
# 示例邮件,方便用户测试
gr.Markdown("**示例邮件(点击即可填充以做测试)**")
example_list = gr.Dropdown(...)
# 邮件输入框
email_input = gr.Textbox(
label="输入邮件内容",
placeholder="请粘贴或选择一封邮件内容...",
lines=10
)
# 将 Dropdown 的选择填充到输入框
example_list.change(fn=fill_example, inputs=example_list, outputs=email_input)
# 参数滑块
with gr.Row():
temperature = gr.Slider(...)
max_tokens_slider = gr.Slider(...)
# 按钮和输出框
analyze_btn = gr.Button("✨ 开始分析")
output_box = gr.Textbox(label="AI 分析结果", lines=8)
# 点击按钮时触发核心函数
analyze_btn.click(
analyze_email,
inputs=[email_input, temperature, max_tokens_slider],
outputs=output_box
)
这段代码定义了所有的 UI 组件:标题、示例下拉菜单、文本输入框、参数滑块、触发按钮和结果显示框。最关键的是 analyze_btn.click(...) 这一行,它将前端的输入与后端的 analyze_email 函数完美地连接起来。
如何运行这个应用?
-
安装依赖库:
Bash
pip install openai gradio -
保存代码: 将完整的代码保存为一个 Python 文件,例如
email_assistant.py。 -
设置您的 API Key: 在代码中找到
api_key = 'sk-...'这一行,并换上您自己的有效密钥。 -
启动应用: 在终端中执行以下命令:
Bash
python email_assistant.py -
打开浏览器: 终端将显示一个本地 URL (通常是
http://127.0.0.1:7860)。在浏览器中打开此链接,即可开始使用您的智能邮件助理!
总结
通过这个项目,我们展示了如何将大型语言模型的强大能力与 Gradio 的易用性结合,快速开发出一个实用且具备交互性的 AI 应用。您可以基于这个框架,进一步扩展功能,例如支持多语言、增加更多分类、或甚至连接到您的真实邮箱。
希望这篇文章能激发您的灵感,开始打造属于您自己的 AI 小工具!