avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 crewAi 如何调用tools
文章

crewAi 如何调用tools

发表于 2026-09-1 更新于 2026-09- 1
作者 mdo
10~13 分钟 阅读

在 CrewAI 中,调用工具(Tools)是让智能体(Agent)拥有“执行能力”(如联网搜索、读写文件、查询数据库等)的关键。

以下是 CrewAI 调用工具的完整全景指南:


第一步:安装工具包

CrewAI 官方提供了一个极其丰富的工具库 crewai_tools。你可以直接在终端中安装它:

bash

pip install 'crewai[tools]'

请谨慎使用此类代码。


第二步:在代码中调用工具的三种方式

方式一:使用内置的官方工具(最快捷)

官方内置了非常多开箱即用的工具,比如文件读写、网页爬取、目录读取等。

这里我们以内置的 文件读取工具 (FileReadTool) 和 网页抓取工具 (ScrapeWebsiteTool) 为例:

python

from crewai import Agent, Task, Crew, LLM
# 导入官方内置工具
from crewai_tools import FileReadTool, ScrapeWebsiteTool

# 1. 实例化工具
file_reader = FileReadTool()
web_scraper = ScrapeWebsiteTool(website_url="https://example.com") # 也可以不传固定网址,让Agent运行时自己传

# 2. 将工具分配给 Agent
researcher = Agent(
    role="资料审查员",
    goal="分析给定的网页和本地文件并提取核心摘要",
    backstory="你是一个极其细心的资料审核员。",
    # 📌 在这里把工具列表传给这个 Agent,它就会自己根据任务去调用了
    tools=[file_reader, web_scraper], 
    llm=LLM(model="openai/qwen2.5:7b", base_url="http://127.0.0", api_key="sk-xxx"),
    verbose=True
)

请谨慎使用此类代码。

方式二:把任何 Python 函数变成工具(最灵活)

如果你想让 AI 执行你自定义的复杂业务逻辑(比如调用公司内部的某个 API、查询特定数据库、或者做一段数学计算),你可以使用 @tool 装饰器。

注意:函数的注释(Docstring)和参数类型提示非常重要,AI 是通过读你的注释来理解这个工具是干什么用的、以及如何传参的。

python

from crewai.tools import tool

@tool("我的天气查询工具")
def fetch_weather_tool(city: str) -> str:
    """
    当你需要查询某个城市的实时天气时,请调用这个工具。
    输入参数 city 必须是城市名称的字符串。
    """
    # 这里写你真正的 Python 业务代码(例如请求高德天气API)
    if "北京" in city:
        return "北京今天晴天,25度,微风。"
    else:
        return f"已成功查询 {city} 的天气,气温适宜。"

# 分配给 Agent
weather_agent = Agent(
    role="天气播报员",
    goal="为用户提供精准的天气出行建议",
    backstory="你是一个天气预报专家。",
    tools=[fetch_weather_tool], # 📌 像这样直接把函数名传进去
    llm=local_llm,
    verbose=True
)

请谨慎使用此类代码。

方式三:直接复用 LangChain 的庞大工具生态

因为 CrewAI 底层对 LangChain 有着极好的兼容性,你可以直接把 LangChain 的丰富工具拿过来用。例如使用谷歌搜索(Google Serper):

python

from langchain_community.utilities import GoogleSerperAPIWrapper
from crewai_tools import Tool

# 1. 创建 LangChain 的搜索组件
search_wrapper = GoogleSerperAPIWrapper()

# 2. 用 CrewAI 的 Tool 类包装它
google_search_tool = Tool(
    name="谷歌搜索工具",
    description="当你需要联网查询最新的实时信息、热点新闻或事实时,使用此工具。",
    func=search_wrapper.run
)

# 3. 分配给 Agent
agent = Agent(role="新闻追踪者", goal="搜集最新动态", tools=[google_search_tool], ... )

请谨慎使用此类代码。


第三步:任务(Task)级别的工具限制

在 CrewAI 中,你不仅可以把工具绑定给 Agent(代表这个员工能用什么工具),还可以进一步绑定给 Task(代表这个任务只准用什么工具)。

python

research_task = Task(
    description="去特定网页抓取最新的 AI 行业报告数据。",
    expected_output="一份包含核心数据的摘要。",
    agent=researcher,
    # 📌 如果 Task 强制指定了 tools,它会覆盖 Agent 自带的 tools,常用于防止 AI 乱用其他工具
    tools=[web_scraper] 
)

请谨慎使用此类代码。

💡 避坑与高级技巧

  1. 为什么 AI 总是调用工具失败(Tool Execution Error)?

    • 如果你使用的是本地小模型(如 7B/14B 的 Qwen 或 Llama),它们的 Function Calling(函数调用) 能力可能不够强,容易出现传参格式错误。

    • 解决方法:尽量使用针对工具调用优化过的模型(如 qwen2.5 系列),或者在自定义工具的 description(注释)里用极其直白、大白的语言告诉 AI:“请务必只传入一个字符串,不要传入 JSON”。

  2. 控制工具调用次数:
    为了防止本地模型陷入死循环(比如不断报错、不断重新调用工具),你可以在 Agent 中设置最大迭代次数:

    python

    agent = Agent(..., max_iter=5) # 限制针对一个任务最多尝试调用工具 5 次
    

    请谨慎使用此类代码。

您目前是希望让您的多智能体系统去实现哪种具体的业务动作?

  • 联网搜索最新行业信息(需要配置搜索 Key)

  • 读取和整理本地电脑的 Excel/PDF 文件

  • 对接您现有的 SQL 数据库或内部系统的 API

我可以根据您的具体需求,为您打包一段开箱即用的完整工具调用代码。

技术
许可协议:  CC BY 4.0
分享

相关文章

10月 2, 2026

iOS 侧载(Sideloading)工具

AltStore 和 Sideloadly 都是目前最流行的 iOS 侧载(Sideloading)工具。 简单来说,它们的作用就是让你绕过苹果的官方 App Store,直接把第三方的 IPA 安装包(也就是 iOS 的应用安装文件)安装到你的 iPhone 或 iPad 上。 通过这两个工具,你

9月 28, 2026

注册 Chat Participant

将当前服务接入 VS Code 的 AI 聊天窗口是完全可行的。VS Code 在近期的版本中正式推出了 Chat Extensions API(github.copilot.chat),允许第三方扩展将自定义的 LLM 服务或工具注册到 Copilot Chat 面板中。 结合当前 code_ge

9月 23, 2026

php intelephense 设置 if 空格

在 VS Code 中,如果你使用的是 PHP Intelephense 插件,控制 if 关键字后面是否加空格的设置是由其内置的格式化引擎(基于 PSR-12 标准)决定的。 你可以通过修改 VS Code 的 settings.json 来配置这个行为: 1. 开启 if 后面的空格(默认/推荐

下一篇

使用Cursor是否会泄漏源代码

上一篇

Agent 运行框架

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。