多Agent框架之-CrewAI-人工智能代理团队的未来

慈云数据 2024-03-13 技术支持 66 0

CrewAI- a role playing AI Agents

git地址:https://github.com/joaomdmoura/crewai#why-crewai

langchain地址:CrewAI Unleashed: Future of AI Agent Teams

Agent具有与另一个Agent联系的能力,以委派工作或提出问题。

任务可以使用特定的代理工具覆盖,这些工具应该被使用,同时还可以指定特定的代理来处理它们。

流程定义了代理如何协同工作:任务如何分配给代理。代理之间如何互动。代理如何执行它们的任务。

1 CrewAI相关概念

1.1 Agent相关

在 CrewAI 中,Agent是一个被编程为执行任务、做出决策并与其他代理进行通信的自治单元。将Agent视为团队的成员,具有特定的技能和特定的工作要做。Agent可以担任不同的角色,例如“研究员”、“作家”或“客户支持”,每个角色都有助于团队的总体目标。

Agent的关键属性:
researcher = Agent(
  role:定义代理在团队中的职能。它决定了代理最适合的任务类型。
  goal:代理想要实现的个人目标。它指导代理人的决策过程。
  backstory:为代理的角色和目标提供背景,丰富交互和协作动态。
  tools:可用来执行任务的一组能力或功能。工具可以共享或用于特定代理。
  verbose:这使您可以实际查看 Crew 执行期间发生的情况。
  allow_delegation:座席可以相互委派任务或问题,确保每项任务都由最合适的座席处理。
)
Agent的生命周期
  • 初始化:使用定义的角色、目标、背景故事和工具集创建代理。

  • 任务分配:代理直接或通过机组人员的流程管理分配任务。

  • 执行:代理使用其可用工具并根据其角色和目标执行任务。

  • 协作:在整个执行过程中,代理可以与其他代理进行通信以进行委托、查询或协助。

    创建代理例子:

    可以按照下述格式进行代理的创建

    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 的内置委托和通信机制相互交互。这允许在团队内部进行动态任务管理和问题解决

    1.2 Task相关

    在 CrewAI 框架中,任务是代理负责完成的个人分配。它们是人工智能团队将承担的基本工作单元。了解如何定义和管理任务是充分发挥 CrewAI 潜力的关键。CrewAI 中的任务封装了代理执行该任务所需的所有信息,包括描述、分配给它的代理以及所需的任何特定工具。任务设计灵活,可根据您的需要进行简单和复杂的操作。

    Task的关键属性:

    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的分配:

      可以通过多种方式将任务分配给代理:

      • 通过在创建任务时指定代理。 上述例子所示:task的属性中加入代理

      • 通过 Crew 的流程,可以根据代理角色、可用性或其他标准分配任务。

        1.3 process相关

        流程是 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)

          2 CrewAI框架

          CrewAI的主要特征为:

          • 基于角色的Agent设计:定制具有特定角色、目标和工具的Agent。

          • 代理间自主委派:代理可以自主委派任务并相互查询,提高解决问题的效率。

          • 灵活的任务管理:使用可定制的工具定义任务并将其动态分配给代理。

          • 流程驱动:具有流程性,虽然目前仅支持sequential任务执行,但正在处理更复杂的流程,例如共识和分层。这也是其他多Agent框架不支持的。

            框架如下所示:

            3 实现案例

            代码:

            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
            按顺序执行任务,每个任务的执行结果会作为下一个任务的输入。在执行每个任务之前,如果代理允许委托,会添加一些委托工具。

            4 与其他多Agent框架对比

            • AutoGen:虽然 Autogen 擅长创建能够良好工作的会话代理,但它缺乏固有的流程概念。在 Autogen 中,编排代理的交互需要额外的编程,随着任务规模的增长,这可能会变得复杂和繁琐。

            • ChatDev:ChatDev 将流程的概念引入了 AI 代理领域,但其实现了相当的僵化。ChatDev中的自定义是有限的,并且不适合生产环境,这可能会阻碍实际应用程序中的可扩展性和灵活性

              CrewAI 的优势:CrewAI 的构建以生产为中心。它提供了 Autogen 对话代理的灵活和 ChatDev 的成型流程方法,但没有僵化。CrewAI的流程设计为动态且强大,可无缝适配开发和生产工作流程。

微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon