编辑注:这篇博文来自 CrewAI 的维护者 Joao Moura。CrewAI 是一个基于 LangChain 构建的多代理框架,我们非常高兴能重点介绍这项尖端工作。
AI 代理团队正在改变游戏规则
AI 代理正在成为改变游戏规则的力量,它们迅速成为解决问题、创造力和创新的合作伙伴,而这就是 CrewAI 的用武之地。
想象一下,只需几分钟就能将一行想法变成一个完整的登录页面。这是我们今天使用 CrewAI 正在创造的现实。
最近,我在一条推文中演示了这一点,使用 CrewAI 和 LangChain 以及 OpenHermes2.5(由 Ollama 提供支持),将一行文字转换成一个完整的登录页面。结果揭示了 AI 协作中未开发的潜力,以及比以往更快地进行早期市场测试想法的能力,这仅仅是一个用例而已(在 Replit 中使用代码玩玩)。
CrewAI 的愿景非常清晰,即让工程师能够利用 AI 代理的集体力量,超越传统的自动化,将代理汇集在一起,实现简化的决策制定、增强的创造力和解决复杂挑战的能力。
通过模块化设计实现简洁
CrewAI 倡导一个与每位工程师产生共鸣的原则:通过模块化实现简洁。这意味着它就像一套积木(很像 LangChain)。
CrewAI 的主要组件
- 代理:这些就像你的专门团队成员,每个成员都有自己的角色、背景故事、目标和记忆
- 工具:我们的代理用于高效执行任务的设备,你可以使用 LangChain 中的任何现有工具,或者快速编写自己的工具
- 任务:某个代理应该完成的简短而专注的任务
- 流程:这是团队遵循的任务完成工作流程或策略。
- 团队:代理、任务和流程相遇的地方,这是工作进行的容器层
我们相信简洁的力量可以释放复杂性。通过将 AI 代理的复杂世界分解成这些模块化组件,我们使它更易于使用、管理和有趣。
虽然单个任务很重要,但 CrewAI 在多个代理汇聚成一个团队时真正发挥了作用。正是团队合作——代理之间协作、共享目标、并遵循流程以实现共同目标——让你从一般的结果走向非常令人印象深刻的结果!
CrewAI 中协作的一个例子是委托,得益于委托,代理可以请求帮助或将任务的一部分分配给其他人,就像我们在工作场所做的那样。这种自发协作的能力是使这个库与众不同的一个例子。
我设计 CrewAI 用于实际的现实世界应用。我们努力使其成为一个你可以集成到你的应用程序中的库,并且可以像调用函数一样轻松地使用它。
使用 CrewAI 构建
免责声明:完整的代码示例可以在 Replit 上以模板的形式获取,你可以在云中自行定制和运行,也可以在 Github 上获取。
让我们探索一个可以从单行想法构建登录页面的团队的想法。构建一个新团队的最佳方法是首先规划出你作为人类将经历的流程来完成这项工作,然后我们可以将其转换为一个团队。
我对登录页面的需求源于我想要快速尝试想法,看看它们是否有吸引力,因此我希望能够快速构建一个登录页面并衡量人们对此的兴趣,这样我才能够花更多时间在它上面。与其说是一个登录页面,我更需要做好沟通工作,向人们传达我提供的产品或服务,以确保它具有吸引力。
所以,作为一个人,我会这样做
- 首先写下一个单行想法,比如“一种帮助狗减肥的健康零食”。
- 通过一些研究来扩展它,了解市场以及为什么这是一个好主意。
- 为这个想法的登录页面找到合适的模板。
- 为登录页面编写文案。
- 使用合适的模板和文案构建登录页面。
那么,如果我需要为这项工作组建一个团队,我会聘请哪些理想的人选呢?
- 资深想法分析师来理解和扩展想法的本质,确保它们很棒,并专注于真正的痛点。
- 资深传播策略师来精心打造引人入胜的故事,吸引人们围绕某个想法参与。
- 资深 React 工程师来构建一个直观、美观且转化率高的登录页面。
- 资深内容编辑来确保登录页面内容清晰、简洁且引人入胜。
现在我们有了团队,让我们看看如何将其部分内容转换为一个最初的 CrewAI 团队,该团队可以将我们的单行文字扩展成一个经过充分研究的想法(完整代码可以在 Replit 和 Github 上获取)。
为此,你需要创建每个你想使用的代理,创建你想让它们执行的任务,然后将它们组合成一个团队。
# ... early imports, tools, setting OpenAI API key, etc
from crewai import Agent, Task, Crew
## Create Agents with goal, role, backstory and tools
idea_analyst = Agent(
role="Senior Idea Analyst",
goal= "Understand and expand upon the essence of ideas... [rest of it]",
background_story="You're recognized as a thought leader... [rest of it]",
verbose=True,
tools=[
SearchTools.search_internet,
BrowserTools.scrape_and_summarize_website
]
)
# communications_strategist = Agent(...) another agent
## Create the tasks that will produce a fully formed idea proposal
expand_idea_task = Task(
description="THIS IS A GREAT IDEA! Analyze it and conduct... [rest of description]",
agent=idea_analyst
)
# refine_idea_task = Task(...) another task
## Create the crew that will produce a fully formed idea proposal
crew = Crew(
agents=[idea_analyst, communications_strategist],
tasks=[expand_idea_task, refine_idea_task],
verbose=True
)
final_improved_idea = crew.kickoff() # returns the final idea proposal
自定义
我们刚刚探讨的示例是 CrewAI 中最基本的设置之一,看看它有多强大!但这仅仅是触及了表面。想象一下,当你开始自定义事物(我将在帖子后面链接一些完全可用的示例)时的可能性。
想想在你的团队中混合搭配不同的 AI 脑(LLM)。有些可能位于云端,有些可能就在你的电脑上,由你决定。如果你有独特的挑战怎么办?没问题,你可以随时使用微调模型来成为某个代理的大脑。那么与外部系统的集成呢?你可以制作自己的工具,或者利用 LangChain 提供的大量工具,就像下面的示例一样
# !pip install yfinance
from langchain.chat_models import ChatOpenAI
from langchain.llms import Ollama
from langchain.tools.yahoo_finance_news import YahooFinanceNewsTool
from crewai import Agent, Task, Crew
stock_analyst = Agent(
role="Senior Stock Analyst",
goal= "Report on stocks and analysis with suggestions ...",
background_story="You're recognized as a major trader...",
llm = Ollama(model="openhermes2.5-mistral") # Using local model with Ollama
tools=[ YahooFinanceNewsTool() ], # Using a LangChain tool
verbose=True,
)
# Create Other Agents, Tasks and Crew
免责声明:对于那些深入研究本地模型的人来说,一个小小提示:它们刚开始可能有点棘手,尤其是那些较小的模型。为了充分利用它们,你可能需要调整一些设置。你应该将“观察”添加为停用词,并围绕“top_p”、“repeat_last_n”和“temperature”等参数进行尝试,以使其按需工作。这些小小的调整可以对你的 AI 代理的性能产生巨大影响。
工作原理
在幕后,每个 CrewAI 代理本质上都是一个 LangChain 代理,但它通过 ReActSingleInputOutputParser 增强。此解析器经过专门修改,可以更好地支持角色扮演,并结合了用于上下文关注的绑定停用词,并集成了记忆机制(使用 LangChain 的 ConversationSummaryMemory)以保持任务的连续性。
代理是基于 LangChain 构建的事实造成了飞轮效应,其中主要的一个是你可以开箱即用地访问所有 LangChain 工具 和 工具包,仅此一项就打开了无数用例。
在当前迭代中,代理以自主方式运作,参与自我对话以确定工具的使用。然而,CrewAI 的未来版本计划引入不同的流程类型。这些将使协作执行能够在各种小组环境中进行,允许在运行时对代理进行动态任务分配。
任务是在当前版本的创建时分配给代理的,并提供覆盖代理在执行工作时可用的工具的能力,这使得引导相同的代理执行略有不同的任务变得更加容易,而不会让它使用太多工具。
团队作为一个框架,将代理和任务封装在一起,促进它们对工作的顺序执行。在实践中,你可能会发现部署多个独立的团队更有效,每个团队都有几个代理。这种模块化方法允许每个团队产生不同的结果,而不是一个单独的大型团队来处理许多任务和代理以获得单个输出。
真实用例和代码
除了构建登录页面之外,我还将团队用于许多其他用例,其中一些列在下面,并提供 Replit 模板的链接,以便你可以修改并自己尝试。
未来
目前,CrewAI 倡导“顺序”流程。把它想象成接力赛,每个代理完成自己的部分,然后将工作传递给下一个代理。它简单但有效。
但这并没有充分利用 AI 代理之间协作的所有不同方式,因此我们不会止步于此——我们正在努力引入更复杂的流程,例如“共识”和“层次结构”,以释放更大的潜力。我们非常欢迎贡献 通过 Github 上的 PR 和 Issues 两种方式进行,如果你喜欢它,也可以 在 X 上发帖告诉我,我很乐意听到更多享受它的人的反馈!
总结
CrewAI 代表了 AI 代理的转变,它提供了一个轻量级的框架,利用协作和角色扮演,基于多功能性和效率。它是一个面向工程师和创意人员的工具,能够将 AI 代理无缝组装成具有凝聚力的高性能团队。
无论是将一个想法变成一个完整的登录页面,还是进行复杂的想法分析,CrewAI 都能通过其流程熟练地处理各种任务。
CrewAI 的现实世界应用,从提升社交媒体影响力到构建交互式登录页面,突出了它的实用性和适应性。展望未来,CrewAI 将继续发展,引入更复杂的流程,并继续重塑 AI 团队合作的格局。凭借其易于使用的集成和自定义选项,CrewAI 不仅仅是一个概念,而是一个切实可行的强大工具,可以利用 AI 代理的力量。