使用 CrewAI 构建协作 AI 代理

使用 CrewAI 构建协作 AI 代理

源节点: 3089434

介绍

人工智能代理开发是软件创新最热门的领域之一。随着大型语言模型质量的不断发展,我们将见证人工智能代理与现有软件系统集成的激增。借助人工智能代理,可以通过语音或手势命令完成任务,而不是手动浏览应用程序。但目前,代理开发还处于起步阶段。我们仍处于基础设施、工具和框架开发的初始阶段,类似于 1990 世纪 XNUMX 年代的互联网。因此,在本文中,我们将讨论另一个名为 CrewAI 的代理开发框架。

人工智能特工

学习目标

  • 了解 AI 代理。
  • 探索 CrewAI – 一种用于构建代理的开源工具。
  • 建立一支协作式人工智能团队来编写内容。
  • 探索人工智能代理的现实用例。

这篇文章是作为 数据科学博客马拉松。

目录

什么是人工智能代理?

语言模型擅长翻译、总结和推理。然而,你可以用它们做很多事情。充分发挥推理潜力的方法之一是让法学硕士具有代理性。人工智能代理是法学硕士,配备了正确的工具和提示。这些代理可以自动执行浏览、网页抓取、SQL 查询执行、文件操作等。代理利用法学硕士的推理能力来根据当前需求选择工具。但是,我们可以集成许多代理来完成复杂的任务,而不是使用单个代理来完成任务。

Langchain 是讨论人工智能代理时首先想到的默认工具。然而,手动编排人工智能代理来执行协作任务对于 Langchain 来说是一个挑战。这就是 CrewAI 发挥作用的地方。

什么是 CrewAI?

船员人工智能 是一个用于编排角色扮演和自主人工智能代理的开源框架。它有助于创建协作人工智能代理以轻松完成复杂的目标。该框架旨在使人工智能代理能够承担角色、委派任务和共享目标,就像现实世界的船员一样。以下是 CrewAI 的一些独特功能:

  • 基于角色的代理:我们可以定义具有特定角色、目标和背景故事的代理,以便在生成答案之前为法学硕士提供更多背景信息。
  • 任务管理:使用工具定义任务并将其动态分配给座席。
  • 代理间委托:代理可以将任务委托给其他代理以进行有效协作。

下面是 CrewAI 思维导图的示意图。

船员人工智能

CrewAI与Langchain生态系统无缝集成。这意味着我们可以使用 Langchain 工具以及 LLM 与 CrewAI 的集成。 

建立协作人工智能团队

为了更好地理解 CrewAI,让我们构建用于创意内容写作的协作 AI 代理。为此,我们将定义代理、工具以及每个代理各自的任务。由于它是一个内容写作团队,因此我们将定义三个独立的代理,例如创意分析师、作家和编辑。每个代理将被分配一个任务。

分析师代理将负责分析想法并为编写内容准备全面的蓝图。作家代理将准备文章的草稿,最后,编辑将负责对草稿进行格式化、编辑和修改。众所周知,CrewAI 让我们可以使用自定义工具来增强代理。我们将使用一个工具来增强编辑器,将其保存到本地磁盘。但要完成所有这些事情,我们需要法学硕士。在这里,我们将使用 Google 的 Gemini 模型。

让我们深入研究编码

与任何 Python 项目一样,创建虚拟环境并安装依赖项。我们需要 Crewai 库和 Langchain 的实现 谷歌GenAI。您可以使用其他法学硕士,例如来自 一同任何规模,或 OpenAI 模型。

pip install crewai langchain-google-genai

下一步是定义我们的法学硕士和合作代理。创建一个名为agents.py 的单独文件来定义代理。

import os

from crewai import Agent
from langchain.tools import tool
from langchain_google_genai import GoogleGenerativeAI

GOOGLE_API_KEY = "Your Key"
llm = GoogleGenerativeAI(
           model="gemini-pro", 
           google_api_key=GOOGLE_API_KEY
           )

让我们定义文件保存工具。

