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 # 可選
)

(3). 結(jié)論

代理是 CrewAI 框架的構(gòu)建模塊。通過了解如何定義和與代理交互,您可以創(chuàng)建利用協(xié)作智能力的復(fù)雜人工智能系統(tǒng)。

2. Task-任務(wù)概述

在 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ì)合作和效率。

(1). 任務(wù)屬性

屬性描述
描述任務(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ù)很有用。

(2). 創(chuàng)建任務(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ù)角色、可用性等決定。

(3). 將工具與任務(wù)集成

利用 crewAI Toolkit 和 LangChain Tools 中的工具,增強(qiáng)任務(wù)性能和代理交互。

(4). 使用工具創(chuà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í)行。

(5). 參考其他任務(wù)

在 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]
)

#...

(6). 異步執(zhí)行

您可以定義任務(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ù)的輸出完成
)

#...

(7). 回調(diào)機(jī)制

在任務(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
)

#...

(8). 訪問特定任務(wù)輸出

一組 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}
""")

(9). 工具覆蓋機(jī)制

在任務(wù)中指定工具允許動(dòng)態(tài)調(diào)整代理能力,突出了 CrewAI 的靈活性。

(10). 錯(cuò)誤處理和驗(yàn)證機(jī)制

在創(chuàng)建和執(zhí)行任務(wù)時(shí),存在某些驗(yàn)證機(jī)制,以確保任務(wù)屬性的健壯性和可靠性。這些驗(yàn)證包括但不限于:

這些驗(yàn)證有助于在 crewAI 框架內(nèi)維護(hù)任務(wù)執(zhí)行的一致性和可靠性。

(11). 結(jié)論

任務(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í)行。

3. Tool-什么是工具?

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ì)合作的一切。

(1). 工具的關(guān)鍵特征

(2). 使用 crewAI 工具

要通過 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()

(3). 可用的 crewAI 工具

以下是可用工具及其描述的列表:

工具描述
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ù)提取。

(4). 創(chuàng)建自己的工具

“自定義工具創(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é)果"

自定義緩存機(jī)制

“緩存”

工具可以選擇實(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,
)
#...

(5). 使用 LangChain 工具

“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]
)

# 代碼的其余部分 ...

(6). 結(jié)論

工具在擴(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)化您的代理的性能和能力。

4. Process-理解流程

在 CrewAI 中,流程通過協(xié)調(diào)代理執(zhí)行任務(wù),類似于人類團(tuán)隊(duì)中的項(xiàng)目管理。這些流程確保任務(wù)被有效地分配和執(zhí)行,與預(yù)定義的策略保持一致。

(1). 流程實(shí)現(xiàn)

(2). 流程在團(tuán)隊(duì)合作中的作用

流程使個(gè)體代理能夠作為一個(gè)有凝聚力的整體運(yùn)作,簡(jiǎn)化他們的努力,以高效和協(xié)調(diào)的方式實(shí)現(xiàn)共同目標(biāo)。

(3). 將流程分配給船員

要將流程分配給船員,在創(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。

(4). 順序流程

該方法模擬動(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ù)上下文使用的輸出。

(5). 分級(jí)流程

模擬公司的等級(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ù)完成情況。

(6). 流程類:詳細(xì)概述

Process 類被實(shí)現(xiàn)為一個(gè)枚舉 (Enum),確保類型安全并將流程值限制為定義的類型(sequential、hierarchical)。共識(shí)流程計(jì)劃在未來加入,強(qiáng)調(diào)我們對(duì)持續(xù)發(fā)展和創(chuàng)新的承諾。

(7). 附加任務(wù)特性

(8). 結(jié)論

在 CrewAI 中通過流程實(shí)現(xiàn)的結(jié)構(gòu)化協(xié)作對(duì)于促進(jìn)代理之間的系統(tǒng)化團(tuán)隊(duì)合作至關(guān)重要。本文檔已更新以反映最新功能、增強(qiáng)功能以及計(jì)劃整合共識(shí)流程,確保用戶可以訪問最新和全面的信息。

5. Crews-什么是團(tuán)隊(duì)?

在 crewAI 中,團(tuán)隊(duì)代表著一群代理共同合作以完成一組任務(wù)。每個(gè)團(tuán)隊(duì)定義了任務(wù)執(zhí)行策略、代理協(xié)作以及整體工作流程。

(1). 團(tuán)隊(duì)屬性

屬性描述
任務(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è)置。

(2). 創(chuàng)建團(tuán)隊(duì)

在組建團(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,
)

(3). 內(nèi)存利用

團(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í)行策略。

(4). 緩存利用

可以使用緩存來存儲(chǔ)工具執(zhí)行的結(jié)果,通過減少重新執(zhí)行相同任務(wù)的需求,使流程更加高效。

(5). 團(tuán)隊(duì)使用指標(biāo)

在團(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)

(6). 團(tuán)隊(duì)執(zhí)行流程

啟動(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)

6. Memory-記憶系統(tǒng)簡(jiǎn)介

“增強(qiáng)代理智能”:crewAI框架引入了一個(gè)復(fù)雜的記憶系統(tǒng),旨在顯著增強(qiáng)AI代理的能力。該系統(tǒng)包括短期記憶、長(zhǎng)期記憶、實(shí)體記憶和新識(shí)別的上下文記憶,每種記憶都在幫助代理記住、推理和從過去的互動(dòng)中學(xué)習(xí)方面發(fā)揮著獨(dú)特作用。

(1). 記憶系統(tǒng)組成部分

組件描述
短期記憶暫時(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)性。

(2). 記憶系統(tǒng)如何賦能代理

  1. 上下文意識(shí): 借助短期記憶和上下文記憶,代理能夠在對(duì)話或任務(wù)序列中保持上下文,從而產(chǎn)生更連貫和相關(guān)的回應(yīng)。
  2. 經(jīng)驗(yàn)積累: 長(zhǎng)期記憶使代理能夠積累經(jīng)驗(yàn),從過去的行動(dòng)中學(xué)習(xí),以改進(jìn)未來的決策和問題解決能力。
  3. 實(shí)體理解: 通過保持實(shí)體記憶,代理可以識(shí)別和記住關(guān)鍵實(shí)體,增強(qiáng)其處理和交互復(fù)雜信息的能力。

(3). 在你的團(tuán)隊(duì)中實(shí)施記憶

在配置團(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
)

(4). 其他嵌入提供商

使用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
}
}
)

(5). 使用crewAI記憶系統(tǒng)的好處

將crewAI的記憶系統(tǒng)集成到您的項(xiàng)目中非常簡(jiǎn)單。通過利用提供的記憶組件和配置,您可以快速賦予您的代理記憶、推理和從互動(dòng)中學(xué)習(xí)的能力,從而開啟新的智能和能力水平。

二、CrewAI如何做How-To

1. 安裝 crewAI

歡迎使用 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]'

2. 在 crewAI 中創(chuàng)建和利用工具

本指南詳細(xì)介紹了如何為 crewAI 框架創(chuàng)建自定義工具以及如何高效管理和利用這些工具,包括最新功能,如工具委派、錯(cuò)誤處理和動(dòng)態(tài)工具調(diào)用。它還強(qiáng)調(diào)了協(xié)作工具的重要性,使代理能夠執(zhí)行各種操作。

(1). 先決條件

在創(chuàng)建自己的工具之前,請(qǐng)確保已安裝 crewAI 額外工具包:

pip install 'crewai[tools]'

(2). 子類化 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é)果"

(3). 使用 tool 裝飾器

或者,使用?tool?裝飾器以直接方式創(chuàng)建工具。這需要在函數(shù)內(nèi)指定屬性和工具的邏輯。

from crewai_tools import tool

@tool("工具名稱")
def my_simple_tool(question: str) -> str:
"""用于澄清的工具描述。"""
# 在這里編寫工具的邏輯
return "工具輸出"

(4). 為工具定義緩存函數(shù)

為了通過緩存優(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 代理的效率。

3. 順序流程概述

CrewAI 提供了一個(gè)靈活的框架,以結(jié)構(gòu)化方式執(zhí)行任務(wù),支持順序和分層流程。本指南概述了如何有效實(shí)施這些流程,以確保任務(wù)執(zhí)行高效并完成項(xiàng)目。順序流程確保任務(wù)按順序一個(gè)接一個(gè)地執(zhí)行,遵循線性進(jìn)展。這種方法非常適合需要按特定順序完成任務(wù)的項(xiàng)目。

(1). 主要特點(diǎn)

(2). 實(shí)施順序流程

召集你的團(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
)

(3). 工作流程示例

  1. 初始任務(wù):在順序流程中,第一個(gè)代理人完成他們的任務(wù)并發(fā)出完成信號(hào)。
  2. 后續(xù)任務(wù):代理人根據(jù)流程類型接手任務(wù),前期任務(wù)的結(jié)果或管理者的指導(dǎo)指引他們的執(zhí)行。
  3. 完成:一旦執(zhí)行最終任務(wù),流程結(jié)束,項(xiàng)目完成。

(4). 結(jié)論

CrewAI 中的順序和分層流程為任務(wù)執(zhí)行提供了清晰、適應(yīng)性強(qiáng)的路徑。它們非常適合需要邏輯進(jìn)展和動(dòng)態(tài)決策的項(xiàng)目,確保每一步都有效完成,從而促進(jìn)一個(gè)連貫的最終產(chǎn)品。

4. 分層流程概述

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)心。

(1). 主要特點(diǎn)

(2). 實(shí)施分層流程

要利用分層流程,必須將流程屬性明確設(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í)行
)

(3). 工作流程實(shí)例

  1. 任務(wù)分配:經(jīng)理根據(jù)每個(gè)代理的能力和可用工具策略性地分配任務(wù)。
  2. 執(zhí)行和審查:代理完成任務(wù),可以選擇異步執(zhí)行,并使用回調(diào)函數(shù)實(shí)現(xiàn)流暢的工作流程。
  3. 順序任務(wù)進(jìn)展:盡管是分層流程,任務(wù)按照邏輯順序進(jìn)行,經(jīng)理的監(jiān)督促進(jìn)了任務(wù)的順利進(jìn)行。

(4). 結(jié)論

在 CrewAI 中采用分層流程,正確配置并了解系統(tǒng)的能力,有助于實(shí)現(xiàn)項(xiàng)目管理的有序和高效方法。

5. 將 CrewAI 連接到 LLMs

“默認(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 解決方案提供了多樣化的集成。

(1). CrewAI 代理概述

Agent 類是在 CrewAI 中實(shí)現(xiàn) AI 解決方案的基石。以下是反映最新代碼庫(kù)更改的更新概述:

# 必需
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
)

(2). Ollama 集成

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=''

(3). HuggingFace 集成

您可以使用 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",
)

(4). OpenAI 兼容的 API 端點(diǎn)

通過環(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
)

(5). 結(jié)論

將 CrewAI 與不同的 LLMs 集成擴(kuò)展了框架的多樣性,允許在各種領(lǐng)域和平臺(tái)上定制高效的 AI 解決方案。

6. 可定制屬性

打造高效的 CrewAI 團(tuán)隊(duì)的關(guān)鍵在于能夠動(dòng)態(tài)地調(diào)整 AI 代理,以滿足任何項(xiàng)目的獨(dú)特需求。本節(jié)將介紹您可以定制的基礎(chǔ)屬性。

(1). 定制的關(guān)鍵屬性

(2). 高級(jí)定制選項(xiàng)

除了基本屬性外,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ǔ)言模型,提供更高程度的定制。

(3). 性能和調(diào)試設(shè)置

調(diào)整代理的性能并監(jiān)控其操作對(duì)于高效執(zhí)行任務(wù)至關(guān)重要。

冗長(zhǎng)模式和 RPM 限制

任務(wù)執(zhí)行的最大迭代次數(shù)

max_iter 屬性允許用戶定義代理為單個(gè)任務(wù)執(zhí)行的最大迭代次數(shù),防止無限循環(huán)或執(zhí)行時(shí)間過長(zhǎng)。默認(rèn)值設(shè)置為 15,在徹底性和效率之間提供平衡。一旦代理接近這個(gè)數(shù)字,它將盡力給出一個(gè)好答案。

(4). 定制代理和工具

通過在初始化期間定義其屬性和工具來定制代理。工具對(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
)

(5). 委托和自主權(quán)

控制代理委托任務(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 # 禁用委托
)

(6). 結(jié)論

通過設(shè)置代理的角色、目標(biāo)、背景故事和工具,以及高級(jí)選項(xiàng)如語(yǔ)言模型定制、記憶、性能設(shè)置和委托偏好,定制 CrewAI 中的代理,為復(fù)雜挑戰(zhàn)做好準(zhǔn)備,使其成為一個(gè)細(xì)致而有能力的 AI 團(tuán)隊(duì)。

7. 代理執(zhí)行中的人類輸入

在幾種代理執(zhí)行場(chǎng)景中,人類輸入至關(guān)重要,允許代理在必要時(shí)請(qǐng)求額外信息或澄清。這一功能在復(fù)雜決策過程中特別有用,或者當(dāng)代理需要更多細(xì)節(jié)以有效完成任務(wù)時(shí)。

(1). 使用 CrewAI 進(jìn)行人類輸入

要將人類輸入整合到代理執(zhí)行中,在任務(wù)定義中設(shè)置 human_input 標(biāo)志。啟用后,代理會(huì)在提供最終答案之前提示用戶輸入。這種輸入可以提供額外的上下文,澄清模糊之處,或驗(yàn)證代理的輸出。

(2). 示例:

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)

8. AgentOps

可觀察性是開發(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。

(1). 概述

AgentOps為開發(fā)和生產(chǎn)中的智能體提供監(jiān)控。它提供了用于跟蹤智能體性能、會(huì)話重放和自定義報(bào)告的儀表板。

此外,AgentOps提供了會(huì)話詳細(xì)信息,可實(shí)時(shí)查看Crew智能體交互、LLM調(diào)用以及工具使用情況。此功能對(duì)于調(diào)試和了解智能體如何與用戶以及其他智能體交互非常有用。

(2). 特點(diǎn)

(3). 使用AgentOps

  1. 創(chuàng)建API密鑰:在此處創(chuàng)建用戶API密鑰:創(chuàng)建API密鑰
  2. 配置您的環(huán)境:將您的API密鑰添加到您的環(huán)境變量中
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。

(4). Crew + AgentOps示例

(5). 更多信息

要開始使用,請(qǐng)創(chuàng)建一個(gè)AgentOps賬戶。

如有功能請(qǐng)求或錯(cuò)誤報(bào)告,請(qǐng)聯(lián)系A(chǔ)gentOps團(tuán)隊(duì),訪問AgentOps Repo。

三、CrewAI工具使用

1. 安裝

要使用文本搜索工具,您首先需要安裝 crewai_tools 軟件包。這可以通過 pip(Python 的軟件包管理器)來完成。打開您的終端或命令提示符,輸入以下命令:

pip install 'crewai[tools]'

這個(gè)命令將下載并安裝文本搜索工具以及任何必要的依賴項(xiàng)。

2. 文本搜索工具

(1). 描述

該工具用于在文本文件的內(nèi)容中執(zhí)行 RAG(檢索增強(qiáng)生成)搜索。它允許在指定文本文件的內(nèi)容中進(jìn)行語(yǔ)義搜索,根據(jù)提供的查詢快速提取信息或查找特定文本部分,是一個(gè)非常有價(jià)值的資源。

(2). 示例

以下示例演示了如何使用文本搜索工具在文本文件中進(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')

(3). 參數(shù)

(4). 自定義模型和嵌入

默認(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",
),
),
)
)

3. PDFSearchTool

(1). 描述

PDFSearchTool 是一款專為在 PDF 內(nèi)容中進(jìn)行語(yǔ)義搜索而設(shè)計(jì)的 RAG 工具。它允許輸入搜索查詢和 PDF 文檔,利用先進(jìn)的搜索技術(shù)高效地找到相關(guān)內(nèi)容。這種能力使其特別適用于快速?gòu)拇笮?PDF 文件中提取特定信息。

(2). 示例

以下是如何使用 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')

(3). 參數(shù)

(4). 自定義模型和嵌入

默認(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",
),
),
)
)

4. DOCXSearchTool

(1). 描述

DOCXSearchTool 是一款專為在 DOCX 文檔中進(jìn)行語(yǔ)義搜索而設(shè)計(jì)的 RAG 工具。它使用戶能夠通過基于查詢的搜索有效地搜索和提取 DOCX 文件中的相關(guān)信息。該工具對(duì)于數(shù)據(jù)分析、信息管理和研究任務(wù)至關(guān)重要,簡(jiǎn)化了在大型文檔集合中查找特定信息的過程。

(2). 示例

以下示例演示了如何初始化 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')

(3). 參數(shù)

(4). 自定義模型和嵌入

默認(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",
),
),
)
)

5. DirectoryReadTool

(1). 描述

DirectoryReadTool 是一個(gè)強(qiáng)大的實(shí)用工具,旨在提供目錄內(nèi)容的全面列表。它可以遞歸地瀏覽指定目錄,為用戶提供所有文件的詳細(xì)枚舉,包括子目錄中的文件。這個(gè)工具對(duì)需要對(duì)目錄結(jié)構(gòu)進(jìn)行徹底清點(diǎn)的任務(wù)或驗(yàn)證目錄中文件組織的任務(wù)至關(guān)重要。

(2). 示例

使用 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')

(3). 參數(shù)

DirectoryReadTool 需要進(jìn)行最少配置以供使用。該工具的基本參數(shù)如下:

6. 目錄搜索工具

(1). 描述

目錄搜索工具可以在指定目錄的內(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è)置固定目錄。

(2). 初始化和使用

從?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')

(3). 參數(shù)

(4). 自定義模型和嵌入

目錄搜索工具默認(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",
),
),
)
)

7. CSVSearchTool

(1). 描述

該工具用于在 CSV 文件內(nèi)容中執(zhí)行 RAG(檢索增強(qiáng)生成)搜索。它允許用戶在指定 CSV 文件的內(nèi)容中語(yǔ)義搜索查詢。這個(gè)功能特別適用于從大型 CSV 數(shù)據(jù)集中提取信息,傳統(tǒng)搜索方法可能效率低下的情況。所有名稱中帶有“Search”的工具,包括 CSVSearchTool,在設(shè)計(jì)上都是用于搜索不同數(shù)據(jù)源的 RAG 工具。

(2). 示例

from crewai_tools import CSVSearchTool

# 使用特定的 CSV 文件初始化工具。這樣設(shè)置允許代理只搜索給定的 CSV 文件。
tool = CSVSearchTool(csv='path/to/your/csvfile.csv')

# 或者

# 在沒有特定 CSV 文件的情況下初始化工具。代理將需要在運(yùn)行時(shí)提供 CSV 路徑。
tool = CSVSearchTool()

(3). 參數(shù)

(4). 自定義模型和嵌入

默認(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",
),
),
)
)

8. 文件讀取工具

(1). 描述

文件讀取工具在 crewai_tools 軟件包中概念上代表了一套旨在促進(jìn)文件讀取和內(nèi)容檢索的功能。該套件包括用于處理批量文本文件、讀取運(yùn)行時(shí)配置文件以及導(dǎo)入分析數(shù)據(jù)的工具。它支持多種基于文本的文件格式,如 .txt、.csv、.json 等。根據(jù)文件類型,該套件提供了專門的功能,例如將 JSON 內(nèi)容轉(zhuǎn)換為 Python 字典以便于使用。

(2). 使用示例

要開始使用文件讀取工具:

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')

(3). 參數(shù)

9. MDXSearchTool

(1). 描述

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ù)。

(2). 使用示例

要使用 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')

(3). 參數(shù)

(4). 模型和嵌入的定制化

該工具默認(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",
),
),
)
)

10. 網(wǎng)頁(yè)抓取工具

(1). 描述

這是一個(gè)旨在提取和閱讀指定網(wǎng)站內(nèi)容的工具。它能夠通過發(fā)出 HTTP 請(qǐng)求并解析接收到的 HTML 內(nèi)容來處理各種類型的網(wǎng)頁(yè)。該工具特別適用于網(wǎng)絡(luò)抓取任務(wù)、數(shù)據(jù)收集或從網(wǎng)站中提取特定信息。

(2). 示例

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)

(3). 參數(shù)

11. 網(wǎng)站搜索工具

(1). 描述

網(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ā)中,所述功能可能尚不可訪問。

(2). 示例用法

以下是網(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')

(3). 參數(shù)

(4). 自定義選項(xià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",
),
),
)
)

12. SeleniumScrapingTool

(1). 描述

SeleniumScrapingTool 專為高效的網(wǎng)絡(luò)抓取任務(wù)而設(shè)計(jì)。它通過使用 CSS 選擇器來精確提取網(wǎng)頁(yè)內(nèi)容,滿足各種抓取需求,靈活處理任何提供的網(wǎng)站 URL。

(2). 使用示例

以下是 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)

(3). 參數(shù)

以下參數(shù)可用于自定義 SeleniumScrapingTool 的抓取過程:

13. PGSearchTool

(1). 描述

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í)查詢的用戶提供寶貴資源。

(2). 示例用法

以下是一個(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')

(3). 參數(shù)

PGSearchTool 設(shè)計(jì)為需要以下參數(shù)才能運(yùn)行:

(4). 自定義模型和嵌入

該工具打算默認(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ù)智筆記

上一篇:

5000+ 個(gè) AI 項(xiàng)目詳解,效率工具篇:07

下一篇:

實(shí)戰(zhàn)PG vector 構(gòu)建DBA 個(gè)人知識(shí)庫(kù)之三: LLM+LangChain+pgvector 整合篇
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)