跳到主要内容

使用 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 文件,向 Mastra 提供 Firecrawl 的搜索和抓取能力。

  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 changelog,并总结最后一个版本。”
  • “搜索 Firecrawl 定价并提取各个方案层级。”

自托管 Firecrawl
自托管 Firecrawl的直接链接

如果你在本地运行 Firecrawl,请设置 FIRECRAWL_API_URL,或在 client 中传入 apiUrl

src/mastra/tools/firecrawl.ts
const firecrawl = new Firecrawl({
apiKey: process.env.FIRECRAWL_API_KEY!,
apiUrl: process.env.FIRECRAWL_API_URL,
})