html5响应式网站,软件工程培训机构哪家好,邓修明调研成都网站建设,网站分为哪几种类型文章目录 引言理解 Flows#xff08;工作流#xff09;与 Crews#xff08;协作组#xff09;一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库#xff08;crewai、litellm#xff09; 二、本地DeepSeek R1大模型部署2.1 Ollama框架安… 文章目录 引言理解 Flows工作流与 Crews协作组一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库crewai、litellm 二、本地DeepSeek R1大模型部署2.1 Ollama框架安装2.2 验证Ollama服务状态2.3 运行DeepSeek-R1模型 三、代码实现与运行3.1 项目文件结构说明3.2 main.py核心功能3.3 运行程序3.4 输出日志 四、项目源码五、源码解释Agent、Tasks、工作流5.1 Agent智能体系统设计5.2 Task任务系统设计5.3 工作流设计原理 引言
在人工智能技术日新月异的今天如何将大语言模型LLM与多智能体协作框架结合实现自动化流程已成为开发者关注的热点。本文将分享一个基于CrewAI多智能体框架与DeepSeek-R1本地化大模型的创新实践——我们成功构建了一个具备完整邮件撰写、优化、发送能力的AI协作系统。该方案通过Writer撰写、Editor编辑、Sender发送 三个智能体的有机协作实现了从主题输入到邮件发送的端到端自动化处理不仅展现了多智能体系统的任务分解与流程控制能力更验证了本地化大模型在隐私敏感场景下的实用价值。本文将深入解析该系统的技术架构、实现逻辑以及这种技术组合带来的开发效率提升与部署成本优化。
程序流程图
理解 Flows工作流与 Crews协作组
CrewAI 提供两种强大互补的方法可无缝协作构建复杂的 AI 应用 Crews协作组 由具有真正自主决策能力的 AI 智能体组成的团队通过角色化协作完成复杂任务。Crews 支持
智能体间的自然自主决策动态任务委派与协作定义明确目标和专业能力的专属角色灵活的问题解决方式
Flows工作流 面向生产环境的事件驱动型工作流可精准控制复杂自动化流程。Flows 提供
对现实场景执行路径的细粒度控制任务间安全一致的状态管理AI 智能体与生产级 Python 代码的洁净集成复杂业务逻辑的条件分支处理
协同威力 当 Crews 与 Flows 结合时CrewAI 展现出真正的强大能力使您可以
构建复杂的生产级应用程序在自主性与精准控制间取得平衡处理复杂的现实场景保持清晰可维护的代码结构
一、环境准备与工具安装
1.1 Python环境搭建
确保您的系统上安装了 Python 3.10 3.13。CrewAI 使用 UV 进行依赖项管理和包处理提供无缝的设置和执行体验。 验证安装
python --version 或者 pip --version #查看是否输出版本号Python 3.10 3.131.2 创建并激活虚拟环境
为了保持依赖隔离建议在电脑上创建虚拟环境
打开终端Windows 用 CMD/PowerShellLinux/Mac 用终端。导航到你的工作目录例如 ~/Projects 或 C:\Projects
cd ~/Projects # Linux/Mac
cd C:\Projects # Windows创建虚拟环境
python -m venv deepseek_env激活虚拟环境 Linux/Mac
source deepseek_env/bin/activateWindows
deepseek_env\Scripts\activate激活后终端提示符前会出现 (deepseek_env)。
升级 pip 修复pip安装
Python -m ensurepip --upgrade升级pip
Python -m pip install --upgrade pip1.3 安装核心依赖库crewai、litellm
安装必要库 在虚拟环境中运行
pip install crewai litellm检查是否安装成功
pip show crewai # 显示 crewai 版本信息
pip show litellm # 显示 litellm 版本信息二、本地DeepSeek R1大模型部署
2.1 Ollama框架安装
访问Ollama官网 下载适用于您操作系统的版本。 Linux
curl -fsSL https://ollama.com/install.sh | shMac 下载 .dmg 文件并安装。 Windows 下载可执行文件并安装。
本文演示系统为Windows操作系统 进入官网后点击Download下载 点击Download for Windows进行安装这里以Windows系统示例 下载完毕是一个.exe文件然后双击.exe文件进行安装 安装完成后再终端输入ollama --version来查看是否安装成功
2.2 验证Ollama服务状态
# 检查服务是否运行通用命令
ollama list # 若返回空列表则表示服务正常# 或通过API接口验证
curl http://localhost:11434/api/tags # 预期返回JSON格式模型列表2.3 运行DeepSeek-R1模型
ollama run deepseek-r1:1.5b# 进阶操作可选
ollama ps # 查看模型运行状态
ollama ls # 列出已下载模型
ollama run deepseek-r1:1.5b 你好 # 直接交互测试三、代码实现与运行
3.1 项目文件结构说明
mail-agent-project/
├── main.py # 主程序 - 定义智能体/任务/工作流3.2 main.py核心功能
定义Writer邮件撰写专家/Editor邮件优化专家/Sender邮件发送专员三个智能体构建任务链撰写→润色→发送实现SMTP邮件发送回调主流程控制CrewAI顺序执行
# 代码结构概览
import os
from crewai import Agent, Task, Crew, Process
import smtplib
from email.mime.text import MIMEText
# 配置环境变量/配置LiteLLM的Ollama模型
# 智能体定义Writer/Editor/Sender
# 任务链构建create_writer_task/create_editor_task/create_sender_task
# 邮件发送函数send_email
# 主函数main与程序入口Ollama服务初始化 本地启动模型推理服务为后续LLM调用提供API端点 模型内容生成 Writer智能体通过DeepSeek-R1模型完成原始邮件创作 内容优化阶段 Editor智能体对文本进行结构化重组与语气调整 SSL加密认证 采用SMTP_SSL协议保障邮箱账号认证安全性
3.3 运行程序
进入虚拟环境
source deepseek_env/bin/activate # Linux/Mac
# 或
deepseek_env\Scripts\activate # Windows执行邮件智能体程序
python test.py3.4 输出日志
因为我这里使用的事deepseek-r1:1.5b模型大模型思考的过程以及撰写的内容可能不如训练参数更多的模型后续大家可以自行发挥对提示词进行优化以及使用更优质的大模型来完成我这里只提供一个部署搭建思路。 【系统启动】初始化邮件智能体工作流...
├─ 当前主题感谢朋友的支持
├─ 发件账户xiongjava163.com
└─ 收件地址xiongjava163.com# Agent: 邮件撰写专家
## Task: 请以感谢朋友的支持为主题撰写正式中文信件要求1. 采用标准书信格式称呼、正文、结尾、落款2. 正文至少包含3个逻辑连贯的段落3. 总字数控制在300-500字# Agent: 邮件撰写专家
## Final Answer:
尊敬的[朋友名称]先生、女士您好首先请允许我向您表示最诚挚的感谢。在过去的[时间段内]您的支持与我息息相关您的耐心和智慧让我感受到最大的幸福与满足。感谢您一直以来对我的关注和支持是您付出的时间与精力换来的我如今如此的成长与进步。如果您有机会请与我共同参与一些活动或分享自己的经历这样不仅能够增进我们之间的友谊还能让我继续与您合作一段时间。希望未来能有更多机会重逢再次见证彼此的支持与关怀。最后请允许我向您表示最热烈的欢迎和期待此致
敬礼[您的姓名]
[日期]# Agent: 邮件优化专家
## Task: 对信件进行专业润色确保1. 对信件进行专业润色一定要对邮件撰写专家杜撰的邮件内容进行更新优化不能完全返回和邮件撰写专家一样的邮件。# Agent: 邮件优化专家
## Final Answer:
尊敬的[朋友名称]先生、女士您好首先请允许我向您表示最诚挚的感谢。在过去的[时间段内]您的支持与我息息相关您的耐心和智慧让我感受到最大的幸福与满足。感谢您一直以来对我的关注和支持是您付出的时间与精力换来的我如今如此的成长与进步。如果您有机会请与我共同参与一些活动或分享自己的经历这样不仅能够增进我们之间的友谊还能让我继续与您合作一段时间。希望未来能有更多机会重逢再次见证彼此的支持与关怀。最后请允许我向您表示最热烈的欢迎和期待此致
敬礼[您的姓名]
[日期]# Agent: 邮件发送专员
## Task: 直接使用邮件优化专家返回的内容不能由你自己邮件发送专员杜撰不要进行擅自优化和篡改信件。
收件地址xiongjava163.com
发件账户xiongjava163.com# Agent: 邮件发送专员
## Final Answer:
尊敬的[朋友名称]先生、女士您好首先请允许我向您表示最诚挚的感谢。在过去的[时间段内]您的支持与我息息相关您的耐心和智慧让我感受到最大的幸福与满足。感谢您一直以来对我的关注和支持是您付出的时间与精力换来的我如今如此的成长与进步。如果您有机会请与我共同参与一些活动或分享自己的经历这样不仅能够增进我们之间的友谊还能让我继续与您合作一段时间。希望未来能有更多机会重逢再次见证彼此的支持与关怀。最后请允许我向您表示最热烈的欢迎和期待此致
敬礼[您的姓名]
[日期]四、项目源码
import os
from crewai import Agent, Task, Crew, Process
import smtplib
from email.mime.text import MIMEText# 配置环境变量
os.environ[OPENAI_API_KEY] NA
os.environ[OLLAMA_API_BASE] http://localhost:11434# 配置 LiteLLM 的 Ollama 模型
model_name ollama/deepseek-r1:1.5b# 定义代理
writer Agent(role邮件撰写专家,goal根据用户提供的主题生成结构清晰、情感真挚的中文信件初稿,backstory您是一位拥有十年写作经验的职业撰稿人擅长捕捉情感细节并使用符合中文表达习惯的修辞手法。熟悉正式/非正式场景的文体转换能快速构建包含开头、主体、结尾的标准信件结构。,llmmodel_name,verboseTrue,allow_delegationFalse
)editor Agent(role邮件优化专家,goal对初稿进行中文语境下的专业润色,backstory您是从业八年的专业编辑持有汉语水平考试(HSK)高级认证。擅长1. 调整语气适合性 2. 优化段落衔接 3. 修正语法错误 4. 提升表达精准度熟悉商务信函、私人信件等不同场景的文体要求。,llmmodel_name,verboseTrue,allow_delegationFalse
)sender Agent(role邮件发送专员,goal严格遵守安全协议完成邮件投递,backstory只负责传递信息不做其他动作,llmmodel_name,verboseTrue,allow_delegationFalse
)# 定义任务
def create_writer_task(topic):return Task(descriptionf请以{topic}为主题撰写正式中文信件要求1. 采用标准书信格式称呼、正文、结尾、落款2. 正文至少包含3个逻辑连贯的段落3. 总字数控制在300-500字,agentwriter,expected_output符合GB/T 15834-2011中文排版规范的信件文本含标点符号正确使用)def create_editor_task():return Task(description对信件进行专业润色确保1. 对信件进行专业润色一定要对邮件撰写专家杜撰的邮件内容进行更新优化不能完全返回和邮件撰写专家一样的邮件。,agenteditor,expected_output优化后的标准中文信件文本保留原始格式标记)# 修改后的发送任务定义添加editor_output参数
def create_sender_task(email_to, email_from, email_password, editor_output):return Task(descriptionf直接使用邮件优化专家返回的内容不能由你自己邮件发送专员杜撰不要进行擅自优化和篡改信件。
收件地址{email_to}
发件账户{email_from},agentsender,expected_output只负责传递信息不对文章进行篡改保证对邮件优化专家撰写的内容原样发送,context[editor_output], # 显式绑定编辑任务callbacklambda _: send_email(email_to,email_from,email_password,editor_output.output.raw # 直接使用编辑任务的原始输出))
# 邮件发送功能
def send_email(to_address, from_address, password, letter_content):subject 感谢信print(f发送邮件 - 主题: {subject}, 收件人: {to_address}, 发件人: {from_address})print(f邮件内容: {letter_content})msg MIMEText(letter_content)msg[Subject] subjectmsg[From] from_addressmsg[To] to_addresstry:# 使用 SMTP_SSL 连接 465 端口无需 starttls()with smtplib.SMTP_SSL(smtp.163.com, 465, timeout30) as server:server.set_debuglevel(1) # 启用调试输出server.login(from_address, password)server.sendmail(from_address, to_address, msg.as_string())print(邮件发送请求已提交至服务器)return 邮件发送成功except smtplib.SMTPAuthenticationError as auth_error:print(f认证失败: {auth_error})raise Exception(fSMTP 认证失败: {auth_error})except smtplib.SMTPException as smtp_error:print(fSMTP 错误: {smtp_error})raise Exception(fSMTP 错误: {smtp_error})except Exception as e:print(f其他错误: {e})raise Exception(f邮件发送失败: {e})# 主流程
def main():topic 感谢朋友的支持email_to xiongjava163.comemail_from xiongjava163.comemail_password KL28MAziXpQ8p7Mywriter_task create_writer_task(topic)editor_task create_editor_task()# 传递editor_task作为第四个参数sender_task create_sender_task(email_to,email_from,email_password,editor_task # 新增参数)crew Crew(agents[writer, editor, sender],tasks[writer_task, editor_task, sender_task],processProcess.sequential,verboseTrue)print(\n【系统启动】初始化邮件智能体工作流...)print(f├─ 当前主题{topic})print(f├─ 发件账户{email_from})print(f└─ 收件地址{email_to}\n)result crew.kickoff()print(\n######################)print(【执行结果】)print(f详情{result})print(######################)
if __name__ __main__:main()五、源码解释Agent、Tasks、工作流
5.1 Agent智能体系统设计
Agent代表具有特定专业能力的虚拟角色每个Agent都承担明确的工作职责
邮件撰写专家Writer
writer Agent(role邮件撰写专家,goal根据用户提供的主题生成结构清晰、情感真挚的中文信件初稿,backstory包含专业背景和能力描述,llmmodel_name,verboseTrue,allow_delegationFalse
)role定义角色名称明确职责范围goal设定核心工作目标指导AI行为方向backstory详细背景故事包含 专业经验年限10年写作经验核心能力情感捕捉、中文修辞专业领域文体转换、信件结构 llm指定使用的语言模型verbose开启详细日志输出allow_delegation禁止任务委派保持专业专注 邮件优化专家Editor
editor Agent(role邮件优化专家,goal对初稿进行中文语境下的专业润色,backstory包含认证资质和专业技能,...
)特别强调中文专业认证HSK高级明确四项核心优化能力 语气适配段落衔接语法修正表达精准度 邮件发送专员Sender
sender Agent(role邮件发送专员,goal严格遵守安全协议完成邮件投递,...
)职责高度聚焦仅负责信息传递禁止内容修改保持内容完整性强调安全规范确保投递过程合规 5.2 Task任务系统设计
每个Task定义具体的工作单元包含完整的执行规范
撰写任务Writer Task
def create_writer_task(topic):return Task(descriptionf请以{topic}为主题撰写正式中文信件...,agentwriter,expected_output符合GB/T 15834-2011中文排版规范的信件文本)动态参数通过topic参数实现内容定制化三层式要求规范 格式要求标准书信格式结构要求3个逻辑段落量化指标300-500字 国家标准引用GB/T 15834-2011确保专业合规性 优化任务Editor Task
def create_editor_task():return Task(description对信件进行专业润色...,agenteditor,expected_output优化后的标准中文信件文本)质量管控机制 明确禁止简单复制“不能完全返回相同内容”要求保留原始格式标记 迭代优化重点 情感表达优化专业术语校准文化适应性调整 发送任务Sender Task
def create_sender_task(..., editor_output):return Task(description直接使用优化后的内容...,agentsender,context[editor_output],callbacklambda _: send_email(...))输入约束 强制使用编辑后内容editor_output禁止内容篡改“原样发送” 系统集成 通过context绑定任务依赖使用callback触发邮件发送函数 安全机制 敏感信息密码通过参数传递使用SSL加密连接 5.3 工作流设计原理
crew Crew(agents[writer, editor, sender],tasks[writer_task, editor_task, sender_task],processProcess.sequential,verboseTrue
)顺序流程控制 撰写 → 优化 → 发送 严格串行执行前序任务输出自动成为后续任务输入