跳到主要内容

CrewAI 工具

介绍

crewAI 工具赋予代理人各种能力,从网页搜索和数据分析到协作和委派同事之间的任务。本文档概述了如何在 crewAI 框架中创建、集成和利用这些工具,包括对协作工具的新重点。

什么是工具?

!!! note "定义" 在 crewAI 中,工具是代理人可以利用来执行各种操作的技能或功能。这包括来自 crewAI ToolkitLangChain Tools 的工具,使代理人能够进行从简单搜索到复杂互动和有效团队合作的各种操作。

工具的关键特征

  • 实用性:专为网页搜索、数据分析、内容生成和代理协作等任务而设计。
  • 集成性:通过将工具无缝集成到工作流程中,提升代理人的能力。
  • 可定制性:提供灵活性,可以开发定制工具或利用现有工具,满足代理人的特定需求。
  • 错误处理:包含健壮的错误处理机制,确保平稳运行。
  • 缓存机制:具有智能缓存功能,优化性能并减少冗余操作。

使用 crewAI 工具

要通过 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 key
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='Market Research Analyst',
goal='Provide up-to-date market analysis of the AI industry',
backstory='An expert analyst with a keen eye for market trends.',
tools=[search_tool, web_rag_tool],
verbose=True
)

writer = Agent(
role='Content Writer',
goal='Craft engaging blog posts about the AI industry',
backstory='A skilled writer with a passion for technology.',
tools=[docs_tool, file_tool],
verbose=True
)

# 定义任务
research = Task(
description='Research the latest trends in the AI industry and provide a summary.',
expected_output='A summary of the top 3 trending developments in the AI industry with a unique perspective on their significance.',
agent=researcher
)

write = Task(
description='Write an engaging blog post about the AI industry, based on the research analyst’s summary. Draw inspiration from the latest blog posts in the directory.',
expected_output='A 4-paragraph blog post formatted in markdown with engaging, informative, and accessible content, avoiding complex jargon.',
agent=writer,
output_file='blog-posts/new_post.md' # 最终的博客文章将保存在这里
)

# 组建一个团队
crew = Crew(
agents=[researcher, writer],
tasks=[research, write],
verbose=2
)

# 执行任务
crew.kickoff()

可用的 crewAI 工具

  • 错误处理:所有工具都具有错误处理功能,允许代理人优雅地处理异常并继续他们的任务。
  • 缓存机制:所有工具都支持缓存,使代理人能够高效地重用先前获得的结果,减少对外部资源的负载并加快执行时间,您还可以使用工具上的 cache_function 属性对缓存机制进行更精细的控制。

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

工具描述
CodeDocsSearchTool一个针对搜索代码文档和相关技术文档进行优化的 RAG 工具。
CSVSearchTool专为在 CSV 文件中进行搜索而设计的 RAG 工具,适用于处理结构化数据。
DirectorySearchTool用于在目录中进行搜索的 RAG 工具,可用于浏览文件系统。
DOCXSearchTool旨在在 DOCX 文档中进行搜索的 RAG 工具,非常适合处理 Word 文件。
DirectoryReadTool便于读取和处理目录结构及其内容。
FileReadTool(文件读取工具)使从文件中读取和提取数据成为可能,支持各种文件格式。
GithubSearchTool(GitHub搜索工具)用于在GitHub存储库中进行搜索的RAG工具,可用于代码和文档搜索。
SerperDevTool(Serper开发工具)专门用于开发目的的工具,具有特定的功能正在开发中。
TXTSearchTool(TXT搜索工具)专注于在文本(.txt)文件中进行搜索的RAG工具,适用于非结构化数据。
JSONSearchTool(JSON搜索工具)专为在JSON文件中进行搜索而设计的RAG工具,适用于处理结构化数据。
MDXSearchTool(MDX搜索工具)专为在Markdown(MDX)文件中进行搜索而量身定制的RAG工具,适用于文档编写。
PDFSearchTool(PDF搜索工具)旨在在PDF文档中进行搜索的RAG工具,非常适合处理扫描文档。
PGSearchTool(PG搜索工具)针对在PostgreSQL数据库中进行搜索进行了优化的RAG工具,适用于数据库查询。
RagTool(RAG工具)通用的RAG工具,能够处理各种数据源和类型。
ScrapeElementFromWebsiteTool(从网站抓取元素工具)使从网站中抓取特定元素成为可能,适用于有针对性的数据提取。
ScrapeWebsiteTool(抓取网站工具)便于抓取整个网站,非常适合全面收集数据。
WebsiteSearchTool(网站搜索工具)用于搜索网站内容的RAG工具,针对网络数据提取进行了优化。
XMLSearchTool(XML搜索工具)专为在XML文件中进行搜索而设计的RAG工具,适用于结构化数据格式。
YoutubeChannelSearchTool(YouTube频道搜索工具)用于在YouTube频道中进行搜索的RAG工具,适用于视频内容分析。
YoutubeVideoSearchTool(YouTube视频搜索工具)旨在在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="Writer",
goal="您为孩子们编写数学课程。",
backstory="您是写作专家,热爱教孩子,但对数学一窍不通。",
tools=[multiplcation_tool],
allow_delegation=False,
)
#...

使用 LangChain 工具

!!! 信息 "LangChain 集成" CrewAI 与 LangChain 的全面工具包无缝集成,这里是Langchain提供的内置工具 LangChain Toolkit :

from crewai import Agent
from langchain.agents import Tool
from langchain.utilities import GoogleSerperAPIWrapper

# 设置API密钥
os.environ["SERPER_API_KEY"] = "您的密钥"

search = GoogleSerperAPIWrapper()

# 创建并将搜索工具分配给代理
serper_tool = Tool(
name="中级答案",
func=search.run,
description="用于基于搜索的查询",
)

agent = Agent(
role='研究分析师',
goal='提供最新的市场分析',
backstory='一位对市场趋势敏锐的专业分析师。',
tools=[serper_tool]
)

# 其余代码...

结论

工具在扩展 CrewAI 代理的能力方面起着至关重要的作用,使他们能够执行各种任务并有效地进行协作。在使用 CrewAI 构建解决方案时,利用自定义和现有工具,赋予您的代理人力量,并增强 AI 生态系统。考虑利用错误处理、缓存机制以及工具参数的灵活性,优化您的代理的性能和能力。