> ## Documentation Index
> Fetch the complete documentation index at: https://docs.firecrawl.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Vercel AI SDK

> Vercel AI SDK 向け Firecrawl ツール。AI アプリケーション向けの Web スクレイピング、検索、Interact、クロール。

Vercel AI SDK 向け Firecrawl ツール。AI アプリケーションで、検索、スクレイピング、ページと Interact し、Web をクロールできます。

<div id="install">
  ## インストール
</div>

```bash theme={null}
npm install firecrawl-aisdk ai
```

環境変数を設定する：

```bash theme={null}
FIRECRAWL_API_KEY=fc-your-key       # https://firecrawl.dev
AI_GATEWAY_API_KEY=your-key         # https://vercel.com/ai-gateway
```

<Note>
  これらの例では [Vercel AI Gateway](https://vercel.com/ai-gateway) の string モデルフォーマットを使用していますが、Firecrawl のツールはどの AI SDK プロバイダとも動作します。`@ai-sdk/anthropic` の `anthropic('claude-sonnet-4-5-20250514')` のようなプロバイダのインポートも使用できます。
</Note>

<div id="quick-start">
  ## クイックスタート
</div>

`FirecrawlTools()` には、デフォルトで `search`、`scrape`、`interact` が含まれています。

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  tools: FirecrawlTools(),
  stopWhen: stepCountIs(30),
  prompt: `
    1. Use interact on Hacker News to identify the top story
    2. Search for other perspectives on the same topic
    3. Scrape the most relevant pages you found
    4. Summarize everything you found
  `,
});
```

<div id="firecrawltools">
  ## FirecrawlTools
</div>

`FirecrawlTools()` は、デフォルトのツールに加えて、`generateText` に渡せる自動生成の `systemPrompt` も提供します。

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { FirecrawlTools } from 'firecrawl-aisdk';

const tools = FirecrawlTools();

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  system: `${tools.systemPrompt}\n\nAnswer with citations when possible.`,
  tools,
  stopWhen: stepCountIs(20),
  prompt: 'Find the current Firecrawl pricing page and explain the available plans.',
});
```

default 設定をカスタマイズし、非同期ツール を有効にしたり、個々のツールを disable したりできます：

```typescript theme={null}
const tools = FirecrawlTools({
  search: { limit: 5 },
  scrape: { formats: ['markdown'], onlyMainContent: true },
  interact: { profile: { name: 'my-session', saveChanges: true } },
  crawl: true,
  agent: true,
});
```

```typescript theme={null}
// interactを無効化し、search + scrapeを維持
FirecrawlTools({ interact: false });

// 非推奨のbrowser互換性を有効にする
FirecrawlTools({ browser: {} });

// 利用可能なすべてのツールを含める
FirecrawlTools({ all: true });
```

ページに関する質問に答えるために スクレイピング を行う場合は、`question` フォーマット を使用してください:

```typescript theme={null}
formats: [{ type: 'question', question: 'What does this page say about pricing and rate limits?' }]
```

ページ全体のコンテンツが必要な場合にのみ、`formats: ['markdown']` を使用してください.

<div id="individual-tools">
  ## 個別ツール
</div>

すべてのツールは直接使用することも、options を指定して呼び出すこともできます。

```typescript theme={null}
import { generateText } from 'ai';
import { scrape, search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Firecrawlを検索し、最も関連性の高い結果をスクレイピングする。',
  tools: { search, scrape },
});

const customScrape = scrape({ apiKey: 'fc-custom-key', apiUrl: 'https://api.firecrawl.dev' });
```

<div id="search-scrape">
  ### 検索 + スクレイピング
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { search, scrape } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Search for Firecrawl, scrape the top official result, and explain what it does.',
  tools: { search, scrape },
});
```

<div id="map">
  ### マップ
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { map } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'https://docs.firecrawl.dev をマップして主要なセクションをリストアップしてください。',
  tools: { map },
});
```

<div id="stream">
  ### ストリーミング
</div>

