赞
踩
CrewAI- a role playing AI Agents
git地址:https://github.com/joaomdmoura/crewai#why-crewai
langchain地址:CrewAI Unleashed: Future of AI Agent Teams
Agent具有与另一个Agent联系的能力,以委派工作或提出问题。
任务可以使用特定的代理工具覆盖,这些工具应该被使用,同时还可以指定特定的代理来处理它们。
流程定义了代理如何协同工作:任务如何分配给代理。代理之间如何互动。代理如何执行它们的任务。
在 CrewAI 中,Agent是一个被编程为执行任务、做出决策并与其他代理进行通信的自治单元。将Agent视为团队的成员,具有特定的技能和特定的工作要做。Agent可以担任不同的角色,例如“研究员”、“作家”或“客户支持”,每个角色都有助于团队的总体目标。
- researcher = Agent(
- role:定义代理在团队中的职能。它决定了代理最适合的任务类型。
- goal:代理想要实现的个人目标。它指导代理人的决策过程。
- backstory:为代理的角色和目标提供背景,丰富交互和协作动态。
- tools:可用来执行任务的一组能力或功能。工具可以共享或用于特定代理。
- verbose:这使您可以实际查看 Crew 执行期间发生的情况。
- allow_delegation:座席可以相互委派任务或问题,确保每项任务都由最合适的座席处理。
- )
初始化:使用定义的角色、目标、背景故事和工具集创建代理。
任务分配:代理直接或通过机组人员的流程管理分配任务。
执行:代理使用其可用工具并根据其角色和目标执行任务。
协作:在整个执行过程中,代理可以与其他代理进行通信以进行委托、查询或协助。
可以按照下述格式进行代理的创建
- from crewai import Agent
-
- # Create an agent with a role and a goal
- agent = Agent(
- role='Data Analyst',
- goal='Extract actionable insights',
- verbose=True,
- backstory="You'er a data analyst at a large company. I am responsible for analyzing data and providing insights to the business. I am currently working on a project to analyze the performance of our marketing campaigns. I have been asked to provide insights on how to improve the performance of our marketing campaigns.",
- tools=[
- SearchTools.search_internet,
- BrowserTools.scrape_and_summarize_website,
- ],
- llm=...
- )
代理可以使用 CrewAI 的内置委托和通信机制相互交互。这允许在团队内部进行动态任务管理和问题解决。
在 CrewAI 框架中,任务是代理负责完成的个人分配。它们是人工智能团队将承担的基本工作单元。了解如何定义和管理任务是充分发挥 CrewAI 潜力的关键。CrewAI 中的任务封装了代理执行该任务所需的所有信息,包括描述、分配给它的代理以及所需的任何特定工具。任务设计灵活,可根据您的需要进行简单和复杂的操作。
CrewAI 中的每个任务都有几个属性:
描述:清晰简洁地说明需要做什么。
代理:分配给任务的代理(可选)。如果未指定代理,则任何代理都可以根据定义的流程来接取任务。
工具:代理可以用来完成任务的工具列表(可选)。如有必要,这些可以覆盖代理的默认工具。
以下是一个创建task的例子:
- from crewai import Task
-
- # Define a simple task with just a description
- simple_task = Task(description='Validate user input data')
-
- # Define a task with a designated agent and specific tools
- advanced_task = Task(description='Generate monthly sales report', agent=sales_agent, tools=[reporting_tool])
可以通过多种方式将任务分配给代理:
通过在创建任务时指定代理。 上述例子所示:task的属性中加入代理
通过 Crew 的流程,可以根据代理角色、可用性或其他标准分配任务。
流程是 CrewAI 工作流程管理的核心,类似于人类团队组织工作的方式。在 CrewAI 中,流程定义了代理执行任务的顺序和方式,反映了您在运作良好的团队中所期望的协调。CrewAI 中的流程可以被视为 AI 代理如何处理其工作负载的游戏计划。正如项目经理根据团队成员的技能和项目时间表将任务分配给他们一样,CrewAI 也将任务分配给代理以确保高效的工作流程。
现在主要有三种,目前只支持顺序流程
顺序(支持):这是目前在 CrewAI 中实现的唯一流程。它确保任务按给定的顺序一次处理一个,就像接力赛中一个跑步者将接力棒传递给下一个跑步者一样。
共识(WIP):设想未来的更新,共识过程将使代理能够就任务执行做出联合决策,类似于在继续之前在会议中达成的团队共识。
分层(WIP):同样在管道中,此过程将引入任务执行的命令链,其中某些代理可能有权确定任务的优先级或委派任务,类似于传统的公司层次结构。这些额外的流程一旦实施,将为代理提供更细致、更复杂的方式来交互和完成任务,就像复杂组织结构中的团队一样。
要将进程分配给工作组,只需在创建工作组时进行设置即可。代码如下所示:
- from crewai import Crew
-
- # Create a crew with a sequential process
- crew = Crew(agents=my_agents, tasks=my_tasks, process=sequential_process)
CrewAI的主要特征为:
基于角色的Agent设计:定制具有特定角色、目标和工具的Agent。
代理间自主委派:代理可以自主委派任务并相互查询,提高解决问题的效率。
灵活的任务管理:使用可定制的工具定义任务并将其动态分配给代理。
流程驱动:具有流程性,虽然目前仅支持sequential任务执行,但正在处理更复杂的流程,例如共识和分层。这也是其他多Agent框架不支持的。
框架如下所示:
代码:
- import os
- from crewai import Agent, Task, Crew, Process
-
- os.environ["OPENAI_API_KEY"] = "Your Key"
-
- # Define your agents with roles and goals
- researcher = Agent(
- role='Researcher',
- goal='Discover new insights',
- backstory="You're a world class researcher working on a major data science company",
- verbose=True,
- allow_delegation=False
- # llm=OpenAI(temperature=0.7, model_name="gpt-4"). It uses langchain.chat_models, default is GPT4
- )
- writer = Agent(
- role='Writer',
- goal='Create engaging content',
- backstory="You're a famous technical writer, specialized on writing data related content",
- verbose=True,
- allow_delegation=False
- )
-
- # Create tasks for your agents
- task1 = Task(description='Investigate the latest AI trends', agent=researcher)
- task2 = Task(description='Write a blog post on AI advancements', agent=writer)
-
- # Instantiate your crew with a sequential process
- crew = Crew(
- agents=[researcher, writer],
- tasks=[task1, task2],
- verbose=True, # Crew verbose more will let you know what tasks are being worked on
- process=Process.sequential # Sequential process will have tasks executed one after the other and the outcome of the previous one is passed as extra content into this next.
- )
-
- # Get your crew to work!
- result = crew.kickoff()
顺序执行流程
- def __sequential_loop(self) -> str:
- 遍历该(crew)中的所有任务
- 当前任务的execute方法执行任务,传递上一个任务的执行结果作为参数,并将新的执行结果赋值给task_outcome
- 按顺序执行任务,每个任务的执行结果会作为下一个任务的输入。在执行每个任务之前,如果代理允许委托,会添加一些委托工具。
AutoGen:虽然 Autogen 擅长创建能够良好工作的会话代理,但它缺乏固有的流程概念。在 Autogen 中,编排代理的交互需要额外的编程,随着任务规模的增长,这可能会变得复杂和繁琐。
ChatDev:ChatDev 将流程的概念引入了 AI 代理领域,但其实现了相当的僵化。ChatDev中的自定义是有限的,并且不适合生产环境,这可能会阻碍实际应用程序中的可扩展性和灵活性
CrewAI 的优势:CrewAI 的构建以生产为中心。它提供了 Autogen 对话代理的灵活和 ChatDev 的成型流程方法,但没有僵化。CrewAI的流程设计为动态且强大,可无缝适配开发和生产工作流程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。