尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CrewAI FirecrawlSearchTool 实战:为 AI Agent 接入 Firecrawl 网页搜索能力

CrewAI FirecrawlSearchTool 实战:为 AI Agent 接入 Firecrawl 网页搜索能力 CrewAI FirecrawlSearchTool 实战为 AI Agent 接入 Firecrawl 网页搜索能力【免费下载链接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.项目地址: https://gitcode.com/GitHub_Trending/cr/crewAI本文围绕 CrewAI 工具库中的FirecrawlSearchTool展开它如何把 Firecrawl 平台的网页搜索与 Markdown 抓取能力封装成 Agent 可直接调用的标准工具。读完本文你将掌握该工具的完整安装配置、全部参数与默认值以及其在 CrewAI 工具基类上的源码级实现细节能够将网页搜索结果作为 LLM 上下文接入你的 Crew 或 Flow 应用。工具定位Agent 的网页搜索入口Firecrawl 工具说明文档 对它的定义是Firecrawl 是一个把任意网站爬取并转换为干净 Markdown 或结构化数据的平台而FirecrawlSearchTool就是让 CrewAI Agent 具备加载网页能力的具体实现。从源码结构看该工具以独立子模块形式组织在lib/crewai-tools/src/crewai_tools/tools/firecrawl_search_tool/目录下包含 README.md 与 firecrawl_search_tool.py 两个核心文件并通过 crewai_tools 包入口 的__all__列表导出因此可以直接from crewai_tools import FirecrawlSearchTool使用无需关心内部模块路径。工具对外的name与description均为英文固定值Firecrawl web search tool / Search webpages using Firecrawl and return the results这也是 LLM 在 Function Calling 时看到的工具签名。安装与环境准备根据工具文档使用前需要完成两件事在 Firecrawl 官方平台申请 API Key并写入环境变量FIRECRAWL_API_KEY安装 Firecrawl Python SDK 与 CrewAI 工具包pip install firecrawl-py crewai[tools]源码层面有两条对应的硬性约束值得注意firecrawl_search_tool.py#L66-L74 中通过env_vars声明了FIRECRAWL_API_KEY且标记为requiredTrue。这意味着该 key 会被纳入 CrewAI 的环境变量校验体系在未配置时运行 Crew 会在启动检查阶段被提示缺失而不是等到调用时才失败package_dependencies字段声明了[firecrawl-py]见 源码第 65 行供上层工具校验逻辑确认依赖是否齐备。此外源码在模块顶部对from firecrawl import FirecrawlApp做了try/except ImportError兜底并记录FIRECRAWL_AVAILABLE标志源码第 9-14 行。也就是说crewai[tools]本体并不强制安装firecrawl-py属于可选重依赖——这正是工具采用延迟导入设计的原因。基本用法文档给出的最小示例如下创建工具实例后调用run(query...)发起搜索from crewai_tools import FirecrawlSearchTool tool FirecrawlSearchTool(config{limit: 5}) tool.run(queryfirecrawl web scraping)tool.run()是 CrewAIBaseTool的统一执行入口。从 源码第 106-116 行 可以看到run背后的_run(self, query: str)实现非常薄——它先校验FirecrawlApp已完成初始化否则抛出RuntimeError(FirecrawlApp not properly initialized)随后把self.config整个展开透传给 SDKreturn self._firecrawl.search( queryquery, **self.config, )这意味着config字典里出现的每个键都会原样成为FirecrawlApp.search()的命名参数。工具的参数模型由FirecrawlSearchToolSchema源码第 17-18 行定义LLM 在调用该工具时只需要填写一个query: str字段其余参数全部由开发者在实例化时通过config固定这一设计把搜索策略的控制权交给了编排者而非模型。实际使用时通常把工具实例交给 Agent 的tools参数即可让角色自主决定何时搜索from crewai import Agent from crewai_tools import FirecrawlSearchTool agent Agent( roleResearcher, goalGather up-to-date information from the web, tools[FirecrawlSearchTool(config{limit: 5})], llmgpt-4o, )参数详解api_key 与 config工具说明文档README 的 Arguments 小节声明了两个实例化参数参数必填说明api_key可选指定 Firecrawl API Key缺省时回退到FIRECRAWL_API_KEY环境变量config可选包含传给 Firecrawl API 的全部搜索参数文档中给出的默认配置块为{ limit: 5, tbs: None, lang: en, country: us, location: None, timeout: 60000, }需要提示的是以当前仓库源码为准config字段真实的default_factory源码第 49-63 行对齐的是 Firecrawl v2 API实际默认为{ limit: 5, # 返回的最大搜索结果数默认 5 tbs: None, # 时间过滤如 qdr:d 限定最近一天 location: None, # 搜索结果的地域偏好 timeout: None, # 请求超时毫秒 scrape_options: { # 对搜索结果页面的抓取选项 formats: [markdown], # 返回内容格式默认 Markdown only_main_content: True, # 只保留正文过滤导航/页脚 include_tags: [], exclude_tags: [], wait_for: 0, # 抓取前等待的毫秒数用于 JS 渲染页面 }, }源码中的类 docstring源码第 22-40 行对这些参数逐项做了说明limit控制返回条数tbs支持类似qdr:d的时间窗口过滤scrape_options.formats控制内容格式only_main_content决定是否剥离页面头尾噪声wait_for则用于应对需要等待前端渲染的动态页面。这里可以看出工具文档与源码存在一点演进差异文档默认配置块中的lang/country字段未出现在当前源码的默认工厂里而scrape_options子配置则是文档尚未覆盖的新能力。以当前仓库源码结构看config应围绕 v2 API 的键名来配置如果你传入文档中列出的lang/country它们会经由**self.config透传给 SDK是否生效取决于所用 firecrawl-py 版本的 API 契约建议以所装 SDK 版本行为为准。初始化链路懒加载 SDK 与交互式依赖安装FirecrawlSearchTool的构造函数源码第 76-79 行先完成 Pydantic 字段初始化再调用_initialize_firecrawl()。该私有方法源码第 81-104 行实现了一条完整的缺依赖自愈链路尝试from firecrawl import FirecrawlApp成功则用当前api_key构造FirecrawlApp实例存入私有属性_firecrawl若导入失败用click.confirm询问用户是否安装 firecrawl-py确认后执行subprocess.run([uv, add, firecrawl-py])自动安装并重新导入安装失败则包装为ImportError抛出若用户拒绝安装抛出提示信息firecrawl-py package not found, please run uv add firecrawl-py的ImportError。这条链路解释了为什么文档要求预先pip install firecrawl-py预装可以跳过交互式询问在 CI 或 Agent 等无人值守环境下避免卡在click.confirm上。此外模块底部还有一段model_rebuild()保护逻辑源码第 119-126 行仅在 firecrawl-py 可用时重建 Pydantic 模型并打上_model_rebuilt防重入标记保证类型引用在 SDK 存在与否两种状态下都稳定。返回值形态与测试验证工具的运行测试位于 firecrawl_search_tool_test.py采用 pytest-vcr 录制回放的方式pytest.mark.vcr固定外部调用断言搜索返回对象非空且带有web、news或images属性之一tool FirecrawlSearchTool() result tool.run(queryfirecrawl) assert result is not None assert hasattr(result, web) or hasattr(result, news) or hasattr(result, images)从测试用例可以推断tool.run()的返回值不是裸字符串而是 Firecrawl v2 API 的搜索结果响应对象按结果类型分列在web/news/images字段下结合scrape_options默认的formats: [markdown]每条结果正文即为可直接投喂给 LLM 的 Markdown 文本。在 Agent 场景下整个响应体会被序列化为工具结果字符串回传给模型因此limit的大小直接影响注入上下文的 token 量按需调小limit或开启only_main_content是控制成本的有效手段。小结与延伸阅读FirecrawlSearchTool的设计可以概括为薄封装、厚透传工具本身只承担 API Key 管理、依赖校验与参数默认值三件事真正的搜索与抓取行为全部委托给 firecrawl-py 的FirecrawlApp.search()。想进一步了解的读者可以阅读 工具说明文档、实现源码 与 集成测试同一平台下的网页抓取工具如 FirecrawlScrapeWebsiteTool、FirecrawlCrawlWebsiteTool可在官方文档目录 docs/edge/en/tools/web-scraping/ 中对照参考与搜索工具组合使用可覆盖先搜后抓的完整网页情报链路。【免费下载链接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.项目地址: https://gitcode.com/GitHub_Trending/cr/crewAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表