class FileTools:

    @tool("Write File with content")
    def write_file(data: str):
        """Useful to write a file to a given path with a given content. 
           The input to this tool should be a pipe (|) separated text 
           of length two, representing the full path of the file, 
           including the ./lore/, and the written content you want to write to it.
        """
        try:
            path, content = data.split("|")
            path = path.replace("n", "").replace(" ", "").replace("`", "")
            if not path.startswith("./lore"):
                path = f"./lore/{path}"
            with open(path, "w") as f:
                f.write(content)
            return f"File written to {path}."
        except Exception:
            return "Error with the input format for the tool."

上面的write_file方法是用Langchain的工具函数修饰的。由于 CrewAI 在底层使用 Langchain,因此工具必须符合 Langchain 的约定。该函数需要一个由两部分组成的字符串:文件路径和内容,由竖线 (|) 分隔。方法文档字符串也用作函数的附加上下文。因此,请确保提供有关该方法的详细信息。

让我们定义代理

idea_analyst = Agent(
    role = "Idea Analyst",
    goal = "Comprehensively analyse an idea to prepare blueprints for the article to be written",
    backstory="""You are an experienced content analyst, well versed in analyzing 
    an idea and preparing a blueprint for it.""",
    llm = llm,
    verbose=True
)
writer = Agent(
    role = "Fiction Writer",
    goal = "Write compelling fantasy and sci-fi fictions from the ideas given by the analyst",
    backstory="""A renowned fiction-writer with 2 times NYT 
    a best-selling author in the fiction and sci-fi category.""",
    llm=llm,
    verbose=True
)

editor = Agent(
    role= "Content Editor",
    goal = "Edit contents written by writer",
    backstory="""You are an experienced  editor with years of 
    experience in editing books and stories.""",
    llm = llm,
    tools=[FileTools.write_file],
    verbose=True
)

我们有三个特工,每个人都有不同的角色、目标和背景故事。此信息用于提示法学硕士提供更多背景信息。编辑器代理有一个与之关联的书写工具。

接下来是定义任务。为此,创建一个不同的文件tasks.py。

from textwrap import dedent


class CreateTasks:

    def expand_idea():
        return dedent(""" Analyse the given task {idea}. Prepare comprehensive pin-points
                for accomplishing the given task.
                Make sure the ideas are to the point, coherent, and compelling.
                Make sure you abide by the rules. Don't use any tools.
                
                RULES:
                - Write ideas in bullet points.
                - Avoid adult ideas.
            """)
    def write():
        return dedent("""Write a compelling story in 1200 words based on the blueprint 
        ideas given by the Idea 
              analyst.
              Make sure the contents are coherent, easily communicable, and captivating.
               Don't use any tools.

              Make sure you abide by the rules.

              RULES:
              - Writing must be grammatically correct.
              - Use as little jargon as possible

              """)
    def edit():
        return dedent("""
    Look for any grammatical mistakes, edit, and format if needed.
    Add title and subtitles to the text when needed.
    Do not shorten the content or add comments.
    Create a suitable filename for the content with the .txt extension.
    You MUST use the tool to save it to the path ./lore/(your title.txt).
            """)

这里的任务是您期望代理执行的详细行动计划。

最后,创建 main.py 文件,我们在其中组装代理和任务以创建功能团队。

from textwrap import dedent

from crewai import Crew, Task

from agents import editor, idea_analyst, writer
from tasks import CreateTasks


class ContentWritingCrew():
    def __init__(self, idea):
        self.idea = idea
    def __call__(self):
        tasks = self._create_tasks()
        crew = Crew(
            tasks=tasks,
            agents=[idea_analyst, writer, editor],
            verbose=True
            )
        result = crew.kickoff()
        return result

    def _create_tasks(self):
        idea = CreateTasks.expand_idea().format(idea=self.idea)
        expand_idea_task = Task(
            description=idea,
            agent = idea_analyst
        )
        write_task =  Task(
            description=CreateTasks.write(),
            agent=writer
        )
        edit_task = Task(
            description=CreateTasks.edit(),
            agent=editor
        )
        return [expand_idea_task, write_task, edit_task]

