使用 Firecrawl 進行網頁抓取
Firecrawl 是一套網頁資料 API,可將網站轉換為乾淨的 markdown 或結構化 JSON。本指南將帶你把 Firecrawl 串接至 Mastra Tool,讓 Agent 與 Workflow 能視需要搜尋及抓取即時網頁資料。
先決條件「先決條件」的直接連結
- 已安裝 Node.js
v22.13.0或更新版本 - Firecrawl API 金鑰(可前往 https://firecrawl.dev 取得)
- 支援的 Model Provider 所提供的 API 金鑰
- 現有的 Mastra 專案(請依照安裝指南設定新專案)
安裝「安裝」的直接連結
安裝 Firecrawl SDK:
- npm
- pnpm
- Yarn
- Bun
npm install firecrawl
pnpm add firecrawl
yarn add firecrawl
bun add firecrawl
設定環境變數「設定環境變數」的直接連結
在專案根目錄建立 .env 檔案:
.env
FIRECRAWL_API_KEY=fc-your-api-key
# Optional: FIRECRAWL_API_URL=http://localhost:3002
建立 Firecrawl Tool「建立 Firecrawl Tool」的直接連結
建立一個 Tool 檔案,將 Firecrawl 的搜尋與抓取功能提供給 Mastra。
建立
src/mastra/tools/firecrawl.ts並設定 Firecrawl:src/mastra/tools/firecrawl.tsimport { Firecrawl } from 'firecrawl'import { createTool } from '@mastra/core/tools'import { z } from 'zod'const firecrawl = new Firecrawl({ apiKey: process.env.FIRECRAWL_API_KEY! })export const firecrawlSearch = createTool({id: 'firecrawl-search',description: 'Search the web and return top results.',inputSchema: z.object({ query: z.string().min(1) }),outputSchema: z.object({results: z.array(z.object({title: z.string().nullable(),url: z.string(),}),),}),execute: async ({ query }) => {const results = await firecrawl.search(query, { limit: 3 })return {results: (results.web ?? []).map(item => ({title: item.title ?? null,url: item.url,})),}},})export const firecrawlScrape = createTool({id: 'firecrawl-scrape',description: 'Scrape a URL and return markdown content.',inputSchema: z.object({ url: z.string().url() }),outputSchema: z.object({ markdown: z.string() }),execute: async ({ url }) => {const result = await firecrawl.scrape(url, {formats: ['markdown'],onlyMainContent: true,})return { markdown: result.markdown ?? '' }},})在
src/mastra/agents/web-agent.ts建立新的 Agent:src/mastra/agents/web-agent.tsimport { Agent } from '@mastra/core/agent'import { firecrawlSearch, firecrawlScrape } from '../tools/firecrawl'export const webAgent = new Agent({id: 'web-agent',name: 'Web Agent',instructions: 'Use Firecrawl tools to search and scrape web pages, then summarize the results.',model: 'openai/gpt-5.6-sol',tools: { firecrawlSearch, firecrawlScrape },})在
src/mastra/index.ts中,將新建立的 Agent 註冊至 Mastra 執行個體:src/mastra/index.tsimport { Mastra } from '@mastra/core'import { webAgent } from './agents/web-agent'export const mastra = new Mastra({agents: { webAgent },})
在 Studio 中測試「在 Studio 中測試」的直接連結
啟動開發伺服器並開啟 Studio:
mastra dev
在 Studio 中開啟 Web Agent,並嘗試輸入:
- 「尋找最新的 Mastra 變更記錄,並摘要最近一次發布的內容。」
- 「搜尋 Firecrawl 的定價,並擷取各方案層級。」
自行託管 Firecrawl「自行託管 Firecrawl」的直接連結
若你在本機執行 Firecrawl,請設定 FIRECRAWL_API_URL,或在使用者端傳入 apiUrl:
src/mastra/tools/firecrawl.ts
const firecrawl = new Firecrawl({
apiKey: process.env.FIRECRAWL_API_KEY!,
apiUrl: process.env.FIRECRAWL_API_URL,
})