跳至主要內容

使用 Firecrawl 進行網頁抓取

Firecrawl 是一套網頁資料 API,可將網站轉換為乾淨的 markdown 或結構化 JSON。本指南將帶你把 Firecrawl 串接至 Mastra Tool,讓 Agent 與 Workflow 能視需要搜尋及抓取即時網頁資料。

先決條件
「先決條件」的直接連結

安裝
「安裝」的直接連結

安裝 Firecrawl SDK:

npm install firecrawl

設定環境變數
「設定環境變數」的直接連結

在專案根目錄建立 .env 檔案:

.env
FIRECRAWL_API_KEY=fc-your-api-key
# Optional: FIRECRAWL_API_URL=http://localhost:3002

建立 Firecrawl Tool
「建立 Firecrawl Tool」的直接連結

建立一個 Tool 檔案,將 Firecrawl 的搜尋與抓取功能提供給 Mastra。

  1. 建立 src/mastra/tools/firecrawl.ts 並設定 Firecrawl:

    src/mastra/tools/firecrawl.ts
    import { 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 ?? '' }
    },
    })
  2. src/mastra/agents/web-agent.ts 建立新的 Agent:

    src/mastra/agents/web-agent.ts
    import { 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 },
    })
  3. src/mastra/index.ts 中,將新建立的 Agent 註冊至 Mastra 執行個體:

    src/mastra/index.ts
    import { 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,
})