当前位置: 首页 > news >正文

11.大模型Agent应用

1 大模型Agent的应用


1.1 项目介绍

本次项目以CrewAI为框架,开发AI Agent实现自动写情书以及发送邮件。

CrewAI是一个创新的多角色agent框架,专为角色扮演中的AI代理提供自动化设置。它通过促进AI代理之间的合作,使得这些代理能够共同解决复杂问题。


本次项目基本流程图:


1.2 准备工作

在开展此项目之前,完成环境配置:

首先,确保你的机器安装了Python3.10-Python3.11, 终端查看python的版本: $ python --version
如果还没有下载python的小伙伴,可以复制链接下载:https://www.python.org/
  • 安装第三方库:pip install -r requirements.txt
  • requirements.txt内容如下:
aiohttp==3.9.1
aiosignal==1.3.1
annotated-types==0.6.0
anyio==4.2.0
attrs==23.2.0
certifi==2023.11.17
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
crewai==0.1.32
curl-cffi==0.5.10
dataclasses-json==0.6.3
distro==1.9.0
duckduckgo_search==4.2
frozenlist==1.4.1
greenlet==3.0.3
h11==0.14.0
httpcore==1.0.2
httpx==0.26.0
idna==3.6
jsonpatch==1.33
jsonpointer==2.4
langchain==0.1.1
langchain-community==0.0.13
langchain-core==0.1.13
langchain-openai==0.0.2.post1
langsmith==0.0.83
lxml==5.1.0
marshmallow==3.20.2
multidict==6.0.4
mypy-extensions==1.0.0
numpy==1.26.3
openai==1.8.0
packaging==23.2
pycparser==2.21
pydantic==2.5.3
pydantic_core==2.14.6
PyYAML==6.0.1
regex==2023.12.25
requests==2.31.0
sniffio==1.3.0
SQLAlchemy==2.0.25
tenacity==8.2.3
tiktoken==0.5.2
tqdm==4.66.1
typing-inspect==0.9.0
typing_extensions==4.9.0
urllib3==2.1.0
yarl==1.9.4
  • 使用Qwen大模型的模型
没有api-key的需要去平台注册,或者重新创建。
  • 可以借助Ollama使用本地大模型

1.3 代码实现

1.3.1 导入必备的工具包
from crewai import Agent, Task, Crew, Process  # CrewAI相关组件
from agent_tools import CustomTools  # 自定义工具
from dotenv import load_dotenv, find_dotenv  # API环境配置
from langchain_community.chat_models import ChatTongyi  # 模型load_dotenv()client = ChatTongyi()

1.3.2 定义Agent
作家Agent
poet = Agent(role='作家', #表明其主要功能。goal='根据用户需求,创作出情感丰富的文章(最长字数不超过300个词)。', # 目标backstory="""你作为一名著名的作家,拥有千万级别的粉丝,最擅长写情感类型的文章。""",verbose=True, # 设置为True,这通常意味着代理将提供详细的日志、输出或解释allow_delegation=False, # 设置为False,表示不允许此代理将其任务委派给其他代理或进程llm=client
)

内容编辑Agent
letter_writer = Agent(role='内容编辑',goal='对作家撰写的文章内容进行精心编辑。',backstory="""作为一名经验丰富的编辑,你在编辑书信方面有多年的专业经验,你需要将作家写的文章内容整理编排成书信的样式,并将书信内容存储在本地磁盘上。你必须使用提供的工具将存储到指定文件中,并确保文件已保存到磁盘上。当文件成功保存时返回 "书信已保存.".""",verbose=True,allow_delegation=False,tools=[CustomTools.store_poesy_to_txt],llm=client
)

定义寄信人Agent
sender = Agent(role='寄信人',goal='将编辑好的书信以邮件的形式发送给心仪的人',backstory="""你是一名勤恳的信使,专注于将书信传递给每个人,你必须使用提供的工具将指定文件的书信内容中传送到其他人的邮箱里,如果成功传送,记得返回"信件已发送"""",verbose=True,allow_delegation=True,tools=[CustomTools.send_message],llm=client
)

1.3.3 自定义工具类函数

发送邮件的工具类函数

