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