```typescript theme={null}
import { streamText, stepCountIs } from 'ai';
import { scrape } from 'firecrawl-aisdk';

const result = streamText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'What is the first 100 words of firecrawl.dev?',
  tools: { scrape },
  stopWhen: stepCountIs(3),
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

await result.fullStream;
```

<div id="interact">
  ## Interact
</div>

`interact()` は、スクレイピングを基盤とした対話型セッションを作成します。`start(url)` を呼び出してセッションを開始し、ライブビュー URL を取得してから、モデルが `interact` ツールを通じてそのセッションを再利用できるようにします。

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { interact, search } from 'firecrawl-aisdk';

const interactTool = interact();
console.log('Live view:', await interactTool.start('https://news.ycombinator.com'));

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  tools: { interact: interactTool, search },
  stopWhen: stepCountIs(25),
  prompt: 'Use interact on the current Hacker News session, find the top story, then search for more context.',
});

await interactTool.close();
```

起動後に明示的なライブビューURLが必要な場合は、`interactTool.interactiveLiveViewUrl`を使用します。

プロファイルを使用すると、セッション間でブラウザの状態を再利用できます:

```typescript theme={null}
const interactTool = interact({
  profile: { name: 'my-session', saveChanges: true },
});
```

`browser()` は非推奨です。代わりに `interact()` を使用してください。

<div id="async-tools">
  ## 非同期ツール
</div>

クロール、バッチスクレイプ、エージェント はジョブ ID を返します。`poll` と組み合わせて使用します。

<div id="crawl">
  ### クロール
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { crawl, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Crawl https://docs.firecrawl.dev (limit 3 pages) and summarize.',
  tools: { crawl, poll },
});
```

<div id="batch-scrape">
  ### バッチスクレイプ
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { batchScrape, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and https://docs.firecrawl.dev, then compare them.',
  tools: { batchScrape, poll },
});
```

<div id="agent">
  ### エージェント
</div>

自律的な Web データ収集 — 自動で検索・ページ遷移・データ抽出を行います。

```typescript theme={null}
import { generateText, stepCountIs } from 'ai';
import { agent, poll } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Find the founders of Firecrawl, their roles, and their backgrounds.',
  tools: { agent, poll },
  stopWhen: stepCountIs(10),
});
```

<div id="logging">
  ## ロギング
</div>

```typescript theme={null}
import { generateText } from 'ai';
import { logStep, scrape, stepLogger } from 'firecrawl-aisdk';

const logger = stepLogger();

const { text, usage } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and summarize it.',
  tools: { scrape },
  onStepFinish: logger.onStep,
  experimental_onToolCallFinish: logger.onToolCallFinish,
});

logger.close();
logger.summary(usage);

await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Scrape https://firecrawl.dev and summarize it again.',
  tools: { scrape },
  onStepFinish: logStep,
});
```

<div id="all-exports">
  ## エクスポート一覧
</div>

```typescript theme={null}
import {
  // コアツール
  search,             // ウェブを検索する
  scrape,             // 単一のURLをスクレイピングする
  map,                // サイト上のURLを探索する
  crawl,              // 複数ページをクロールする（非同期、pollを使用）
  batchScrape,        // 複数のURLをスクレイピングする（非同期、pollを使用）
  agent,              // 自律型ウェブリサーチ（非同期、pollを使用）

  // ジョブ管理
  poll,               // 非同期ジョブの結果をポーリングする
  status,             // ジョブのステータスを確認する
  cancel,             // 実行中のジョブをキャンセルする

  // ブラウザ／セッションツール
  interact,           // interact({ profile: { name: '...' } })
  browser,            // 非推奨の互換エクスポート

  // オールインワンバンドル
  FirecrawlTools,     // FirecrawlTools({ search, scrape, interact, crawl, agent })

  // ヘルパー
  stepLogger,         // ツール呼び出しごとのトークン統計
  logStep,            // シンプルな1行ロギング
} from 'firecrawl-aisdk';
```
