鍵.png)
使用NestJS和Prisma構(gòu)建REST API:身份驗(yàn)證
from crewai import Agent
agent = Agent(
role='數(shù)據(jù)分析師',
goal='提取可操作的見解',
backstory="""您是一家大公司的數(shù)據(jù)分析師。
您負(fù)責(zé)分析數(shù)據(jù)并為業(yè)務(wù)提供見解。
您目前正在進(jìn)行一個(gè)項(xiàng)目,分析我們營(yíng)銷活動(dòng)的表現(xiàn)。""",
tools=[my_tool1, my_tool2], # 可選,默認(rèn)為空列表
llm=my_llm, # 可選
function_calling_llm=my_llm, # 可選
max_iter=15, # 可選
max_rpm=None, # 可選
verbose=True, # 可選
allow_delegation=True, # 可選
step_callback=my_intermediate_step_callback, # 可選
cache=True # 可選
)
代理是 CrewAI 框架的構(gòu)建模塊。通過了解如何定義和與代理交互,您可以創(chuàng)建利用協(xié)作智能力的復(fù)雜人工智能系統(tǒng)。
在 crewAI 框架中,任務(wù)是由代理完成的具體任務(wù)。它們提供執(zhí)行所需的所有必要細(xì)節(jié),如描述、負(fù)責(zé)代理、所需工具等,有助于促進(jìn)各種行動(dòng)復(fù)雜性。
crewAI 中的任務(wù)可以是協(xié)作的,需要多個(gè)代理共同工作。這通過任務(wù)屬性進(jìn)行管理,并由 Crew 的流程進(jìn)行編排,增強(qiáng)團(tuán)隊(duì)合作和效率。
屬性 | 描述 |
---|---|
描述 | 任務(wù)內(nèi)容的清晰簡(jiǎn)明陳述。 |
代理 | 負(fù)責(zé)任務(wù)的代理,直接分配或由 Crew 的流程分配。 |
預(yù)期輸出 | 任務(wù)完成后的詳細(xì)描述。 |
工具 (可選) | 代理用于執(zhí)行任務(wù)的功能或能力。 |
異步執(zhí)行 (可選) | 如果設(shè)置,任務(wù)將異步執(zhí)行,允許在不等待完成的情況下進(jìn)行進(jìn)展。 |
上下文 (可選) | 指定輸出用作此任務(wù)上下文的任務(wù)。 |
配置 (可選) | 用于執(zhí)行任務(wù)的代理的附加配置細(xì)節(jié),允許進(jìn)一步定制。 |
輸出 JSON (可選) | 輸出 JSON 對(duì)象,需要 OpenAI 客戶端。只能設(shè)置一種輸出格式。 |
輸出 Pydantic (可選) | 輸出 Pydantic 模型對(duì)象,需要 OpenAI 客戶端。只能設(shè)置一種輸出格式。 |
輸出文件 (可選) | 將任務(wù)輸出保存到文件。如果與 輸出 JSON 或 輸出 Pydantic 一起使用,指定輸出保存方式。 |
回調(diào) (可選) | 任務(wù)完成后執(zhí)行的 Python 可調(diào)用函數(shù)。 |
人工輸入 (可選) | 指示任務(wù)是否需要最終人工反饋,對(duì)需要人工監(jiān)督的任務(wù)很有用。 |
創(chuàng)建任務(wù)涉及定義其范圍、負(fù)責(zé)代理以及任何額外屬性以實(shí)現(xiàn)靈活性:
from crewai import Task
task = Task(
description='查找并總結(jié)有關(guān)人工智能的最新和最相關(guān)新聞',
agent=sales_agent
)
“任務(wù)分配”:直接為分配指定一個(gè) 代理
,或者讓 分層
的 CrewAI 流程根據(jù)角色、可用性等決定。
利用 crewAI Toolkit 和 LangChain Tools 中的工具,增強(qiáng)任務(wù)性能和代理交互。
import os
os.environ["OPENAI_API_KEY"] = "Your Key"
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool
research_agent = Agent(
role='研究員',
goal='查找并總結(jié)最新的人工智能新聞',
backstory="""您是一家大公司的研究員。
您負(fù)責(zé)分析數(shù)據(jù)并為業(yè)務(wù)提供見解。""",
verbose=True
)
search_tool = SerperDevTool()
task = Task(
description='查找并總結(jié)最新的人工智能新聞',
expected_output='對(duì)前 5條最重要的人工智能新聞進(jìn)行項(xiàng)目符號(hào)列表總結(jié)',
agent=research_agent,
tools=[search_tool]
)
crew = Crew(
agents=[research_agent],
tasks=[task],
verbose=2
)
result = crew.kickoff()
print(result)
這演示了如何使用特定工具的任務(wù)可以覆蓋代理的默認(rèn)設(shè)置,實(shí)現(xiàn)定制化任務(wù)執(zhí)行。
在 crewAI 中,一個(gè)任務(wù)的輸出會(huì)自動(dòng)傳遞到下一個(gè)任務(wù),但您可以明確定義哪些任務(wù)的輸出,包括多個(gè)任務(wù)應(yīng)作為另一個(gè)任務(wù)的上下文。
當(dāng)您有一個(gè)任務(wù)依賴于另一個(gè)任務(wù)的輸出,但并非立即在其后執(zhí)行時(shí),這將非常有用。這通過任務(wù)的 上下文
屬性完成:# ...
research_ai_task = Task(
description='查找并總結(jié)最新的人工智能新聞',
expected_output='對(duì)前 5條最重要的人工智能新聞進(jìn)行項(xiàng)目符號(hào)列表總結(jié)',
async_execution=True,
agent=research_agent,
tools=[search_tool]
)
research_ops_task = Task(
description='查找并總結(jié)最新的人工智能運(yùn)營(yíng)新聞',
expected_output='對(duì)前 5條最重要的人工智能運(yùn)營(yíng)新聞進(jìn)行項(xiàng)目符號(hào)列表總結(jié)',
async_execution=True,
agent=research_agent,
tools=[search_tool]
)
write_blog_task = Task(
description="撰寫一篇關(guān)于人工智能重要性及其最新新聞的完整博客文章",
expected_output='4段長(zhǎng)的完整博客文章',
agent=writer_agent,
context=[research_ai_task, research_ops_task]
)
#...
您可以定義任務(wù)以異步執(zhí)行。這意味著 Crew 不會(huì)等待其完成才繼續(xù)下一個(gè)任務(wù)。這對(duì)于需要很長(zhǎng)時(shí)間完成的任務(wù)或?qū)ο乱粋€(gè)任務(wù)執(zhí)行不是至關(guān)重要的任務(wù)非常有用。
然后,您可以使用 上下文
屬性在將來的任務(wù)中定義,它應(yīng)等待異步任務(wù)的輸出完成。#...
list_ideas = Task(
description="探索有關(guān)人工智能文章的 5個(gè)有趣想法。",
expected_output="一份包含 5個(gè)文章想法的項(xiàng)目符號(hào)列表。",
agent=researcher,
async_execution=True # 將以異步方式執(zhí)行
)
list_important_history = Task(
description="研究人工智能的歷史,并告訴我 5個(gè)最重要的事件。",
expected_output="包含 5個(gè)重要事件的項(xiàng)目符號(hào)列表。",
agent=researcher,
async_execution=True # 將以異步方式執(zhí)行
)
write_article = Task(
description="撰寫一篇關(guān)于人工智能、其歷史和有趣想法的文章。",
expected_output="一篇關(guān)于人工智能的 4段文章。",
agent=writer,
context=[list_ideas, list_important_history] # 將等待兩個(gè)任務(wù)的輸出完成
)
#...
在任務(wù)完成后執(zhí)行回調(diào)函數(shù),允許根據(jù)任務(wù)結(jié)果觸發(fā)操作或通知。# ...
def callback_function(output: TaskOutput):
# 任務(wù)完成后執(zhí)行某些操作
# 例如:向經(jīng)理發(fā)送電子郵件
print(f"""
任務(wù)完成!
任務(wù):{output.description}
輸出:{output.raw_output}
""")
research_task = Task(
description='查找并總結(jié)最新的人工智能新聞',
expected_output='對(duì)前 5條最重要的人工智能新聞進(jìn)行項(xiàng)目符號(hào)列表總結(jié)',
agent=research_agent,
tools=[search_tool],
callback=callback_function
)
#...
一組 Crew 運(yùn)行完成后,您可以通過使用任務(wù)對(duì)象的 output
屬性訪問特定任務(wù)的輸出:# ...
task1 = Task(
description='查找并總結(jié)最新的人工智能新聞',
expected_output='對(duì)前 5條最重要的人工智能新聞進(jìn)行項(xiàng)目符號(hào)列表總結(jié)',
agent=research_agent,
tools=[search_tool]
)
#...
crew = Crew(
agents=[research_agent],
tasks=[task1, task2, task3],
verbose=2
)
result = crew.kickoff()
# 返回一個(gè) TaskOutput 對(duì)象,其中包含任務(wù)的描述和結(jié)果
print(f"""
任務(wù)完成!
任務(wù):{task1.output.description}
輸出:{task1.output.raw_output}
""")
在任務(wù)中指定工具允許動(dòng)態(tài)調(diào)整代理能力,突出了 CrewAI 的靈活性。
在創(chuàng)建和執(zhí)行任務(wù)時(shí),存在某些驗(yàn)證機(jī)制,以確保任務(wù)屬性的健壯性和可靠性。這些驗(yàn)證包括但不限于:
id
屬性,以維護(hù)唯一標(biāo)識(shí)符系統(tǒng)的完整性。這些驗(yàn)證有助于在 crewAI 框架內(nèi)維護(hù)任務(wù)執(zhí)行的一致性和可靠性。
任務(wù)是 crewAI 中代理行動(dòng)的推動(dòng)力。通過正確定義任務(wù)及其結(jié)果,您為 AI 代理有效地工作奠定了基礎(chǔ),無論是獨(dú)立工作還是作為協(xié)作單位。為任務(wù)配備適當(dāng)?shù)墓ぞ?,了解?zhí)行過程,并遵循健壯的驗(yàn)證實(shí)踐對(duì)于最大化 CrewAI 的潛力至關(guān)重要,確保代理有效準(zhǔn)備好執(zhí)行其任務(wù),并確保任務(wù)按預(yù)期執(zhí)行。
crewAI 工具賦予代理能力,從網(wǎng)頁(yè)搜索和數(shù)據(jù)分析到協(xié)作和任務(wù)委派等各種功能。本文檔概述了如何在 crewAI 框架內(nèi)創(chuàng)建、集成和利用這些工具,包括對(duì)協(xié)作工具的新重點(diǎn)。
CrewAI 中的工具是代理可以利用的用于執(zhí)行各種操作的技能或功能。這包括來自 crewAI Toolkit 和 LangChain Tools 的工具,使代理之間能夠進(jìn)行從簡(jiǎn)單搜索到復(fù)雜互動(dòng)以及有效團(tuán)隊(duì)合作的一切。
要通過 crewAI 工具增強(qiáng)代理的能力,請(qǐng)先安裝我們的額外工具包:
pip install 'crewai[tools]'
以下是演示它們使用的示例:
import os
from crewai import Agent, Task, Crew
# 導(dǎo)入 crewAI 工具
from crewai_tools import (
DirectoryReadTool,
FileReadTool,
SerperDevTool,
WebsiteSearchTool
)
# 設(shè)置 API 密鑰
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API 密鑰
os.environ["OPENAI_API_KEY"] = "Your Key"
# 實(shí)例化工具
docs_tool = DirectoryReadTool(directory='./blog-posts')
file_tool = FileReadTool()
search_tool = SerperDevTool()
web_rag_tool = WebsiteSearchTool()
# 創(chuàng)建代理
researcher = Agent(
role='市場(chǎng)研究分析師',
goal='提供關(guān)于人工智能行業(yè)最新市場(chǎng)分析',
backstory='一位對(duì)市場(chǎng)趨勢(shì)敏銳的專家分析師。',
tools=[search_tool, web_rag_tool],
verbose=True
)
writer = Agent(
role='內(nèi)容撰寫人員',
goal='撰寫有關(guān)人工智能行業(yè)的引人入勝的博客文章',
backstory='一位對(duì)技術(shù)充滿激情的熟練撰稿人。',
tools=[docs_tool, file_tool],
verbose=True
)
# 定義任務(wù)
research = Task(
description='研究人工智能行業(yè)的最新趨勢(shì)并提供摘要。',
expected_output='關(guān)于人工智能行業(yè)前三個(gè)熱門發(fā)展的摘要,并對(duì)其重要性提供獨(dú)特視角。',
agent=researcher
)
write = Task(
description='根據(jù)研究分析師的摘要撰寫一篇引人入勝的博客文章。從目錄中最新的博客文章中汲取靈感。',
expected_output='一篇以 markdown 格式排版的四段博客文章,內(nèi)容引人入勝、信息豐富且易懂,避免使用復(fù)雜術(shù)語(yǔ)。',
agent=writer,
output_file='blog-posts/new_post.md' # 最終的博客文章將保存在此處
)
# 組建團(tuán)隊(duì)
crew = Crew(
agents=[researcher, writer],
tasks=[research, write],
verbose=2
)
# 執(zhí)行任務(wù)
crew.kickoff()
cache_function
屬性對(duì)緩存機(jī)制進(jìn)行更精細(xì)的控制。以下是可用工具及其描述的列表:
工具 | 描述 |
---|---|
CodeDocsSearchTool | 專為搜索代碼文檔和相關(guān)技術(shù)文檔而優(yōu)化的 RAG 工具。 |
CSVSearchTool | 專為在 CSV 文件中搜索而設(shè)計(jì)的 RAG 工具,適用于處理結(jié)構(gòu)化數(shù)據(jù)。 |
DirectorySearchTool | 用于在目錄中搜索的 RAG 工具,可用于瀏覽文件系統(tǒng)。 |
DOCXSearchTool | 旨在在 DOCX 文檔中搜索的 RAG 工具,適用于處理 Word 文件。 |
DirectoryReadTool | 便于讀取和處理目錄結(jié)構(gòu)及其內(nèi)容。 |
FileReadTool | 可讀取并提取文件中的數(shù)據(jù),支持各種文件格式。 |
GithubSearchTool | 用于在 GitHub 存儲(chǔ)庫(kù)中搜索的 RAG 工具,適用于代碼和文檔搜索。 |
SerperDevTool | 專為開發(fā)目的而設(shè)計(jì)的專用工具,具有特定的功能正在開發(fā)中。 |
TXTSearchTool | 專注于在文本(.txt)文件中搜索的 RAG 工具,適用于非結(jié)構(gòu)化數(shù)據(jù)。 |
JSONSearchTool | 專為在 JSON 文件中搜索而設(shè)計(jì)的 RAG 工具,適用于處理結(jié)構(gòu)化數(shù)據(jù)。 |
MDXSearchTool | 專為在 Markdown(MDX)文件中搜索而定制的 RAG 工具,適用于文檔。 |
PDFSearchTool | 旨在在 PDF 文檔中搜索的 RAG 工具,適用于處理掃描文檔。 |
PGSearchTool | 專為在 PostgreSQL 數(shù)據(jù)庫(kù)中搜索而優(yōu)化的 RAG 工具,適用于數(shù)據(jù)庫(kù)查詢。 |
RagTool | 通用的 RAG 工具,能夠處理各種數(shù)據(jù)源和類型。 |
ScrapeElementFromWebsiteTool | 可從網(wǎng)站中抓取特定元素,適用于有針對(duì)性的數(shù)據(jù)提取。 |
ScrapeWebsiteTool | 便于抓取整個(gè)網(wǎng)站,適用于全面的數(shù)據(jù)收集。 |
WebsiteSearchTool | 用于搜索網(wǎng)站內(nèi)容的 RAG 工具,優(yōu)化了網(wǎng)絡(luò)數(shù)據(jù)提取。 |
XMLSearchTool | 專為在 XML 文件中搜索而設(shè)計(jì)的 RAG 工具,適用于結(jié)構(gòu)化數(shù)據(jù)格式。 |
YoutubeChannelSearchTool | 用于在 YouTube 頻道中搜索的 RAG 工具,適用于視頻內(nèi)容分析。 |
YoutubeVideoSearchTool | 旨在在 YouTube 視頻中搜索的 RAG 工具,適用于視頻數(shù)據(jù)提取。 |
“自定義工具創(chuàng)建”
開發(fā)人員可以創(chuàng)建根據(jù)代理需求定制的自定義工具,或者利用預(yù)構(gòu)建選項(xiàng):
要?jiǎng)?chuàng)建自己的 crewAI 工具,您需要安裝我們的額外工具包:
pip install 'crewai[tools]'
一旦您這樣做了,有兩種主要方法可以創(chuàng)建 crewAI 工具:
子類化?BaseTool
from crewai_tools import BaseTool
class MyCustomTool(BaseTool):
name: str = "我的工具名稱"
description: str = "清晰描述此工具用于什么,您的代理將需要這些信息來使用它。"
def _run(self, argument: str) -> str:
# 實(shí)現(xiàn)在這里
return "自定義工具的結(jié)果"
利用?tool
?裝飾器
from crewai_tools import tool
@tool("我的工具名稱")
def my_tool(question: str) -> str:
"""清晰描述此工具用于什么,您的代理將需要這些信息來使用它。"""
# 函數(shù)邏輯在這里
return "您的自定義工具的結(jié)果"
“緩存”
工具可以選擇實(shí)現(xiàn) cache_function
來微調(diào)緩存行為。此函數(shù)根據(jù)特定條件確定何時(shí)緩存
from crewai_tools import tool
@tool
def multiplication_tool(first_number: int, second_number: int) -> str:
"""當(dāng)您需要將兩個(gè)數(shù)字相乘時(shí)有用。"""
return first_number * second_number
def cache_func(args, result):
# 在這種情況下,僅在結(jié)果是 2 的倍數(shù)時(shí)才緩存結(jié)果
cache = result % 2 == 0
return cache
multiplication_tool.cache_function = cache_func
writer1 = Agent(
role="作家",
goal="為孩子們編寫數(shù)學(xué)課程。",
backstory="您是一位寫作專家,熱愛教孩子,但您對(duì)數(shù)學(xué)一無所知。",
tools=[multiplication_tool],
allow_delegation=False,
)
#...
“LangChain 集成”
CrewAI 與 LangChain 的全面工具包無縫集成,用于基于搜索的查詢等,以下是 Langchai
from crewai import Agent
from langchain.agents import Tool
from langchain.utilities import GoogleSerperAPIWrapper
# 設(shè)置 API 密鑰
os.environ["SERPER_API_KEY"] = "Your Key"
search = GoogleSerperAPIWrapper()
# 創(chuàng)建并將搜索工具分配給代理
serper_tool = Tool(
name="中級(jí)答案",
func=search.run,
description="用于基于搜索的查詢的工具",
)
agent = Agent(
role='研究分析師',
goal='提供最新的市場(chǎng)分析',
backstory='一位對(duì)市場(chǎng)趨勢(shì)敏銳的專家分析師。',
tools=[serper_tool]
)
# 代碼的其余部分 ...
工具在擴(kuò)展 CrewAI 代理的能力方面起著至關(guān)重要的作用,使它們能夠執(zhí)行各種任務(wù)并有效地進(jìn)行協(xié)作。在使用 CrewAI 構(gòu)建解決方案時(shí),利用自定義和現(xiàn)有工具來賦能您的代理,并增強(qiáng) AI 生態(tài)系統(tǒng)??紤]利用錯(cuò)誤處理、緩存機(jī)制以及工具參數(shù)的靈活性來優(yōu)化您的代理的性能和能力。
在 CrewAI 中,流程通過協(xié)調(diào)代理執(zhí)行任務(wù),類似于人類團(tuán)隊(duì)中的項(xiàng)目管理。這些流程確保任務(wù)被有效地分配和執(zhí)行,與預(yù)定義的策略保持一致。
manager_llm
) 以啟用分級(jí)流程,通過管理者便捷地創(chuàng)建和管理任務(wù)。流程使個(gè)體代理能夠作為一個(gè)有凝聚力的整體運(yùn)作,簡(jiǎn)化他們的努力,以高效和協(xié)調(diào)的方式實(shí)現(xiàn)共同目標(biāo)。
要將流程分配給船員,在創(chuàng)建船員時(shí)指定流程類型以設(shè)置執(zhí)行策略。對(duì)于分級(jí)流程,確保為管理者代理定義?manager_llm
。
from crewai import Crew
from crewai.process import Process
from langchain_openai import ChatOpenAI
# 示例:創(chuàng)建一個(gè)具有順序流程的船員
crew = Crew(
agents=my_agents,
tasks=my_tasks,
process=Process.sequential
)
# 示例:創(chuàng)建一個(gè)具有分級(jí)流程的船員
# 確保提供 manager_llm
crew = Crew(
agents=my_agents,
tasks=my_tasks,
process=Process.hierarchical,
manager_llm=ChatOpenAI(model="gpt-4")
)
注意: 確保在創(chuàng)建 Crew
對(duì)象之前定義了 my_agents
和 my_tasks
,對(duì)于分級(jí)流程,還需要 manager_llm
。
該方法模擬動(dòng)態(tài)團(tuán)隊(duì)工作流程,以深思熟慮和系統(tǒng)化的方式進(jìn)行任務(wù)。任務(wù)執(zhí)行遵循任務(wù)列表中預(yù)定義的順序,一個(gè)任務(wù)的輸出作為下一個(gè)任務(wù)的上下文。
要自定義任務(wù)上下文,可以利用 Task
類中的 context
參數(shù)指定應(yīng)作為后續(xù)任務(wù)上下文使用的輸出。
模擬公司的等級(jí)制度,CrewAI 會(huì)自動(dòng)為您創(chuàng)建一個(gè)管理者,需要為管理者代理指定一個(gè)管理語(yǔ)言模型 (manager_llm
)。該代理負(fù)責(zé)監(jiān)督任務(wù)執(zhí)行,包括規(guī)劃、委派和驗(yàn)證。任務(wù)不是預(yù)分配的;管理者根據(jù)代理的能力分配任務(wù),審查輸出,并評(píng)估任務(wù)完成情況。
Process
類被實(shí)現(xiàn)為一個(gè)枚舉 (Enum
),確保類型安全并將流程值限制為定義的類型(sequential
、hierarchical
)。共識(shí)流程計(jì)劃在未來加入,強(qiáng)調(diào)我們對(duì)持續(xù)發(fā)展和創(chuàng)新的承諾。
output_json
)、Pydantic 模型 (output_pydantic
) 和文件輸出 (output_file
),靈活地捕獲和利用任務(wù)結(jié)果。這允許各種輸出可能性,滿足不同的需求和要求。在 CrewAI 中通過流程實(shí)現(xiàn)的結(jié)構(gòu)化協(xié)作對(duì)于促進(jìn)代理之間的系統(tǒng)化團(tuán)隊(duì)合作至關(guān)重要。本文檔已更新以反映最新功能、增強(qiáng)功能以及計(jì)劃整合共識(shí)流程,確保用戶可以訪問最新和全面的信息。
在 crewAI 中,團(tuán)隊(duì)代表著一群代理共同合作以完成一組任務(wù)。每個(gè)團(tuán)隊(duì)定義了任務(wù)執(zhí)行策略、代理協(xié)作以及整體工作流程。
屬性 | 描述 |
---|---|
任務(wù) | 分配給團(tuán)隊(duì)的任務(wù)列表。 |
代理 | 屬于團(tuán)隊(duì)的代理列表。 |
流程 (可選) | 團(tuán)隊(duì)遵循的流程(例如,順序、分層)。 |
詳細(xì)程度 (可選) | 執(zhí)行過程中日志記錄的詳細(xì)程度。 |
經(jīng)理 LLM (可選) | 分層流程中經(jīng)理代理使用的語(yǔ)言模型。在使用分層流程時(shí)必需。 |
功能調(diào)用 LLM (可選) | 如果傳遞,團(tuán)隊(duì)將使用此 LLM 為所有代理進(jìn)行工具的功能調(diào)用。每個(gè)代理可以擁有自己的 LLM,這將覆蓋團(tuán)隊(duì)的功能調(diào)用 LLM。 |
配置 (可選) | 團(tuán)隊(duì)的可選配置設(shè)置,以 Json 或 Dict[str, Any] 格式。 |
最大 RPM (可選) | 團(tuán)隊(duì)在執(zhí)行過程中遵循的每分鐘最大請(qǐng)求數(shù)。 |
語(yǔ)言 (可選) | 團(tuán)隊(duì)使用的語(yǔ)言,默認(rèn)為英語(yǔ)。 |
語(yǔ)言文件 (可選) | 用于團(tuán)隊(duì)的語(yǔ)言文件路徑。 |
內(nèi)存 (可選) | 用于存儲(chǔ)執(zhí)行記憶(短期、長(zhǎng)期、實(shí)體記憶)。 |
緩存 (可選) | 指定是否使用緩存來存儲(chǔ)工具執(zhí)行的結(jié)果。 |
嵌入器 (可選) | 用于團(tuán)隊(duì)使用的嵌入器配置。目前主要由內(nèi)存使用。 |
完整輸出 (可選) | 團(tuán)隊(duì)是否應(yīng)返回包含所有任務(wù)輸出的完整輸出,或僅返回最終輸出。 |
步驟回調(diào) (可選) | 在每個(gè)代理的每個(gè)步驟之后調(diào)用的函數(shù)??捎糜谟涗洿淼牟僮骰驁?zhí)行其他操作;不會(huì)覆蓋特定于代理的 step_callback 。 |
任務(wù)回調(diào) (可選) | 在每個(gè)任務(wù)完成后調(diào)用的函數(shù)。用于監(jiān)控或任務(wù)執(zhí)行后的其他操作。 |
共享團(tuán)隊(duì) (可選) | 是否要與 crewAI 團(tuán)隊(duì)共享完整的團(tuán)隊(duì)信息和執(zhí)行,以改進(jìn)庫(kù),并允許我們訓(xùn)練模型。 |
輸出日志文件 (可選) | 是否要有一個(gè)包含完整團(tuán)隊(duì)輸出和執(zhí)行的文件。您可以將其設(shè)置為 True,默認(rèn)為當(dāng)前文件夾,并將其命名為 logs.txt,或傳遞一個(gè)帶有完整路徑和文件名的字符串。 |
“團(tuán)隊(duì)最大 RPM”:max_rpm
屬性設(shè)置團(tuán)隊(duì)每分鐘可執(zhí)行的最大請(qǐng)求數(shù),以避免速率限制,并將覆蓋個(gè)別代理的 max_rpm
設(shè)置。
在組建團(tuán)隊(duì)時(shí),您將具有互補(bǔ)角色和工具的代理結(jié)合在一起,分配任務(wù),并選擇一個(gè)流程,該流程規(guī)定了它們的執(zhí)行順序和互動(dòng)。
示例:組建一個(gè)團(tuán)隊(duì)
from crewai import Crew, Agent, Task, Process
from langchain_community.tools import DuckDuckGoSearchRun
# 定義具有特定角色和工具的代理
researcher = Agent(
role='高級(jí)研究分析師',
goal='發(fā)現(xiàn)創(chuàng)新的人工智能技術(shù)',
tools=[DuckDuckGoSearchRun()]
)
writer = Agent(
role='內(nèi)容撰稿人',
goal='撰寫有關(guān)人工智能發(fā)現(xiàn)的引人入勝的文章',
verbose=True
)
# 為代理創(chuàng)建任務(wù)
research_task = Task(
description='識(shí)別突破性人工智能技術(shù)',
agent=researcher
)
write_article_task = Task(
description='撰寫關(guān)于最新人工智能技術(shù)的文章',
agent=writer
)
# 使用順序流程組裝團(tuán)隊(duì)
my_crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_article_task],
process=Process.sequential,
full_output=True,
verbose=True,
)
團(tuán)隊(duì)可以利用內(nèi)存(短期、長(zhǎng)期和實(shí)體內(nèi)存)來增強(qiáng)它們的執(zhí)行能力,并隨著時(shí)間的推移進(jìn)行學(xué)習(xí)。此功能允許團(tuán)隊(duì)存儲(chǔ)和回憶執(zhí)行記憶,有助于決策和任務(wù)執(zhí)行策略。
可以使用緩存來存儲(chǔ)工具執(zhí)行的結(jié)果,通過減少重新執(zhí)行相同任務(wù)的需求,使流程更加高效。
在團(tuán)隊(duì)執(zhí)行后,您可以訪問?usage_metrics
?屬性,查看團(tuán)隊(duì)執(zhí)行的所有任務(wù)的語(yǔ)言模型(LLM)使用指標(biāo)。這提供了關(guān)于運(yùn)營(yíng)效率和改進(jìn)領(lǐng)域的見解。
# 訪問團(tuán)隊(duì)的使用指標(biāo)
crew = Crew(agents=[agent1, agent2], tasks=[task1, task2])
crew.kickoff()
print(crew.usage_metrics)
manager_llm
,對(duì)于驗(yàn)證流程流程至關(guān)重要。啟動(dòng)團(tuán)隊(duì)
一旦您的團(tuán)隊(duì)組建完成,使用?kickoff()
?方法啟動(dòng)工作流程。這將根據(jù)定義的流程流程開始執(zhí)行過程。
# 啟動(dòng)團(tuán)隊(duì)的任務(wù)執(zhí)行
result = my_crew.kickoff()
print(result)
“增強(qiáng)代理智能”:crewAI框架引入了一個(gè)復(fù)雜的記憶系統(tǒng),旨在顯著增強(qiáng)AI代理的能力。該系統(tǒng)包括短期記憶、長(zhǎng)期記憶、實(shí)體記憶和新識(shí)別的上下文記憶,每種記憶都在幫助代理記住、推理和從過去的互動(dòng)中學(xué)習(xí)方面發(fā)揮著獨(dú)特作用。
組件 | 描述 |
---|---|
短期記憶 | 暫時(shí)存儲(chǔ)最近的互動(dòng)和結(jié)果,使代理能夠回憶和利用與當(dāng)前情境相關(guān)的信息。 |
長(zhǎng)期記憶 | 保留從過去執(zhí)行中獲得的寶貴見解和學(xué)習(xí),使代理能夠隨著時(shí)間建立和完善知識(shí)。 |
實(shí)體記憶 | 捕獲和組織在任務(wù)中遇到的實(shí)體(人、地點(diǎn)、概念)的信息,促進(jìn)對(duì)復(fù)雜信息的更深入理解和關(guān)系映射。 |
上下文記憶 | 保持互動(dòng)的上下文,有助于代理在一系列任務(wù)或?qū)υ捴械捻憫?yīng)連貫性和相關(guān)性。 |
在配置團(tuán)隊(duì)時(shí),您可以啟用和定制每個(gè)記憶組件,以適應(yīng)團(tuán)隊(duì)的目標(biāo)和將執(zhí)行的任務(wù)的性質(zhì)。 默認(rèn)情況下,記憶系統(tǒng)處于禁用狀態(tài),您可以通過在團(tuán)隊(duì)配置中設(shè)置?memory=True
?來確保其處于活動(dòng)狀態(tài)。 記憶將默認(rèn)使用OpenAI Embeddings,但您可以通過將?embedder
?設(shè)置為不同的模型來進(jìn)行更改。
示例:為團(tuán)隊(duì)配置記憶
from crewai import Crew, Agent, Task, Process
# 使用具有記憶功能的團(tuán)隊(duì)
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True
)
使用OpenAI嵌入(已默認(rèn))
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "openai",
"config":{
"model": 'text-embedding-3-small'
}
}
)
使用Google AI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "google",
"config":{
"model": 'models/embedding-001',
"task_type": "retrieval_document",
"title": "Embeddings for Embedchain"
}
}
)
使用Azure OpenAI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "azure_openai",
"config":{
"model": 'text-embedding-ada-002',
"deployment_name": "you_embedding_model_deployment_name"
}
}
)
使用GPT4ALL嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "gpt4all"
}
)
使用Vertex AI嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "vertexai",
"config":{
"model": 'textembedding-gecko'
}
}
)
使用Cohere嵌入
from crewai import Crew, Agent, Task, Process
my_crew = Crew(
agents=[...],
tasks=[...],
process=Process.sequential,
memory=True,
verbose=True,
embedder={
"provider": "cohere",
"config":{
"model": "embed-english-v3.0"
"vector_dimension": 1024
}
}
)
將crewAI的記憶系統(tǒng)集成到您的項(xiàng)目中非常簡(jiǎn)單。通過利用提供的記憶組件和配置,您可以快速賦予您的代理記憶、推理和從互動(dòng)中學(xué)習(xí)的能力,從而開啟新的智能和能力水平。
歡迎使用 crewAI!本指南將帶領(lǐng)您完成 crewAI 及其依賴項(xiàng)的安裝過程。crewAI 是一個(gè)靈活而強(qiáng)大的人工智能框架,可以幫助您高效地創(chuàng)建和管理 AI 代理、工具和任務(wù)。讓我們開始吧!
(1). 安裝
要安裝 crewAI,您需要在系統(tǒng)上安裝 Python 版本 >=3.10 且 <=3.13:
# 安裝主要的 crewAI 包
pip install crewai
# 安裝主要的 crewAI 包和工具包
# 包括一系列有用的工具,供您的代理使用
pip install 'crewai[tools]'
本指南詳細(xì)介紹了如何為 crewAI 框架創(chuàng)建自定義工具以及如何高效管理和利用這些工具,包括最新功能,如工具委派、錯(cuò)誤處理和動(dòng)態(tài)工具調(diào)用。它還強(qiáng)調(diào)了協(xié)作工具的重要性,使代理能夠執(zhí)行各種操作。
在創(chuàng)建自己的工具之前,請(qǐng)確保已安裝 crewAI 額外工具包:
pip install 'crewai[tools]'
BaseTool
要?jiǎng)?chuàng)建個(gè)性化工具,請(qǐng)繼承自?BaseTool
?并定義必要的屬性和?_run
?方法。
from crewai_tools import BaseTool
class MyCustomTool(BaseTool):
name: str = "我的工具名稱"
description: str = "這個(gè)工具的作用。對(duì)于有效利用至關(guān)重要。"
def _run(self, argument: str) -> str:
# 在這里編寫工具的邏輯
return "工具的結(jié)果"
tool
裝飾器或者,使用?tool
?裝飾器以直接方式創(chuàng)建工具。這需要在函數(shù)內(nèi)指定屬性和工具的邏輯。
from crewai_tools import tool
@tool("工具名稱")
def my_simple_tool(question: str) -> str:
"""用于澄清的工具描述。"""
# 在這里編寫工具的邏輯
return "工具輸出"
為了通過緩存優(yōu)化工具性能,可以使用?cache_function
?屬性定義自定義緩存策略。
@tool("帶緩存的工具")
def cached_tool(argument: str) -> str:
"""工具功能描述。"""
return "可緩存的結(jié)果"
def my_cache_strategy(arguments: dict, result: str) -> bool:
# 定義自定義緩存邏輯
return True if 某些條件 else False
cached_tool.cache_function = my_cache_strategy
通過遵循這些準(zhǔn)則,并將新功能和協(xié)作工具納入工具創(chuàng)建和管理流程中,您可以充分利用 crewAI 框架的全部功能,提升開發(fā)體驗(yàn)和 AI 代理的效率。
CrewAI 提供了一個(gè)靈活的框架,以結(jié)構(gòu)化方式執(zhí)行任務(wù),支持順序和分層流程。本指南概述了如何有效實(shí)施這些流程,以確保任務(wù)執(zhí)行高效并完成項(xiàng)目。順序流程確保任務(wù)按順序一個(gè)接一個(gè)地執(zhí)行,遵循線性進(jìn)展。這種方法非常適合需要按特定順序完成任務(wù)的項(xiàng)目。
召集你的團(tuán)隊(duì),并按照需要執(zhí)行的順序定義任務(wù)。
from crewai import Crew, Process, Agent, Task
# 定義你的代理人
researcher = Agent(
role='研究員',
goal='進(jìn)行基礎(chǔ)研究',
backstory='一位經(jīng)驗(yàn)豐富的研究員,熱衷于發(fā)現(xiàn)洞察'
)
analyst = Agent(
role='數(shù)據(jù)分析師',
goal='分析研究結(jié)果',
backstory='一位細(xì)致的分析師,擅長(zhǎng)發(fā)現(xiàn)模式'
)
writer = Agent(
role='作家',
goal='起草最終報(bào)告',
backstory='一位技藝高超的作家,擅長(zhǎng)撰寫引人入勝的敘事'
)
# 按順序定義任務(wù)
research_task = Task(description='收集相關(guān)數(shù)據(jù)...', agent=researcher)
analysis_task = Task(description='分析數(shù)據(jù)...', agent=analyst)
writing_task = Task(description='撰寫報(bào)告...', agent=writer)
# 以順序流程形式組建團(tuán)隊(duì)
report_crew = Crew(
agents=[researcher, analyst, writer],
tasks=[research_task, analysis_task, writing_task],
process=Process.sequential
)
CrewAI 中的順序和分層流程為任務(wù)執(zhí)行提供了清晰、適應(yīng)性強(qiáng)的路徑。它們非常適合需要邏輯進(jìn)展和動(dòng)態(tài)決策的項(xiàng)目,確保每一步都有效完成,從而促進(jìn)一個(gè)連貫的最終產(chǎn)品。
CrewAI 中的分層流程引入了一種結(jié)構(gòu)化的任務(wù)管理方法,模擬傳統(tǒng)組織層級(jí)結(jié)構(gòu),實(shí)現(xiàn)任務(wù)委派和執(zhí)行的高效性。這種系統(tǒng)化的工作流通過確保任務(wù)以最佳效率和準(zhǔn)確性處理,增強(qiáng)了項(xiàng)目結(jié)果。
“復(fù)雜性和效率”:分層流程旨在利用像 GPT-4 這樣的先進(jìn)模型,優(yōu)化令牌使用,同時(shí)處理復(fù)雜任務(wù),提高效率。
在 CrewAI 中,默認(rèn)情況下,任務(wù)通過順序流程管理。然而,采用分層方法可以實(shí)現(xiàn)任務(wù)管理中的清晰層次結(jié)構(gòu),其中一個(gè)“經(jīng)理”代理協(xié)調(diào)工作流程,委派任務(wù),并驗(yàn)證結(jié)果,以實(shí)現(xiàn)流暢和有效的執(zhí)行。這個(gè)經(jīng)理代理是由 CrewAI 自動(dòng)創(chuàng)建的,因此您無需擔(dān)心。
要利用分層流程,必須將流程屬性明確設(shè)置為 Process.hierarchical
,因?yàn)槟J(rèn)行為是 Process.sequential
。定義一個(gè)具有指定經(jīng)理的團(tuán)隊(duì),并建立清晰的指揮鏈。
“工具和代理分配”:在代理級(jí)別分配工具,以便由經(jīng)理指導(dǎo)下的指定代理執(zhí)行任務(wù)委派和執(zhí)行。還可以在任務(wù)級(jí)別指定工具,以精確控制任務(wù)執(zhí)行期間的工具可用性。
“經(jīng)理 LLM 要求”:配置?manager_llm
?參數(shù)對(duì)于分層流程至關(guān)重要。系統(tǒng)需要設(shè)置經(jīng)理 LLM 以確保適當(dāng)?shù)墓δ?,確保定制決策。
from langchain_openai import ChatOpenAI
from crewai import Crew, Process, Agent
# 代理定義了背景故事、緩存和詳細(xì)模式等屬性
researcher = Agent(
role='研究員',
goal='進(jìn)行深入分析',
backstory='經(jīng)驗(yàn)豐富的數(shù)據(jù)分析師,擅長(zhǎng)發(fā)現(xiàn)隱藏的趨勢(shì)。',
cache=True,
verbose=False,
# tools=[] # 可選指定;默認(rèn)為空列表
)
writer = Agent(
role='作家',
goal='創(chuàng)作引人入勝的內(nèi)容',
backstory='對(duì)技術(shù)領(lǐng)域中的敘事充滿激情的創(chuàng)意作家。',
cache=True,
verbose=False,
# tools=[] # 可選指定工具;默認(rèn)為空列表
)
# 使用分層流程和其他配置建立團(tuán)隊(duì)
project_crew = Crew(
tasks=[...], # 在經(jīng)理監(jiān)督下委派和執(zhí)行的任務(wù)
agents=[researcher, writer],
manager_llm=ChatOpenAI(temperature=0, model="gpt-4"), # 分層流程必需
process=Process.hierarchical, # 指定分層管理方法
memory=True, # 啟用內(nèi)存使用以增強(qiáng)任務(wù)執(zhí)行
)
在 CrewAI 中采用分層流程,正確配置并了解系統(tǒng)的能力,有助于實(shí)現(xiàn)項(xiàng)目管理的有序和高效方法。
“默認(rèn) LLM”:默認(rèn)情況下,CrewAI 使用 OpenAI 的 GPT-4 模型進(jìn)行語(yǔ)言處理。您可以配置您的代理以使用不同的模型或 API。本指南展示了如何通過環(huán)境變量和直接實(shí)例化將您的代理連接到各種 LLMs。
CrewAI 提供了連接到各種 LLMs 的靈活性,包括通過 Ollama 連接到本地模型以及與 Azure 等不同 API 集成。它與所有 LangChain LLM 組件兼容,為定制的 AI 解決方案提供了多樣化的集成。
Agent
類是在 CrewAI 中實(shí)現(xiàn) AI 解決方案的基石。以下是反映最新代碼庫(kù)更改的更新概述:
role
: 定義解決方案中代理的角色。goal
: 指定代理的目標(biāo)。backstory
: 為代理提供背景故事。llm
: 將運(yùn)行代理的語(yǔ)言模型。默認(rèn)情況下,它使用環(huán)境變量 “OPENAI_MODEL_NAME” 中定義的 GPT-4 模型。function_calling_llm
: 將處理此代理的工具調(diào)用的語(yǔ)言模型,覆蓋 crew function_calling_llm??蛇x。max_iter
: 代理執(zhí)行任務(wù)的最大迭代次數(shù),默認(rèn)為 15。memory
: 允許代理在執(zhí)行過程中保留信息。默認(rèn)為 False
。max_rpm
: 代理執(zhí)行應(yīng)遵守的每分鐘請(qǐng)求的最大數(shù)量??蛇x。verbose
: 啟用對(duì)代理執(zhí)行的詳細(xì)記錄。默認(rèn)為 False
。allow_delegation
: 允許代理將任務(wù)委托給其他代理。默認(rèn)為 True
。tools
: 指定代理用于任務(wù)執(zhí)行的工具??蛇x。step_callback
: 提供在每個(gè)步驟之后執(zhí)行的回調(diào)函數(shù)??蛇x。cache
: 確定代理是否應(yīng)使用緩存進(jìn)行工具使用。默認(rèn)為 True
。# 必需
os.environ["OPENAI_MODEL_NAME"]="gpt-4-0125-preview"
# 代理將自動(dòng)使用環(huán)境變量中定義的模型
example_agent = Agent(
role='本地專家',
goal='提供有關(guān)城市的見解',
backstory="一位知識(shí)淵博的當(dāng)?shù)叵驅(qū)А?,
verbose=True,
memory=True
)
Ollama 是首選的本地 LLM 集成方式,提供定制和隱私優(yōu)勢(shì)。要將 Ollama 與 CrewAI 集成,設(shè)置如下適當(dāng)?shù)沫h(huán)境變量。注意:詳細(xì)的 Ollama 設(shè)置超出了本文檔的范圍,但提供了一般指導(dǎo)。
設(shè)置 Ollama
OPENAI_API_BASE='http://localhost:11434/v1'
OPENAI_MODEL_NAME='openhermes' # 根據(jù)可用模型進(jìn)行調(diào)整
OPENAI_API_KEY=''
您可以使用 HuggingFace 托管您的 LLM 的幾種不同方式。
您自己的 HuggingFace 端點(diǎn)
from langchain_community.llms import HuggingFaceEndpoint
llm = HuggingFaceEndpoint(
endpoint_url="<YOUR_ENDPOINT_URL_HERE>",
huggingfacehub_api_token="<HF_TOKEN_HERE>",
task="text-generation",
max_new_tokens=512
)
agent = Agent(
role="HuggingFace 代理",
goal="使用 HuggingFace 生成文本",
backstory="GitHub 文檔的勤奮探索者。",
llm=llm
)
從 HuggingFaceHub 端點(diǎn)
from langchain_community.llms import HuggingFaceHub
llm = HuggingFaceHub(
repo_id="HuggingFaceH4/zephyr-7b-beta",
huggingfacehub_api_token="<HF_TOKEN_HERE>",
task="text-generation",
)
通過環(huán)境變量無縫切換 API 和模型,支持 FastChat、LM Studio 和 Mistral AI 等平臺(tái)。
配置示例
FastChat
OPENAI_API_BASE="http://localhost:8001/v1"
OPENAI_MODEL_NAME='oh-2.5m7b-q51'
OPENAI_API_KEY=NA
LM Studio
啟動(dòng) LM Studio 并轉(zhuǎn)到 Server 選項(xiàng)卡。然后從下拉菜單中選擇一個(gè)模型,等待加載。加載完成后,點(diǎn)擊綠色的 Start Server 按鈕,并使用顯示的 URL、端口和 API 密鑰(您可以修改它們)。以下是截至 LM Studio 0.2.19 的默認(rèn)設(shè)置示例:
OPENAI_API_BASE="http://localhost:1234/v1"
OPENAI_API_KEY="lm-studio"
Mistral API
OPENAI_API_KEY=your-mistral-api-key
OPENAI_API_BASE=https://api.mistral.ai/v1
OPENAI_MODEL_NAME="mistral-small"
Solar
from langchain_community.chat_models.solar import SolarChat
# 初始化語(yǔ)言模型
os.environ["SOLAR_API_KEY"] = "your-solar-api-key"
llm = SolarChat(max_tokens=1024)
免費(fèi)的開發(fā)者 API 密鑰在此處獲取:https://console.upstage.ai/services/solar
Langchain 示例:https://github.com/langchain-ai/langchain/pull/18556
text-gen-web-ui
OPENAI_API_BASE=http://localhost:5000/v1
OPENAI_MODEL_NAME=NA
OPENAI_API_KEY=NA
Cohere
from langchain_community.chat_models import ChatCohere
# 初始化語(yǔ)言模型
os.environ["COHERE_API_KEY"] = "your-cohere-api-key"
llm = ChatCohere()
免費(fèi)的開發(fā)者 API 密鑰在此處獲?。篽ttps://cohere.com/
Langchain 文檔:https://python.langchain.com/docs/integrations/chat/cohere
Azure Open AI 配置
要進(jìn)行 Azure OpenAI API 集成,請(qǐng)?jiān)O(shè)置以下環(huán)境變量:
AZURE_OPENAI_VERSION="2022-12-01"
AZURE_OPENAI_DEPLOYMENT=""
AZURE_OPENAI_ENDPOINT=""
AZURE_OPENAI_KEY=""
使用 Azure LLM 的示例代理
from dotenv import load_dotenv
from crewai import Agent
from langchain_openai import AzureChatOpenAI
load_dotenv()
azure_llm = AzureChatOpenAI(
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
api_key=os.environ.get("AZURE_OPENAI_KEY")
)
azure_agent = Agent(
role='示例代理',
goal='演示自定義 LLM 配置',
backstory='GitHub 文檔的勤奮探索者。',
llm=azure_llm
)
將 CrewAI 與不同的 LLMs 集成擴(kuò)展了框架的多樣性,允許在各種領(lǐng)域和平臺(tái)上定制高效的 AI 解決方案。
打造高效的 CrewAI 團(tuán)隊(duì)的關(guān)鍵在于能夠動(dòng)態(tài)地調(diào)整 AI 代理,以滿足任何項(xiàng)目的獨(dú)特需求。本節(jié)將介紹您可以定制的基礎(chǔ)屬性。
除了基本屬性外,CrewAI 還允許進(jìn)行更深入的定制,以顯著增強(qiáng)代理的行為和能力。
語(yǔ)言模型定制
代理可以使用特定的語(yǔ)言模型(llm
)和函數(shù)調(diào)用語(yǔ)言模型(function_calling_llm
)進(jìn)行定制,提供對(duì)其處理和決策能力的高級(jí)控制。值得注意的是,設(shè)置 function_calling_llm
允許覆蓋默認(rèn)的團(tuán)隊(duì)函數(shù)調(diào)用語(yǔ)言模型,提供更高程度的定制。
調(diào)整代理的性能并監(jiān)控其操作對(duì)于高效執(zhí)行任務(wù)至關(guān)重要。
冗長(zhǎng)模式和 RPM 限制
max_rpm
)。此屬性是可選的,可以設(shè)置為 None
以取消限制,如果需要的話,允許對(duì)外部服務(wù)進(jìn)行無限查詢。任務(wù)執(zhí)行的最大迭代次數(shù)
max_iter
屬性允許用戶定義代理為單個(gè)任務(wù)執(zhí)行的最大迭代次數(shù),防止無限循環(huán)或執(zhí)行時(shí)間過長(zhǎng)。默認(rèn)值設(shè)置為 15,在徹底性和效率之間提供平衡。一旦代理接近這個(gè)數(shù)字,它將盡力給出一個(gè)好答案。
通過在初始化期間定義其屬性和工具來定制代理。工具對(duì)代理的功能至關(guān)重要,使其能夠執(zhí)行專業(yè)任務(wù)。tools
?屬性應(yīng)該是代理可以利用的工具數(shù)組,默認(rèn)情況下初始化為空列表??梢栽诖沓跏蓟筇砑踊蛐薷墓ぞ?,以適應(yīng)新的需求。
pip install 'crewai[tools]'
示例:為代理分配工具
import os
from crewai import Agent
from crewai_tools import SerperDevTool
# 為工具初始化設(shè)置 API 密鑰
os.environ["OPENAI_API_KEY"] = "Your Key"
os.environ["SERPER_API_KEY"] = "Your Key"
# 初始化一個(gè)搜索工具
search_tool = SerperDevTool()
# 使用高級(jí)選項(xiàng)初始化代理
agent = Agent(
role='研究分析師',
goal='提供最新的市場(chǎng)分析',
backstory='一位對(duì)市場(chǎng)趨勢(shì)敏銳的專業(yè)分析師。',
tools=[search_tool],
memory=True, # 啟用記憶功能
verbose=True,
max_rpm=None, # 每分鐘請(qǐng)求無限制
max_iter=15, # 最大迭代次數(shù)的默認(rèn)值
allow_delegation=False
)
控制代理委托任務(wù)或提問的能力對(duì)于定制其自主權(quán)和在 CrewAI 框架內(nèi)的協(xié)作動(dòng)態(tài)至關(guān)重要。默認(rèn)情況下,allow_delegation
屬性設(shè)置為 True
,允許代理根據(jù)需要尋求幫助或委托任務(wù)。這種默認(rèn)行為促進(jìn)了 CrewAI 生態(tài)系統(tǒng)內(nèi)的協(xié)作解決問題和效率。如果需要,可以禁用委托以適應(yīng)特定的操作需求。
示例:禁用代理的委托
agent = Agent(
role='內(nèi)容撰稿人',
goal='撰寫有關(guān)市場(chǎng)趨勢(shì)的引人入勝內(nèi)容',
backstory='一位在市場(chǎng)分析方面擁有專業(yè)知識(shí)的資深撰稿人。',
allow_delegation=False # 禁用委托
)
通過設(shè)置代理的角色、目標(biāo)、背景故事和工具,以及高級(jí)選項(xiàng)如語(yǔ)言模型定制、記憶、性能設(shè)置和委托偏好,定制 CrewAI 中的代理,為復(fù)雜挑戰(zhàn)做好準(zhǔn)備,使其成為一個(gè)細(xì)致而有能力的 AI 團(tuán)隊(duì)。
在幾種代理執(zhí)行場(chǎng)景中,人類輸入至關(guān)重要,允許代理在必要時(shí)請(qǐng)求額外信息或澄清。這一功能在復(fù)雜決策過程中特別有用,或者當(dāng)代理需要更多細(xì)節(jié)以有效完成任務(wù)時(shí)。
要將人類輸入整合到代理執(zhí)行中,在任務(wù)定義中設(shè)置 human_input
標(biāo)志。啟用后,代理會(huì)在提供最終答案之前提示用戶輸入。這種輸入可以提供額外的上下文,澄清模糊之處,或驗(yàn)證代理的輸出。
pip install crewai
import os
from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool
os.environ["SERPER_API_KEY"] = "Your Key" # serper.dev API key
os.environ["OPENAI_API_KEY"] = "Your Key"
# 加載工具
search_tool = SerperDevTool()
# 使用角色、目標(biāo)、工具和其他屬性定義您的代理
researcher = Agent(
role='高級(jí)研究分析師',
goal='發(fā)現(xiàn)人工智能和數(shù)據(jù)科學(xué)領(lǐng)域的前沿發(fā)展',
backstory=(
"您是一家領(lǐng)先科技智庫(kù)的高級(jí)研究分析師。"
"您擅長(zhǎng)識(shí)別人工智能和數(shù)據(jù)科學(xué)領(lǐng)域的新興趨勢(shì)和技術(shù)。"
"您善于剖析復(fù)雜數(shù)據(jù)并提供可操作的見解。"
),
verbose=True,
allow_delegation=False,
tools=[search_tool],
max_rpm=100
)
writer = Agent(
role='科技內(nèi)容策略師',
goal='撰寫關(guān)于科技進(jìn)步的引人入勝內(nèi)容',
backstory=(
"您是一位著名的科技內(nèi)容策略師,以撰寫富有洞察力和引人入勝的科技和創(chuàng)新文章而聞名。"
"憑借對(duì)科技行業(yè)的深刻理解,您將復(fù)雜概念轉(zhuǎn)化為引人入勝的敘事。"
),
verbose=True,
allow_delegation=True,
tools=[search_tool],
cache=False, # 為該代理禁用緩存
)
# 為您的代理創(chuàng)建任務(wù)
task1 = Task(
description=(
"對(duì)2024年人工智能領(lǐng)域的最新進(jìn)展進(jìn)行全面分析。"
"識(shí)別關(guān)鍵趨勢(shì)、突破性技術(shù)和潛在的行業(yè)影響。"
"將您的研究結(jié)果編制成詳細(xì)報(bào)告。"
"在最終確定答案之前,請(qǐng)確保與人類核對(duì)草稿是否合適。"
),
expected_output='一份關(guān)于2024年最新人工智能進(jìn)展的全面報(bào)告,不遺漏任何細(xì)節(jié)',
agent=researcher,
human_input=True,
)
task2 = Task(
description=(
"利用研究員報(bào)告中的見解,撰寫一篇引人入勝的博客文章,重點(diǎn)介紹最重要的人工智能進(jìn)展。"
"您的文章應(yīng)既具信息性又易于理解,迎合科技愛好者的觀眾。"
"力求以敘述方式捕捉這些突破性進(jìn)展的本質(zhì)及其對(duì)未來的影響。"
),
expected_output='一篇引人入勝的、格式為 markdown 的三段博客文章,介紹2024年最新人工智能進(jìn)展',
agent=writer
)
# 使用順序流程實(shí)例化您的團(tuán)隊(duì)
crew = Crew(
agents=[researcher, writer],
tasks=[task1, task2],
verbose=2
)
# 讓您的團(tuán)隊(duì)開始工作!
result = crew.kickoff()
print("######################")
print(result)
可觀察性是開發(fā)和部署會(huì)話式人工智能智能體的關(guān)鍵方面。它使開發(fā)人員能夠了解他們的智能體的性能如何,他們的智能體如何與用戶交互,以及他們的智能體如何使用外部工具和API。AgentOps是一個(gè)與CrewAI無關(guān)的產(chǎn)品,為智能體提供了全面的可觀察性解決方案。
AgentOps 提供了智能體的會(huì)話重放、指標(biāo)和監(jiān)控。
在高層次上,AgentOps使您能夠監(jiān)控成本、令牌使用情況、延遲、智能體故障、會(huì)話范圍統(tǒng)計(jì)數(shù)據(jù)等。欲了解更多信息,請(qǐng)查看AgentOps Repo。
AgentOps為開發(fā)和生產(chǎn)中的智能體提供監(jiān)控。它提供了用于跟蹤智能體性能、會(huì)話重放和自定義報(bào)告的儀表板。
此外,AgentOps提供了會(huì)話詳細(xì)信息,可實(shí)時(shí)查看Crew智能體交互、LLM調(diào)用以及工具使用情況。此功能對(duì)于調(diào)試和了解智能體如何與用戶以及其他智能體交互非常有用。
AGENTOPS_API_KEY=<YOUR_AGENTOPS_API_KEY>
安裝AgentOps:使用以下命令安裝AgentOps:
pip install crewai[agentops]
或
pip install agentops
在腳本中使用Crew
之前,包含以下行:
import agentops
agentops.init()
這將啟動(dòng)一個(gè)AgentOps會(huì)話,并自動(dòng)跟蹤C(jī)rew智能體。欲了解更多關(guān)于如何為更復(fù)雜的智能系統(tǒng)配備裝備的信息,請(qǐng)查看AgentOps文檔或加入Discord。
要開始使用,請(qǐng)創(chuàng)建一個(gè)AgentOps賬戶。
如有功能請(qǐng)求或錯(cuò)誤報(bào)告,請(qǐng)聯(lián)系A(chǔ)gentOps團(tuán)隊(duì),訪問AgentOps Repo。
要使用文本搜索工具,您首先需要安裝 crewai_tools 軟件包。這可以通過 pip(Python 的軟件包管理器)來完成。打開您的終端或命令提示符,輸入以下命令:
pip install 'crewai[tools]'
這個(gè)命令將下載并安裝文本搜索工具以及任何必要的依賴項(xiàng)。
該工具用于在文本文件的內(nèi)容中執(zhí)行 RAG(檢索增強(qiáng)生成)搜索。它允許在指定文本文件的內(nèi)容中進(jìn)行語(yǔ)義搜索,根據(jù)提供的查詢快速提取信息或查找特定文本部分,是一個(gè)非常有價(jià)值的資源。
以下示例演示了如何使用文本搜索工具在文本文件中進(jìn)行搜索。該示例展示了如何初始化工具并在文件內(nèi)容中進(jìn)行搜索。
from crewai_tools import TXTSearchTool
# 初始化工具以在執(zhí)行期間學(xué)習(xí)到的任何文本文件內(nèi)容中進(jìn)行搜索
tool = TXTSearchTool()
# 或者
# 使用特定文本文件初始化工具,以便代理程序可以在給定文本文件的內(nèi)容中進(jìn)行搜索
tool = TXTSearchTool(txt='path/to/text/file.txt')
txt
(str): 可選。要搜索的文本文件的路徑。只有在工具未使用特定文本文件進(jìn)行初始化時(shí)才需要此參數(shù);否則,搜索將在最初提供的文本文件中進(jìn)行。默認(rèn)情況下,該工具使用 OpenAI 進(jìn)行嵌入和摘要生成。要自定義模型,您可以使用以下配置字典:
tool = TXTSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
PDFSearchTool 是一款專為在 PDF 內(nèi)容中進(jìn)行語(yǔ)義搜索而設(shè)計(jì)的 RAG 工具。它允許輸入搜索查詢和 PDF 文檔,利用先進(jìn)的搜索技術(shù)高效地找到相關(guān)內(nèi)容。這種能力使其特別適用于快速?gòu)拇笮?PDF 文件中提取特定信息。
以下是如何使用 PDFSearchTool 在 PDF 文檔中進(jìn)行搜索:
from crewai_tools import PDFSearchTool
# 初始化工具,允許在執(zhí)行期間提供路徑時(shí)進(jìn)行任何 PDF 內(nèi)容搜索
tool = PDFSearchTool()
# 或者
# 使用特定的 PDF 路徑初始化工具,以在該文檔中進(jìn)行獨(dú)占搜索
tool = PDFSearchTool(pdf='path/to/your/document.pdf')
pdf
: 可選 用于搜索的 PDF 路徑??梢栽诔跏蓟瘯r(shí)提供,也可以在 run
方法的參數(shù)中提供。如果在初始化時(shí)提供,工具將限制其搜索范圍為指定文檔。默認(rèn)情況下,該工具同時(shí)使用 OpenAI 進(jìn)行嵌入和摘要生成。要自定義模型,可以使用以下配置字典:
tool = PDFSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
DOCXSearchTool 是一款專為在 DOCX 文檔中進(jìn)行語(yǔ)義搜索而設(shè)計(jì)的 RAG 工具。它使用戶能夠通過基于查詢的搜索有效地搜索和提取 DOCX 文件中的相關(guān)信息。該工具對(duì)于數(shù)據(jù)分析、信息管理和研究任務(wù)至關(guān)重要,簡(jiǎn)化了在大型文檔集合中查找特定信息的過程。
以下示例演示了如何初始化 DOCXSearchTool 來搜索任何 DOCX 文件的內(nèi)容或特定 DOCX 文件路徑中的內(nèi)容。
from crewai_tools import DOCXSearchTool
# 初始化工具以搜索任何 DOCX 文件的內(nèi)容
tool = DOCXSearchTool()
# 或者
# 使用特定的 DOCX 文件初始化工具,這樣代理就只能搜索指定 DOCX 文件的內(nèi)容
tool = DOCXSearchTool(docx='path/to/your/document.docx')
docx
: 要搜索的特定 DOCX 文檔的可選文件路徑。如果在初始化期間未提供,該工具允許稍后指定任何 DOCX 文件的內(nèi)容路徑進(jìn)行搜索。默認(rèn)情況下,該工具在嵌入和摘要方面使用 OpenAI。要自定義模型,可以使用以下配置字典:
tool = DOCXSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
DirectoryReadTool 是一個(gè)強(qiáng)大的實(shí)用工具,旨在提供目錄內(nèi)容的全面列表。它可以遞歸地瀏覽指定目錄,為用戶提供所有文件的詳細(xì)枚舉,包括子目錄中的文件。這個(gè)工具對(duì)需要對(duì)目錄結(jié)構(gòu)進(jìn)行徹底清點(diǎn)的任務(wù)或驗(yàn)證目錄中文件組織的任務(wù)至關(guān)重要。
使用 DirectoryReadTool 很簡(jiǎn)單。以下代碼片段演示了如何設(shè)置并使用該工具來列出指定目錄的內(nèi)容:
from crewai_tools import DirectoryReadTool
# 初始化工具,以便代理程序在執(zhí)行過程中了解任何目錄的內(nèi)容
tool = DirectoryReadTool()
# 或者
# 使用特定目錄初始化工具,以便代理程序僅能讀取指定目錄的內(nèi)容
tool = DirectoryReadTool(directory='/path/to/your/directory')
DirectoryReadTool 需要進(jìn)行最少配置以供使用。該工具的基本參數(shù)如下:
directory
:可選。指定要列出其內(nèi)容的目錄路徑的參數(shù)。它接受絕對(duì)路徑和相對(duì)路徑,指導(dǎo)工具到達(dá)所需目錄以進(jìn)行內(nèi)容列表。`目錄搜索工具可以在指定目錄的內(nèi)容中進(jìn)行語(yǔ)義搜索,利用檢索增強(qiáng)生成(RAG)方法來實(shí)現(xiàn)對(duì)文件的高效導(dǎo)航。設(shè)計(jì)靈活,允許用戶在運(yùn)行時(shí)動(dòng)態(tài)指定搜索目錄,或在初始設(shè)置期間設(shè)置固定目錄。
從?crewai_tools
?包中導(dǎo)入 DirectorySearchTool 來開始。您可以在不指定目錄的情況下初始化工具,從而可以在運(yùn)行時(shí)設(shè)置搜索目錄。另外,也可以使用預(yù)定義目錄初始化工具。
from crewai_tools import DirectorySearchTool
# 對(duì)于在運(yùn)行時(shí)動(dòng)態(tài)指定目錄
tool = DirectorySearchTool()
# 對(duì)于固定目錄搜索
tool = DirectorySearchTool(directory='/path/to/directory')
directory
: 一個(gè)字符串參數(shù),用于指定搜索目錄。在初始化時(shí)是可選的,但如果最初未設(shè)置,則在搜索時(shí)是必需的。目錄搜索工具默認(rèn)使用 OpenAI 進(jìn)行嵌入和摘要生成。這些設(shè)置的自定義選項(xiàng)包括更改模型提供商和配置,為高級(jí)用戶增強(qiáng)了靈活性。
tool = DirectorySearchTool(
config=dict(
llm=dict(
provider="ollama", # 選項(xiàng)包括 ollama、google、anthropic、llama2 等
config=dict(
model="llama2",
# 這里添加額外的配置
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
該工具用于在 CSV 文件內(nèi)容中執(zhí)行 RAG(檢索增強(qiáng)生成)搜索。它允許用戶在指定 CSV 文件的內(nèi)容中語(yǔ)義搜索查詢。這個(gè)功能特別適用于從大型 CSV 數(shù)據(jù)集中提取信息,傳統(tǒng)搜索方法可能效率低下的情況。所有名稱中帶有“Search”的工具,包括 CSVSearchTool,在設(shè)計(jì)上都是用于搜索不同數(shù)據(jù)源的 RAG 工具。
from crewai_tools import CSVSearchTool
# 使用特定的 CSV 文件初始化工具。這樣設(shè)置允許代理只搜索給定的 CSV 文件。
tool = CSVSearchTool(csv='path/to/your/csvfile.csv')
# 或者
# 在沒有特定 CSV 文件的情況下初始化工具。代理將需要在運(yùn)行時(shí)提供 CSV 路徑。
tool = CSVSearchTool()
csv
:要搜索的 CSV 文件的路徑。如果工具在沒有特定 CSV 文件的情況下初始化,則這是一個(gè)必需的參數(shù);否則,它是可選的。默認(rèn)情況下,該工具同時(shí)使用 OpenAI 進(jìn)行嵌入和摘要。要自定義模型,可以使用以下配置字典:
tool = CSVSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
文件讀取工具在 crewai_tools 軟件包中概念上代表了一套旨在促進(jìn)文件讀取和內(nèi)容檢索的功能。該套件包括用于處理批量文本文件、讀取運(yùn)行時(shí)配置文件以及導(dǎo)入分析數(shù)據(jù)的工具。它支持多種基于文本的文件格式,如 .txt
、.csv
、.json
等。根據(jù)文件類型,該套件提供了專門的功能,例如將 JSON 內(nèi)容轉(zhuǎn)換為 Python 字典以便于使用。
要開始使用文件讀取工具:
from crewai_tools import FileReadTool
# 初始化工具以讀取代理已知的任何文件或?qū)W習(xí)指定文件的路徑
file_read_tool = FileReadTool()
# 或者
# 使用特定文件路徑初始化工具,這樣代理只能讀取指定文件的內(nèi)容
file_read_tool = FileReadTool(file_path='path/to/your/file.txt')
file_path
: 您要讀取的文件路徑。它接受絕對(duì)路徑和相對(duì)路徑。確保文件存在并且您具有訪問權(quán)限。MDXSearchTool 是 crewai_tools
軟件包的一個(gè)組件,旨在促進(jìn)高級(jí)市場(chǎng)數(shù)據(jù)提取。對(duì)于尋求快速獲取市場(chǎng)見解的研究人員和分析師來說,這個(gè)工具非常寶貴,尤其是在人工智能領(lǐng)域。它通過與各種數(shù)據(jù)源進(jìn)行接口,簡(jiǎn)化了獲取、解釋和組織市場(chǎng)數(shù)據(jù)的任務(wù)。
要使用 MDXSearchTool,您必須首先設(shè)置必要的環(huán)境變量。然后,將該工具集成到您的 crewAI 項(xiàng)目中,開始您的市場(chǎng)研究。以下是如何執(zhí)行此操作的基本示例:
from crewai_tools import MDXSearchTool
# 初始化工具以搜索執(zhí)行過程中了解到的任何 MDX 內(nèi)容
tool = MDXSearchTool()
# 或者
# 使用特定的 MDX 文件路徑初始化工具,以在該文檔中進(jìn)行獨(dú)占搜索
tool = MDXSearchTool(mdx='path/to/your/document.mdx')
該工具默認(rèn)使用 OpenAI 進(jìn)行嵌入和摘要生成。要進(jìn)行定制化,可以使用如下所示的配置字典:
tool = MDXSearchTool(
config=dict(
llm=dict(
provider="ollama", # 選項(xiàng)包括 google, openai, anthropic, llama2 等。
config=dict(
model="llama2",
# 可在此處包括可選參數(shù)。
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# 可在此處添加嵌入的可選標(biāo)題。
# title="Embeddings",
),
),
)
)
這是一個(gè)旨在提取和閱讀指定網(wǎng)站內(nèi)容的工具。它能夠通過發(fā)出 HTTP 請(qǐng)求并解析接收到的 HTML 內(nèi)容來處理各種類型的網(wǎng)頁(yè)。該工具特別適用于網(wǎng)絡(luò)抓取任務(wù)、數(shù)據(jù)收集或從網(wǎng)站中提取特定信息。
from crewai_tools import ScrapeWebsiteTool
# 若要在執(zhí)行期間啟用對(duì)任何找到的網(wǎng)站進(jìn)行抓取
tool = ScrapeWebsiteTool()
# 使用網(wǎng)站 URL 初始化工具,以便代理只能抓取指定網(wǎng)站的內(nèi)容
tool = ScrapeWebsiteTool(website_url='https://www.example.com')
# 從網(wǎng)站提取文本
text = tool.run()
print(text)
website_url
:必填的網(wǎng)站 URL 以讀取文件。這是工具的主要輸入,指定應(yīng)抓取和閱讀哪個(gè)網(wǎng)站的內(nèi)容。網(wǎng)站搜索工具旨在作為在網(wǎng)站內(nèi)容中進(jìn)行語(yǔ)義搜索的概念設(shè)計(jì)。它旨在利用像檢索增強(qiáng)生成(RAG)這樣的先進(jìn)機(jī)器學(xué)習(xí)模型,以高效地瀏覽和提取指定 URL 中的信息。該工具旨在提供靈活性,允許用戶在任何網(wǎng)站上執(zhí)行搜索或?qū)W⒂诟信d趣的特定網(wǎng)站。請(qǐng)注意,網(wǎng)站搜索工具的當(dāng)前實(shí)現(xiàn)細(xì)節(jié)正在開發(fā)中,所述功能可能尚不可訪問。
以下是網(wǎng)站搜索工具在不同場(chǎng)景下的使用示例。請(qǐng)注意,這些示例是說明性的,代表了計(jì)劃功能:
from crewai_tools import WebsiteSearchTool
# 初始化工具,代理可以使用它在任何發(fā)現(xiàn)的網(wǎng)站上進(jìn)行搜索
tool = WebsiteSearchTool()
# 限制搜索范圍為特定網(wǎng)站的內(nèi)容,現(xiàn)在代理只能在該網(wǎng)站內(nèi)進(jìn)行搜索
tool = WebsiteSearchTool(website='https://example.com')
website
:一個(gè)可選參數(shù),用于指定用于重點(diǎn)搜索的網(wǎng)站 URL。此參數(shù)旨在通過在必要時(shí)允許定向搜索來增強(qiáng)工具的靈活性。默認(rèn)情況下,該工具在嵌入和摘要生成方面使用 OpenAI。要自定義模型,您可以使用以下配置字典:
tool = WebsiteSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
SeleniumScrapingTool 專為高效的網(wǎng)絡(luò)抓取任務(wù)而設(shè)計(jì)。它通過使用 CSS 選擇器來精確提取網(wǎng)頁(yè)內(nèi)容,滿足各種抓取需求,靈活處理任何提供的網(wǎng)站 URL。
以下是 SeleniumScrapingTool 可以使用的一些場(chǎng)景:
from crewai_tools import SeleniumScrapingTool
# 示例 1:初始化工具,無需任何參數(shù)即可抓取當(dāng)前導(dǎo)航到的頁(yè)面
tool = SeleniumScrapingTool()
# 示例 2:抓取給定 URL 的整個(gè)網(wǎng)頁(yè)
tool = SeleniumScrapingTool(website_url='https://example.com')
# 示例 3:從網(wǎng)頁(yè)中定位并抓取特定的 CSS 元素
tool = SeleniumScrapingTool(website_url='https://example.com', css_element='.main-content')
# 示例 4:使用附加參數(shù)執(zhí)行抓取,獲得定制化體驗(yàn)
tool = SeleniumScrapingTool(website_url='https://example.com', css_element='.main-content', cookie={'name': 'user', 'value': 'John Doe'}, wait_time=10)
以下參數(shù)可用于自定義 SeleniumScrapingTool 的抓取過程:
website_url
:必填。指定要從中抓取內(nèi)容的網(wǎng)站 URL。css_element
:必填。要在網(wǎng)站上定位的特定元素的 CSS 選擇器。這使得可以集中抓取網(wǎng)頁(yè)的特定部分。cookie
:可選。包含 cookie 信息的字典。用于模擬已登錄會(huì)話,從而提供對(duì)可能僅限于未登錄用戶的內(nèi)容的訪問。wait_time
:可選。指定在抓取內(nèi)容之前的延遲時(shí)間(以秒為單位)。此延遲確保網(wǎng)站和任何動(dòng)態(tài)內(nèi)容完全加載,以確保成功抓取。PGSearchTool 被設(shè)想為一個(gè)強(qiáng)大的工具,用于在 PostgreSQL 數(shù)據(jù)庫(kù)表中進(jìn)行語(yǔ)義搜索。通過利用先進(jìn)的檢索和生成(RAG)技術(shù),它旨在提供一種有效的方式來查詢數(shù)據(jù)庫(kù)表內(nèi)容,專門為 PostgreSQL 數(shù)據(jù)庫(kù)定制。該工具的目標(biāo)是通過語(yǔ)義搜索查詢簡(jiǎn)化查找相關(guān)數(shù)據(jù)的過程,為需要在 PostgreSQL 環(huán)境中對(duì)大型數(shù)據(jù)集進(jìn)行高級(jí)查詢的用戶提供寶貴資源。
以下是一個(gè)示例,展示如何使用 PGSearchTool 在 PostgreSQL 數(shù)據(jù)庫(kù)中的表上進(jìn)行語(yǔ)義搜索:
from crewai_tools import PGSearchTool
# 使用數(shù)據(jù)庫(kù) URI 和目標(biāo)表名初始化工具
tool = PGSearchTool(db_uri='postgresql://user:password@localhost:5432/mydatabase', table_name='employees')
PGSearchTool 設(shè)計(jì)為需要以下參數(shù)才能運(yùn)行:
db_uri
:表示要查詢的 PostgreSQL 數(shù)據(jù)庫(kù)的 URI 的字符串。此參數(shù)將是必需的,必須包括必要的身份驗(yàn)證詳細(xì)信息和數(shù)據(jù)庫(kù)的位置。table_name
:指定將在其中執(zhí)行語(yǔ)義搜索的數(shù)據(jù)庫(kù)中表的名稱的字符串。此參數(shù)也將是必需的。該工具打算默認(rèn)使用 OpenAI 進(jìn)行嵌入和摘要。用戶將可以使用以下配置字典自定義模型:
tool = PGSearchTool(
config=dict(
llm=dict(
provider="ollama", # 或 google, openai, anthropic, llama2, ...
config=dict(
model="llama2",
# temperature=0.5,
# top_p=1,
# stream=true,
),
),
embedder=dict(
provider="google",
config=dict(
model="models/embedding-001",
task_type="retrieval_document",
# title="Embeddings",
),
),
)
)
本文章轉(zhuǎn)載微信公眾號(hào)@數(shù)智筆記
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)