Type something to search...
CrewAI:由人工智能代理组成的个人军队,为您协同工作

CrewAI:由人工智能代理组成的个人军队,为您协同工作

CrewAI框架是什么?

AI协作的力量有太多值得提供的。CrewAI旨在使AI代理能够承担角色、共享目标,并以一个紧密合作的单位运作——就像一支运转良好的团队。无论您是在构建智能助手平台、自动化客户服务团队,还是多代理研究团队,CrewAI都为复杂的多代理交互提供了基础。

换句话说,CrewAI是一个代理框架,允许我们创建代理来帮助我们解决简单(优化)或复杂的任务(例如开发游戏)。AI代理承担角色,分享目标,并以一个紧密合作的单位运作,就像一支运转良好的团队。

我们将看一个如何使用它的例子 :)

如果您对提高生产力和机器学习技能的实用技巧感兴趣,请随时订阅我们的LinkedIn页面。我们每天分享该领域的精彩新闻,每周发布一篇新文章。

在进行实现之前,让我们简要了解一下涉及的不同概念。

A/ 代理

代理代表团队(小组)的成员。它有一系列属性,我们可以将其分配给它,以帮助指导它的工作。

B/ 任务

任务只是代理需要完成的事情。它负责任务的执行。我们可以给它一个任务描述,以提供更多指导。

C/ 工具

工具是代理可以利用的技能或功能,以执行各种操作。这包括来自CrewAI工具包和LangChain工具的工具,能够从简单的搜索到复杂的交互以及代理之间的有效协作。

D/ 过程

过程协调代理的任务执行,类似于人类团队中的项目管理。这些过程确保任务被有效分配和执行,与预定义的策略保持一致。

E/ 小组

小组代表一个协作的代理组,共同工作以实现一组任务。每个小组定义任务执行、代理协作和整体工作流程的策略。

*要求:

您需要一个OpenAI密钥并选择GPT模型(我使用gpt-4)。

import os
from crewai import Agent, Task, Crew, Process # pip install crewai
from dotenv import load_dotenv
from CalculatorTool import calculate

os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY") # In .env file 
os.environ["OPENAI_MODEL_NAME"] = "gpt-4"

我们的目标是实现一个应用程序,使用3个代理来规划和开发移动应用程序的功能,以及设计其用户界面和编写技术文档(分别)。

user_input = input("Enter the main features in the mobile app: ") # User

## Agent 1
feature_planner = Agent(
    role="Feature Planner",
    goal="You can design and outline the key features of the mobile app based on the input provided.",
    backstory="You are a product manager skilled in outlining app features that align with user needs and business goals.",
    verbose=True
)

## Agent 2
uiux_designer = Agent(
    role="UI/UX Designer",
    goal="You can create a user-friendly design for the app, considering user experience and usability.",
    backstory="""You are an experienced designer with a strong focus on creating intuitive and visually appealing interfaces.""",
    verbose=True
)

## Agent 3
technical_writer = Agent(
    role="Technical Writer",
    goal="You are tasked with writing detailed technical documentation for developers based on the app's design and features.",
    backstory="You are a seasoned technical writer with extensive experience in creating clear and concise documentation for software developers.",
    verbose=True
)

backstoryverbose参数对于理解流程非常重要:

backstoryfeature_planner代理(例如)被描述为一名产品经理,擅长定义满足用户需求和商业目标的功能。verbose=True:这表示代理提供有关其过程或操作的额外细节。

任务定义:

我们将创建三个任务:

  • 列出应用程序的主要功能,按类型分类(例如,身份验证、通知等)。-
  • 生成用户界面的详细线框或描述,并说明UX决策的理由。
  • 为开发人员创建技术文档,解释应用程序架构以及如何实现这些功能。
task1 = Task(
    description=f"Design the core features of the mobile app based on the following input: {app_features_input}",
    expected_output="List the key features of the app, categorized by functionality (e.g., authentication, notifications, etc.).",
    agent=feature_planner
)

task2 = Task(
    description="Design the user interface and experience (UI/UX) based on the planned features.",
    expected_output="Generate a detailed wireframe or description of the user interface, along with a rationale for UX decisions.",
    output_file="uiux_design.txt",
    agent=uiux_designer
)

task3 = Task(
    description="Write the technical documentation detailing how the features should be implemented, including architecture diagrams, API endpoints, and data flow.",
    expected_output="Create a technical document for developers that explains the app's architecture and how to implement the features.",
    output_file="technical_documentation.txt",
    agent=technical_writer
)

当您运行代码时,‘technical_documentation.txt’文件将会出现,这就是为什么创建output_file参数很重要。

剩下的就是创建一个由我们的两个代理组成的小组。

创建团队和管理过程:

任务按顺序(顺序)进行。使用之前定义的代理和任务创建Crew对象。

crew = Crew(
    agents=[feature_planner, uiux_designer, technical_writer],
    tasks=[task1, task2, task3],
    process=Process.sequential,  # The tasks are carried out in the order
    verbose=True
)

print(crew.kickoff())  # Launching process

假设我的输入是:‘通过电子邮件和社交网络进行身份验证,推送通知以获取特别优惠,互动地图以查找附近的商店。任务管理与提醒,分享任务给其他用户,以及添加子任务的能力。卡路里跟踪,根据食材的食谱建议,以及忠诚积分系统。’

