自动化您的任务——crewAI 初学者教程

news/2024/7/25 3:41:54/文章来源:https://blog.csdn.net/klam2020/article/details/139090635

今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息:crewAI。 我将在这里或那里跳过一些内容,使本教程成为一个精炼的教程,概述帮助您入门的关键概念和要点

今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息:crewAI。 我将在这里或那里跳过一些内容,使本教程成为一个精炼的教程,概述帮助您入门的关键概念和要点。

什么是crewAI?

crewAI 是由 João Moura 创建的框架。 它旨在建立一个人工智能代理团队,共同完成任务。 它建立在LangChain之上,并提供直观易用的API。

为什么我需要AI代理?

假设您是一名博主,花费大量时间研究和撰写内容。 您能否自动化该过程并节省无数时间?

或者,您可能是 SEO 专家,并且浪费时间生成和解释报告。 有没有办法自动执行此操作,以便您可以专注于 SEO 的战略方面?

这两个问题的答案都是:是的,有。

在婴儿期,代理由于其效率和速度而有潜力取代人类在现实世界中完成的许多流程。

核心crewAI组件

我们将讨论crewAI 最重要的组成部分。 以下是我们将要介绍的内容的细分:

  • Agents
  • Tasks
  • Tools
  • Crews (and Processes)

现在,如果我将以上几点放在一个句子中来解释它们是如何联系在一起的,那么这句话将是这样的:

Crews, made up of Agents perform Tasks using Tools by following Processes. *

无法将内存组件放入该句子中 - 如果可以,请在评论中分享! 

认识 crewAI

假设您是一位博主(像我一样),希望优化您的促销后流程。 为了简单起见,我们假设这是一个 3 步过程,如下所示:

  • 获取博客上的最新帖子。
  • 根据该帖子写一条推文。
  • 根据帖子撰写新闻通讯电子邮件。

现在我将向您展示crewAI 如何帮助我在几秒钟内(而不是通常需要几分钟或几小时)实现上述目标。

crewAI 中的代理

代理一起工作,每个代理使用一种或多种工具为团队做出贡献,以解决共同的目标。

如果我们回到我们的示例,我们将需要创建两个代理。 第一个将从我的博客中提取最新帖子,然后第二个将使用该内容将其转换为 Twitter(或 X)帖子和时事通讯电子邮件。

好吧,太酷了 - 让我们看看第一个代理在 Python 中是什么样子的:

from crewai import Agent...extractor = Agent(role='Content Retriever',goal='Given a URL you will retrieve the content.',backstory='''As an expert at retrieving complete and accurateinformation, you are responsible for presenting the content of webpagesthat will be used to create engaging content for twitter and a newsletter.''',verbose=True
)

第二个:

writer = Agent(role='Content Writer',goal='You are responsible to transforming long text into engaging content ready for promotion on different channels.',backstory="""You are an excellent communications specialist, known for yourexceptional skill of transforming complex subject into easy tounderstand stories that attract people.""",verbose=True
)
  • role 属性指定代理的功能。
  • goal 属性指定代理必须实现的目标。
  • backstory 属性为代理的身份和行为添加了上下文。

代理属性

 

 

要创建代理,您通常需要使用所需的属性初始化 Agent 类的实例。 这是一个包含所有属性的概念示例:

# Example: Creating an agent with all attributes
from crewai import Agentagent = Agent(role='Data Analyst',goal='Extract actionable insights',backstory="""You're a data analyst at a large company.You're responsible for analyzing data and providing insightsto the business.You're currently working on a project to analyze theperformance of our marketing campaigns.""",tools=[my_tool1, my_tool2],  # Optional, defaults to an empty listllm=my_llm,  # Optionalfunction_calling_llm=my_llm,  # Optionalmax_iter=15,  # Optionalmax_rpm=None, # Optionalverbose=True,  # Optionalallow_delegation=True,  # Optionalstep_callback=my_intermediate_step_callback,  # Optionalcache=True  # Optional
)

这就是创建代理所需了解的全部内容。 现在让我们分配任务。

crewAI 中的任务

任务是代理所做的事情。 任务至少由描述、预期输出以及对将执行该任务的代理的引用组成。

在我们的例子中,我们需要执行以下任务:

