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

今天,我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息: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.mzph.cn/diannao/16139.shtml

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

相关文章

easy-rule规则引擎使用

简介 轻量级的规则引擎&#xff0c;易于学习的api 简单来说&#xff0c;规则引擎就是一个函数&#xff1a;yf(x1,x2,…,xn) 将业务代码和业务规则分离&#xff0c;解耦业务决策和业务代码的绑定关系 入门示例 依赖引入 <dependency><groupId>org.jeasy</grou…

页面<html>上多了一个滚动条,定位发现是<body>里面多了一个id为trans-tooltip的div

现象分析&#xff1a; 页面根标签html多了一个滚动条&#xff0c;发现body里面多了一个id为trans-tooltip的div&#xff0c;虽然width为0&#xff0c;height为0&#xff0c;但是其子元素还是有高度&#xff0c;占据了空间&#xff0c;最终导致了滚动条&#xff1b; 根本原因&…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(十三)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 我们&#xff0c;继续讲一…

Java面试题--JVM大厂篇(1-10)

引言&#xff1a; 在这个信息时代&#xff0c;对于准备进入大厂工作的朋友们来说&#xff0c;对于JVM&#xff08;Java虚拟机&#xff09;的掌握是面试中的一项重要内容。下面是一些精选的JVM面试题&#xff0c;希望对大家能有所帮助。 正文&#xff1a; 1. JVM有哪几种垃圾收…

[CISCN2024]-PWN:gostack解析(go语言程序,syscall)

查看保护 ida比较复杂&#xff0c;建议动调配合静态分析程序运行 这里函数返回不用leave和ret&#xff0c;而是利用add rsp和ret&#xff0c;所以要动调查看到底要覆盖哪里。 完整exp&#xff1a; from pwn import* pprocess(./gostack) syscall0x4616c9 pop_rax0x40f984 po…

GB报文中的Cseq值的注意点

一、 问题现象 【问题现象】NVR使用GB接三方平台发现倍速回放时&#xff0c; 【现场拓扑】现场拓扑如下 &#xff08;1&#xff09; NVR侧使用家用宽带的方式&#xff0c;通过国标跨公网接入三方平台。 图1.1&#xff1a;网络拓扑 二、 抓包分析 INVITE sip:420000004013200…

OpenAI安全系统负责人:从头构建视频生成扩散模型

作者 | Lilian Weng OneFlow编译 翻译&#xff5c;杨婷、宛子琳、张雪聃 题图由SiliconFlow MaaS平台生成 过去几年&#xff0c;扩散模型&#xff08;Diffusion models&#xff09;在图像合成领域取得了显著成效。目前&#xff0c;研究界已开始尝试更具挑战性的任务——将该技术…

深度学习Day-18:ResNet50V2算法实战与解析

&#x1f368; 本文为&#xff1a;[&#x1f517;365天深度学习训练营] 中的学习记录博客 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制] 要求&#xff1a; 根据本文Tensorflow代码&#xff0c;编写对应的Pytorch代码了解ResNetV2与ResNetV的区别 一、 基础…

【实战JVM】-基础篇-03-Java内存结构

【实战JVM】-基础篇-03-Java内存结构 1 运行时数据区1.1 总览1.2 程序计数器1.2.1 是否会内存溢出 1.3 java虚拟机栈1.3.1 栈帧的组成1.3.1.1 局部变量表1.3.1.2 操作数栈1.3.1.3 帧数据1.3.1.3.1 动态链接1.3.1.3.2 方法出口1.3.1.3.3 异常表 1.3.2 是否会内存溢出1.3.3 设置虚…

【神经网络结构可视化】使用 Visualkeras 可视化 Keras / TensorFlow 神经网络结构

文章目录 Visualkeras介绍下载安装代码示例1、导入必要的库2、创建VGG16神经网络模型3、可视化神经网络结构4、完整代码5、使用教程 可视化自己创建的神经网络结构1、导入要的库2、创建自己的神经网络模型3、可视化神经网络结构图4、完整代码 Visualkeras介绍 Visualkeras是一…

C++代码错误解决1(函数模板)

1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…

【微机原理及接口技术】可编程并行接口芯片8255A

【微机原理及接口技术】可编程并行接口芯片8255A 文章目录 【微机原理及接口技术】可编程并行接口芯片8255A前言一、8255A的内部结构和引脚1.与外设接口&#xff08;数据端口&#xff09;2.与处理器接口 二、8255A的工作方式三、8255A的编程1. 写入方式控制字&#xff1a;控制字…

从0开始回顾ElasticSearch

1 elasticsearch概述 1.1 elasticsearch简介 官网: https://www.elastic.co/ ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的…

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结

【动手学强化学习】第 6 章 Dyna-Q 算法知识点总结 本章知识点基于模型的强化学习与无模型的强化学习方法简介无模型的强化学习方法基于模型的强化学习方法 强化学习算法的评价指标Dyna-Q算法Dyna-Q 算法的具体流程Dyna-Q 代码实践 本章知识点 基于模型的强化学习与无模型的强…

C++语言·list链表

其实现在在讲这些容器的时候&#xff0c;我们的重点已经不是它的接口都有什么&#xff0c;功能都是什么了&#xff0c;这些内容官网上都能查到&#xff0c;而且容器和容器之间接口的不同处很少&#xff0c;我在讲解的话也只是把官网上的东西截图下来复述一下。现在的重点其实都…

AtCoder Regular Contest 178 A~D

A.Good Permutation 2&#xff08;贪心&#xff09; 题意&#xff1a; 给你一个正整数 N N N和一个由 M M M个正整数 A ( A 1 , A 2 , … , A M ) A(A_{1},A_{2}, \dots,A_{M}) A(A1​,A2​,…,AM​)组成的序列。 在这里&#xff0c; A A A的所有元素都是介于 1 1 1和 N N …

网络编程-TCP

一、TCP的相关IP 1.1 SeverSocket 这是Socket类,对应到网卡,但是这个类只能给服务器使用. 1.2 Socket 对应到网卡,既可以给服务器使用,又可以给客户端使用. TCP是面向字节流的,传输的基本单位是字节. TCP是有连接的,和打电话一样,需要客户端拨号,服务器来听. 服务器的内核…

Stream流的使用

目录 一&#xff0c;Stream流 1.1 概述 1.2 Stream代码示例 二&#xff0c;Stream流的使用 2.1 数据准备 2.2 创建流对象 2.3 中间操作 filter map distinct sorted limit skip flatMap 2.4 终结操作 foreach count max&min collect 2.5 查找与匹配 a…

redis中String,Hash类型用法与场景使用

String 用法 1. 设置键值对 &#xff08;1&#xff09;设置键值对使用 set 命令设置 key 的值。 返回值&#xff1a;ok&#xff0c;如果 key 已经存在&#xff0c;set 命令会覆盖旧值。 &#xff08;2&#xff09;使用 setex 命令设置 key 的值并为其设置过期时间&#xff…

安全设计 | CISA:构建不可侵犯的代码,软件安全设计的未来之路

软件制造商在产品设计和开发过程中应采取安全设计原则和方法&#xff0c;以减少网络安全风险&#xff0c;并转变责任重心&#xff0c;使产品在设计时就内置安全特性&#xff0c;而不是依赖于后期的补丁和修复。为此CISA发布了《软件安全设计的原则和方法》&#xff0c;帮助软件…