结果:

让我们显示technical_documentation.txt作为示例:

使用 Crew AI 和 Tavily 构建 Agentic RAG(与 LLM Meta AI)

在本节中,我们探索使用 Crew AI 和 Tavily 的 RAG 代理的世界。我们将展示如何通过将搜索机制与生成模型集成来提高 AI 能力,以设计自主和智能的代理。

要求 :

您需要安装以下库(如果尚未安装):

  • crewai & crewai_tools
  • langchain & langchain-groq
  • sentence-transformers

获取 Groq 和 Tavily API 的密钥。

from langchain_openai import ChatOpenAI
import os
from crewai_tools import PDFSearchTool  # import PDF file
from langchain_community.tools.tavily_search import TavilySearchResults
from crewai_tools  import tool
from crewai import Crew
from crewai import Task
from crewai import Agent
from google.colab import userdata

os.environ['GROQ_API_KEY'] = userdata.get('GROQ_API_KEY')
os.environ['TAVILY_API_KEY'] = userdata.get('TAVILY_API_KEY')

llm = ChatOpenAI(
    openai_api_base="https://api.groq.com/openai/v1",
    openai_api_key=os.environ['GROQ_API_KEY'],
    model_name="llama3-8b-8192",
    temperature=0.1,
    max_tokens=1000,
)

rag = PDFSearchTool(pdf='doc.pdf',
    config=dict(
        llm=dict(
            provider="groq", # or google, openai, anthropic, llama2, ...
            config=dict(
                model="llama3-8b-8192",
                # temperature=0.5,
                # top_p=1,
                # stream=true,
            ),
        ),
        embedder=dict(
            provider="huggingface", # or openai, ollama, ...
            config=dict(
                model="BAAI/bge-small-en-v1.5",
                #task_type="retrieval_document",
                # title="Embeddings",
            ),
        ),
    )
)

#我们通过使用 rag 模型读取相关内容来搜索 PDF 文件的内容

rag.run("Sporo Health 是做什么的?") # 根据 PDF

现在,让我们在网上查找关于上述问题的一些结果。

web_search = TavilySearchResults(k=3) # 至少搜索 3 个链接
web_search.run("Sporo Health 是做什么的?")

我们将创建一个路由函数,该函数分析一个问题(作为参数接收)并决定使用哪个工具或方法来回答它。

@tool
def router_tool(question):
  """路由函数"""
  if 'Sporo Health' in question:
    return 'vectorstore'
  else:
    return 'web_search'

我们将创建两个代理,其中一个称为 Router_Agent,旨在将用户的问题引导到与增强搜索生成(ASG)相关的向量搜索或其他问题的网页搜索,同时对关键词保持灵活性;另一个称为 Gradent_Agent,旨在根据与用户问题相关的关键词的存在评估检索到的文档的相关性,同时确保提供的答案是相关的。

现在,让我们创建两个任务:

  • router_task : 分析问题中的关键词,并通过 Router_Agent 代理和 router_tool 工具返回“vectorstore”或“websearch”,而不做任何解释。
  • retriever_task : 使用 router_task 的响应根据适当的工具提取信息:对于“websearch”输出使用 web_search_tool,针对“vectorstore”输出使用 rag_tool。Retriever_Agent 然后必须提供清晰简洁的响应。
router_task = Task(
    description=("分析问题 {question} 中的关键词"
    "根据关键词决定它是否适合进行向量搜索或网页搜索。"
    "如果适合向量搜索,则返回一个单词 'vectorstore'。"
    "如果适合网页搜索,则返回一个单词 'websearch'。"
    "不要提供任何其他前言或解释。"
    ),
    expected_output=("根据问题给出二元选择 'websearch' 或 'vectorstore'"
    "不要提供任何其他前言或解释。"),
    agent=Router_Agent,
    tools=[router_tool],
)

retriever_task = Task(
    description=("根据路由任务的响应提取问题 {question} 的信息,借助相应的工具。"
    "如果路由任务输出为 'websearch',则使用 web_serach_tool 从网络中检索信息。"
    "如果路由任务输出为 'vectorstore',则使用 rag_tool 从向量存储中检索信息。"
    ),
    expected_output=("您应该分析 'router_task' 的输出。"
    "如果响应为 'websearch',则使用 web_search_tool 从网络中检索信息。"
    "如果响应为 'vectorstore',则使用 rag_tool 从向量存储中检索信息。"
    "返回清晰简洁的文本作为响应。"),
    agent=Retriever_Agent,
    context=[router_task],
)

太好了!剩下的就是 crew:

crew = Crew(
    agents=[Router_Agent, Retriever_Agent, Grader_agent, hallucination_grader, answer_grader],
    tasks=[router_task, retriever_task, grader_task, hallucination_task, answer_task],
    verbose=True,

)

print(result = rag_crew.kickoff(inputs={"question":"Sporo 是否简化了患者病历审查?"})

输出 : 是的,Sporo 简化了患者病历审查。

结论

CrewAI 在其可扩展功能方面具有明显优势,这些功能由 LangChain 提供支持,包括与各种工具的集成和对开源大型语言模型的支持。其管理顺序编排的能力可能会显著提升多智能体应用的开发。

参考文献 :

Related Posts

使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多