任务 1:从博客中获取内容
任务 2:根据内容撰写推文
任务3:根据内容撰写新闻通讯

任务 1 和 writer 代理将负责处理,并且由于代理可以执行多个任务,因此我们将把任务 2 和 3 分配给我们的 extractor。

我们将从任务 1 开始:fetch

from crewai import Task...fetch = Task(description=f'''Given a URL, retrieve the content of the webpage.It is important that you do not miss any information.Make sure that:- The content does not include html, css, or javascript.- The content is complete and accurate.- You do not include headers, footers, or sidebars.''',agent=extractor, expected_output='''Title: [The title of the article]Author: [The author of the article]Date: [The date the article was published]Content: [The content of the article]'''
)

任务 2 如下所示:

twitterize = Task(description='''Given a long text, transform it into engaging content ready for promotion on Twitter.Make sure that:- The content is engaging and informative.- The content is less than 280 characters.- The content includes relevant hashtags - Limit to one.''',agent=writer,expected_output='''Title: [Engaging catchy title for the tweet]Content: [Engaging content for the tweet]'''
)

最后,任务3与twitterize比较相似。 您可以自己创建它,或者您可以在本文底部免费获取源代码。

嗯不错! 现在您知道什么是任务以及它们如何工作。下一个:工具。

有关可用任务参数和选项的完整列表

任务属性

属性描述
Description清晰、简洁地说明任务的内容。
Agent负责任务的代理,直接分配或由机组人员的进程分配。
Expected Output任务完成情况的详细描述。
Tools(可选)代理可以用来执行任务的功能或能力。
Async Execution(可选)如果设置,任务将异步执行,无需等待完成即可继续进行。
Context (可选)指定其输出用作该任务上下文的任务。
Config(可选)执行任务的代理的其他配置详细信息,允许进一步定制。
Output JSON (可选)输出 JSON 对象,需要 OpenAI 客户端。 只能设置一种输出格式。
Output Pydantic (可选)输出 Pydantic 模型对象,需要 OpenAI 客户端。 只能设置一种输出格式。
Output File (可选)将任务输出保存到文件中。 如果与输出 JSON 或输出 Pydantic 一起使用,指定如何保存输出。
Callback(可选)一个 Python 可调用函数,在完成后使用任务的输出执行。
Human Input (可选)指示任务最后是否需要人工反馈,这对于需要人工监督的任务很有用。

使用工具创建任务

import os
os.environ["OPENAI_API_KEY"] = "Your Key"
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API keyfrom crewai import Agent, Task, Crew
from crewai_tools import SerperDevToolresearch_agent = Agent(role='Researcher',goal='Find and summarize the latest AI news',backstory="""You're a researcher at a large company.You're responsible for analyzing data and providing insightsto the business.""",verbose=True
)search_tool = SerperDevTool()task = Task(description='Find and summarize the latest AI news',expected_output='A bullet list summary of the top 5 most important AI news',agent=research_agent,tools=[search_tool]
)crew = Crew(agents=[research_agent],tasks=[task],verbose=2
)result = crew.kickoff()
print(result)

crewAI工具

正如您所看到的,我们的提取器代理的任务是从给定的 URL 中提取信息。 但如何呢?

提示:通过使用工具。

在crewAI中,您可以通过三种方式使用工具:

  • 自定义工具:您自己编写的工具,本质上是一个 Python 函数。
  • 内置工具:crewAI 附带了许多内置工具。
  • LangChain工具:由于crewAI是建立在LangChain之上的,因此您也将获得LangChain的所有好东西。


对于我们的示例,有很多现有工具可以帮助我们从博客中提取信息。 此类工具之一是内置于crewAI 中的ScrapeWebsiteTool。 所以在这种情况下,我们不需要自己构建。

要使用它,我们只需将它传递到提取器使用的工具列表中,如下所示:

from crewai_tools import ScrapeWebsiteToolsite_url = 'https://www.gettingstarted.ai/crewai-beginners-tutorial
scrape_tool = ScrapeWebsiteTool(url=site_url)extractor = Agent(...tools=[scrape_tool] # <----...
)

确保使用 pip 安装可选工具包:

pip install crewai[tools]

太酷了 - 我们快完成了,这意味着您快成为超级巨星了!

crewAI crews