from langchain.tools import tool
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from dotenv import load_dotenv
import osload_dotenv()class CustomTools(object):@tool("将文本写入文档中")def store_poesy_to_txt(content: str) -> str:"""将编辑后的书信文本内容自动保存到txt文档中"""try:filename = "poie.txt"# 将文本写入txt文档中with open(filename, 'w') as file:file.write(content)# 返回结果展示:文件已经写入return f"File written to {filename}."except Exception:return "Error with the input for the tool."@tool("发送文本到邮件")def send_message(self):"""读取生成的本地书信文件txt文本,并以邮件的形式发送到某个人的邮箱中"""# 发件人from_name = "小可爱"# 发件邮箱from_addr = "1980xxxx428@163.com"# 发件邮箱授权码,注意不是QQ邮箱密码from_pwd = os.environ.get("EMAIL_PWD")# 收件邮箱to_addr = "vixxxanx@icloud.com"# 邮件标题my_title = "520小情书"# 邮件正文# 书信路径filename = "poie.txt"# 定义md文档的绝对路径with open(filename) as f:my_msg = f.read()# MIMEText三个主要参数# 1. 邮件内容# 2. MIME子类型,plain表示text类型# 3. 邮件编码格式,使用"utf-8"避免乱码msg = MIMEText(my_msg, 'plain', 'utf-8')msg['From'] = formataddr([from_name, from_addr])# 邮件的标题msg['Subject'] = my_title# SMTP服务器地址,QQ邮箱的SMTP地址是"smtp.qq.com"smtp_srv = "smtp.163.com"try:# 不能直接使用smtplib.SMTP来实例化,第三方邮箱会认为它是不安全的而报错# 使用加密过的SMTP_SSL来实例化,它负责让服务器做出具体操作,它有两个参数# 第一个是服务器地址,但它是bytes格式,所以需要编码# 第二个参数是服务器的接受访问端口,SMTP_SSL协议默认端口是465srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)# 使用授权码登录QQ邮箱srv.login(from_addr, from_pwd)# 使用sendmail方法来发送邮件,它有三个参数# 第一个是发送地址# 第二个是接受地址,是list格式,可以同时发送给多个邮箱# 第三个是发送内容,作为字符串发送srv.sendmail(from_addr, [to_addr], msg.as_string())print('发送成功')except Exception as e:print('发送失败', e)finally:# 无论发送成功还是失败都要退出你的QQ邮箱srv.quit()

1.3.4 为Agent定义任务
作家Agent的任务
content = input("请输入你的需求:\n")
# 为你设计的Agent创建任务
task1 = Task(description=f"""用户需求:{content}。你最后给出的答案必须是一份富含爱情表示的情书.""",agent=poet
)

内容编辑Agent的任务
task2 = Task(description="""查找任何语法错误,进行编辑和格式化(如果需要)。并要求将内容保存在本地磁盘中。将内容保存到本地非常重要,你最后的答案必须是信息是否已被存储在本地磁盘中.""",agent=letter_writer
)

寄信人Agent的任务
task3 = Task(description="""根据本次磁盘保存的书信内容,你将整理并发送邮件给心仪的人,这个很重要.
你最后的答一定要成功发送该邮件.""",agent=sender
)

1.3.5 工作人员和流程
crew = Crew(agents=[poet, letter_writer, sender],tasks=[task1, task2, task3],verbose=2,process=Process.sequential # 使用按顺序执行任务的流程。上一个任务的结果将作为附加内容传递给下一个任务。
)
result = crew.kickoff()print("######################")
print(result)

输出结果:

小节总结

介绍了如何基于CrewAI框架,实现多个AI Agent协同工作,并完成自动写书信以及发送邮件的案例。

http://www.dtcms.com/a/578294.html

相关文章:

  • 学院网站建设目的与意义手机商城在哪里找到
  • MySQL的GROUP_CONCAT函数详解
  • Temu平台新规全面收紧,卖家如何破局迎战年终大促?
  • 底层视觉及图像增强-项目实践-细节再<十六-9,如何用AI实现LED显示画质增强:总结再回顾>:从LED大屏,到手机小屏,快来挖一挖里面都有什么
  • 怎么做网站后缀识别符号才不会变电脑淘宝网页版
  • 网站访客qq获取系统 报价陕西建设局官方网站
  • 免费做电子书的网站有哪些win2008系统做网站
  • SQL中的函数索引/表达式索引
  • 上海房地产网站建设报价响应式网站开发 三合一建站
  • 中企动力建设网站做网站图片要求
  • TCP协议深度解析:从三次握手到可靠传输的底层机制
  • numpy___数组/图像形状改变(transpose和reshape详解)
  • 【TestNG自动化测试框架详解】
  • 怎么查询备案号商城网站建设优化推广
  • [特殊字符] Vue3 项目最佳实践:组件命名、目录结构与类型规范指南
  • 五子棋游戏人机对战模式技术分析
  • 沈阳网站开发外包免费咨询律师24小时
  • 公司网站设计与制作揭阳网站建设antnw
  • Nature Genetics | 本周最新文献速递
  • 机器学习中拟合、欠拟合、过拟合是什么
  • 工程BOQ交付:清单编制关键指南
  • 上海闵行做网站优化软件有哪些
  • 网站免费推广怎么做国外网站界面
  • 每日两题day35
  • 基于 C++ 的高性能批量媒体文件压缩程序
  • Rocky9操作系统基于MySQL安装Zabbix7详解
  • 苏州知名网站制作公司wordpress博客中文插件
  • Redis学习(十五)Mac 安装 Redis
  • 怎样免费做书画网站谷歌关键词搜索
  • 网站二级域名怎么设置网站点击软件排名