if __name__ == "__main__":
    dir = "./lore"
    if not os.path.exists(dir):
        os.mkdir(dir)
    idea = input("idea: ")
    my_crew = ContentWritingCrew(idea=idea)
    result = my_crew()
    print(dedent(result))

在上面的代码中,我们定义了一个 ContentWritingCrew 类,它接受来自用户的想法字符串。 _create_tasks 方法创建任务。 __call__ 方法初始化并启动工作人员。运行脚本后,您可以在终端或笔记本上观察操作链。任务将按照机组人员定义的顺序执行。这是执行日志的快照。

最终代理人

这是最终代理的执行日志。即编辑器。它编辑从作者代理收到的草稿,并使用文件写入工具以合适的文件名保存文件。

这是使用 CrewAI 创建协作 AI 代理的一般工作流程。您可以配对其他 Langchain 工具或创建具有高效提示的自定义工具,以完成更复杂的任务。

以下是代码的 GitHub 存储库: sunilkumardash9/ContentWritingAgents.

重新编辑存储库: Sunil-KumarKu17/CollaborativeAIAgent

现实世界的用例

自主人工智能代理可以有很多用例。从私人助理到虚拟教练。以下是人工智能代理的一些用例。

  • 个人人工智能助理:个人助理很快就会成为我们不可或缺的一部分。一个类似贾维斯的助手可以处理您的所有数据,为您提供洞察力,并自行处理琐碎的任务。
  • 代码解释器:OpenAI 的代码解释器是 AI 代理的一个出色示例。解释器可以运行任何 Python 脚本并根据文本提示输出结果。这可以说是迄今为止最成功的代理人。
  • 虚拟讲师:随着人工智能技术的发展,我们可以期待在教育、培训等许多领域出现虚拟讲师。
  • 代理优先软件:人工智能代理的一个巨大潜在用例是代理优先的软件开发。人工智能代理将根据语音命令自动完成任务,而不是手动浏览和单击按钮来完成任务。
  • 空间计算:随着 AR/VR 技术的发展,人工智能代理将在弥合虚拟世界和现实世界之间的差距方面发挥至关重要的作用。

结论

我们仍处于人工智能代理开发的早期阶段。目前,为了让 AI 代理获得最佳结果,我们需要依赖 GPT-4,而且价格昂贵。但随着开源模型赶上 GPT-4,我们将获得更好的选择,以合理的成本高效运行 AI 代理。另一方面,代理开发框架正在快速进展。随着我们的前进,这些框架将使代理能够执行更复杂的任务。

 关键精华

  • 人工智能代理利用法学硕士的推理能力来选择合适的工具来完成复杂的任务。
  • CrewAI 是一个用于构建协作人工智能代理的开源框架。
  • CrewAI 的独特功能包括基于角色的代理、自主代理间委派和灵活的任务管理。
  • CrewAI 与现有 Langchain 生态系统无缝集成。我们可以使用 Langchain 工具以及 LLM 与 CrewAI 的集成。

常见问题

Q1.什么是人工智能代理?

答:人工智能代理是与环境交互、做出决策并采取行动以实现最终目标的软件程序。

Q2。与人工智能代理一起使用的最佳法学硕士是什么?

答:这取决于您的用例和预算。 GPT 4 功能最强大,但价格昂贵,而 GPT 3.5、Mixtral 和 Gemini Pro 型号资质较差,但速度快且便宜。

Q3。什么是 CrewAI?

答:CrewAI 是一个用于编排角色扮演和自主 AI 代理的开源框架。它有助于创建协作人工智能代理以轻松完成复杂的目标。

Q4。 CrewAI 有何用途?

答:CrewAI 提供了为复杂工作流程构建协作 AI 代理的高级抽象。

Q5. CrewAi 和 Autogen 有什么区别?

答:在 Autogen 中,编排代理的交互需要额外的编程,随着任务规模的增长,这可能会变得复杂和繁琐。

本文中显示的媒体不属于 Analytics Vidhya 所有,其使用由作者自行决定。

时间戳记:

更多来自 分析维迪亚