现在我们已经定义了任务、工具和代理。 我们必须将它们全部分组,以便它们一起工作。 这就是我们定义工作人员的地方,但在此之前 - 让我解释一下特工如何一起工作。

crew 流程

现在您知道船员是由特工组成的。 但这些代理必须知道如何相互交谈,比如由哪一个发起对话。 在crewAI 中,有两个受支持的流程,第三个流程即将推出。 目前的流程是:

  • 顺序:一项接着一项任务,有秩序地进行。
  • 分层:经理将协调对话流程。

由于我们的任务可以按顺序完成,因此我们将采用顺序流程。

我们开始做吧:

from crewai import Crew...crew = Crew(agents=[extractor, writer],tasks=[fetch, twitterize, newsletterize],Process=Process.sequential
)

这就是全部,非常简单,不是吗?

最后,我们调用 kickoff() 方法来设置一切:

result = crew.kickoff()print("#### USAGE ####")
print (crew.usage_metrics) # <-- Optionalprint("#### RESULT ####")
print(result)

快速仅供参考:usage_metrics 函数返回一个很好的执行摘要,如下所示: Crew use {'total_tokens': 65002, 'prompt_tokens': 55305, 'completion_tokens': 9697, 'successful_requests': 67}

结论和想法

老实说,crewAI 的美妙之处无疑在于其简单的结构。 您可以添加另一个代理,负责在 Twitter 上发布消息并向您的订阅者发送电子邮件。

您可以通过利用工具来完成此操作,可以使用现有工具,也可以创建自己的与第三方 API 的集成。
现在,如果您正在使用 OpenAI 或其他付费 LLM 服务,我建议您密切关注计费仪表板,因为代理往往会消耗大量代币,例如,本教程中的工作人员运行一次的成本约为 0.90 美元。

Agent 会取代人类团队吗? 是的,也不是?

是的,如果您或您的公司能够以更少的成本更快地取得成果,您会不会这么做吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1052576.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实验----逻辑回归实现二分类

目录 一、介绍 二、sigmoid函数 &#xff08;1&#xff09;公式&#xff1a; &#xff08;2&#xff09;sigmoid函数的输入 预测函数&#xff1a; 以下是sigmoid函数代码&#xff1a; 三、梯度上升 &#xff08;1&#xff09;似然函数 公式&#xff1a; 概念&#xff…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

python中import的搜索路径

文章目录 前言 一 python中import的搜索路径1. python中import的搜索路径先判断是否内置模块根据sys.path查找1.1 脚本当前目录和所属项目目录1.2 环境变量1.3 标准库1.4 .pth 文件1.5 第三方库 2. 解决ModuleNotFoundError 前言 码python时经常会遇到找不到包或者找不到模块的…

【考研数学】线代除了「李永乐」,还能跟谁?

考研线代&#xff0c;除了利用了老师&#xff0c;我觉得还有一个宝藏老师的课程值得听&#xff01; 那就是喻老&#xff0c;这个是我在b站上面新发现的老师&#xff0c;听完他的课程发现真的喜欢 他不仅在B站上开设了课程&#xff0c;还编写了配套的线性代数辅导讲义&#xff…

Chrome谷歌浏览器如何打开不安全页面的禁止权限?

目录 一、背景二、如何打开不安全页面被禁止的权限&#xff1f;2.1 第一步&#xff0c;添加信任站点2.2 第二步&#xff0c;打开不安全页面的权限2.3 结果展示 一、背景 在开发过程中&#xff0c;由于测试环境没有配置 HTTPS 请求&#xff0c;所以谷歌浏览器的地址栏会有这样一…

我用 Midjourney 的这种风格治愈了强迫症

在 Midjourney 能够实现的各种布局之中&#xff0c;有两种风格因其简洁、有序而独居魅力&#xff0c;它们就是平铺 (Flat Lay) 和 Knolling (Knolling 就是 Knolling, 无法翻译&#x1f923;)。要在现实生活中实现这样的美学效果并不容易&#xff0c;你需要精心挑选各种小物件&…

【UE Slate】 虚幻引擎Slate开发快速入门

目录 0 引言1 Slate框架1.0 控件布局1.1 SWidget1.1.1 SWidget的主要作用1.1.2 SWidget的关键方法1.1.3 使用SWidget创建自定义控件1.1.4 结论 1.2 SCompoundWidget1.2.1 SCompoundWidget的主要作用1.2.2 SCompoundWidget的使用示例1.2.3 SCompoundWidget的关系1.2.4 总结 1.3 …

python数据分析:爬取某东商城商品评论数据并做词云展示(含完整源码及详细注解)

python数据分析,爬取某东商城商品评论数据并做词云展示。 一、明确爬取的网页及结构 找到要爬取的网页地址,发现有一个获取json格式评论数据的接口: url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=217…

数据结构——不相交集(并查集)

一、基本概念 关系&#xff1a;定义在集合S上的关系指对于a&#xff0c;b∈S&#xff0c;若aRb为真&#xff0c;则a与b相关 等价关系&#xff1a;满足以下三个特性的关系R称为等价关系 (1)对称性&#xff0c;aRb为真则bRa为真&#xff1b; (2)反身性,aRa为真; (3)传递性,aRb为真…

【Qt Creator】跨平台的C++图形用户界面应用程序开发框架---QT

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.互联网的核心岗位以及职…

3D工业视觉

前言 本文主要介绍3D视觉技术、工业领域的应用、市场格局等&#xff0c;主要技术包括激光三角测量、结构光、ToF、立体视觉。 一、核心内容 3D视觉技术满足工业领域更高精度、更高速度、更柔性化的需求&#xff0c;扩大工业自动化的场景。 2D视觉技术基于物体平面轮廓&#…

JavaScript面试 题

1.延时加载JS有哪些方式 延时加载 :async defer 例如:<script defer type"type/javascript" srcscript.js></ script> defer:等html全部解析完成,才会执行js代码,顺次执行的 async: js和html解析是同步的,不是顺次执行js脚本(谁先加载完先执行谁)2.JS数…

C语言实现Hash Map(3):Map代码优化

在上一节中&#xff0c;我们学习了C语言实现Hash Map(2)&#xff1a;Map代码实现详解&#xff0c;通过代码&#xff0c;我们更深入地了解了Map实现的原理&#xff0c;学习了如何通过key找到对应的桶并加入节点。也正如上一节提到的&#xff0c;虽然这是github中star比较多的代码…

其二:使用递归法实现二分搜索

开篇 本文主要是利用递归法来实现一个简单的二分搜索程序。题目来源是《编程珠玑》第4章课后习题3。 问题概要 编写并验证一个递归的二分搜索程序, 并返回t在数组x[0…n-1]中第一次出现的位置。 思路分析 本题的思路与第一版相似&#xff0c;不过不同的是&#xff0c;为确保返回…

《Python侦探手册:用正则表达式破译文本密码》

在这个信息爆炸的时代&#xff0c;每个人都需要一本侦探手册。阿佑今天将带你深入Python的正则表达式世界&#xff0c;教你如何像侦探一样&#xff0c;用代码破解文本中的每一个谜题。从基础的字符匹配到复杂的数据清洗&#xff0c;每一个技巧都足以让你在文本处理的领域中成为…

c++ 将指针转换为 void* 后,转换为怎么判断原指针类型?

当将指针转换为void后&#xff0c;擦除了指针所指向对象的类型信息&#xff0c;因此无法通过void指针来判断原始指针的类型。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个…

【C++】Vector的简易模拟与探索

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法&#xff0c;只需遍历一遍。使用low指向前面的元素&#xff0c;high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面&#xff0c;实…

C语言 | Leetcode C语言题解之第116题填充每个节点的下一个右侧节点指针

题目&#xff1a; 题解&#xff1a; struct Node* connect(struct Node* root) {if (root NULL) {return root;}// 从根节点开始struct Node* leftmost root;while (leftmost->left ! NULL) {// 遍历这一层节点组织成的链表&#xff0c;为下一层的节点更新 next 指针stru…

滑动窗口-java

主要通过单调队列来解决滑动窗口问题&#xff0c;得到滑动窗口中元素的最大值和最小值。 目录 前言 一、滑动窗口 二、算法思路 1.滑动窗口 2.算法思路 3.代码详解 三、代码如下 1.代码如下 2.读入数据 3.代码运行结果 总结 前言 主要通过单调队列来解决滑动窗口问题&#xff…