Pular para o conteúdo principal
Ferramentas Evocrawl para o Vercel AI SDK. Busque, faça scraping, interaja com páginas e rastreie a web em suas aplicações de IA.

Instalação

npm install firecrawl-aisdk ai
Configure as variáveis de ambiente:
FIRECRAWL_API_KEY=fc-your-key       # https://evocrawl.com
AI_GATEWAY_API_KEY=your-key         # https://vercel.com/ai-gateway
Estes exemplos usam o formato de modelo de string do Vercel AI Gateway, mas as ferramentas do Evocrawl funcionam com qualquer provedor de SDK de IA. Você também pode usar importações de provedores, como anthropic('claude-sonnet-4-5-20250514'), de @ai-sdk/anthropic.

Início rápido

EvocrawlTools() inclui search, scrape e interact por padrão.
import { generateText, stepCountIs } from 'ai';
import { EvocrawlTools } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  tools: EvocrawlTools(),
  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
  `,
});

EvocrawlTools

EvocrawlTools() inclui as ferramentas default e um systemPrompt gerado automaticamente, que você pode passar para generateText.
import { generateText, stepCountIs } from 'ai';
import { EvocrawlTools } from 'firecrawl-aisdk';

const tools = EvocrawlTools();

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 Evocrawl pricing page and explain the available plans.',
});
Você pode personalizar as configurações padrão, usar ferramentas assíncronas ou desativar ferramentas individuais:
const tools = EvocrawlTools({
  search: { limit: 5 },
  scrape: { formats: ['markdown'], onlyMainContent: true },
  interact: { profile: { name: 'my-session', saveChanges: true } },
  crawl: true,
  agent: true,
});
// Desabilitar interact, manter search + scrape
EvocrawlTools({ interact: false });

// Ativar compatibilidade com navegador depreciado
EvocrawlTools({ browser: {} });

// Incluir todas as ferramentas disponíveis
EvocrawlTools({ all: true });
Ao fazer scraping para responder a uma pergunta sobre uma página, prefira usar o formato de consulta:
formats: [{ type: 'query', prompt: 'What does this page say about pricing and rate limits?' }]
Use formats: ['markdown'] apenas quando precisar do conteúdo completo da página.

Ferramentas Individuais

Cada ferramenta pode ser usada diretamente ou chamada com opções:
import { generateText } from 'ai';
import { scrape, search } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Search for Evocrawl, then scrape the most relevant result.',
  tools: { search, scrape },
});

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

Busca + Scraping

import { generateText } from 'ai';
import { search, scrape } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Busque por Evocrawl, faça scrape do primeiro resultado oficial e explique o que ele faz.',
  tools: { search, scrape },
});

Mapeamento

import { generateText } from 'ai';
import { map } from 'firecrawl-aisdk';

const { text } = await generateText({
  model: 'anthropic/claude-sonnet-4-5',
  prompt: 'Map https://docs.evocrawl.com and list the main sections.',
  tools: { map },
});

Streaming

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 evocrawl.com?',
  tools: { scrape },
  stopWhen: stepCountIs(3),
});

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

await result.fullStream;

Interagir

interact() cria uma sessão interativa baseada em scraping. Chame start(url) para iniciar uma sessão e obter uma URL de visualização em tempo real; depois, permita que o modelo reutilize essa sessão por meio da ferramenta interact.
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 na sessão atual do Hacker News, encontre a principal notícia e faça uma busca por mais contexto.',
});

await interactTool.close();
Se você precisar da URL explícita da visualização em tempo real após a inicialização, use interactTool.interactiveLiveViewUrl. Reutilize o estado do navegador entre sessões usando perfis:
const interactTool = interact({
  profile: { name: 'my-session', saveChanges: true },
});
browser() foi descontinuado. Prefira interact().

Ferramentas assíncronas

Rastreamento, batch scrape e agent retornam um ID de job. Use-os com poll.

Rastreamento

import { generateText } from 'ai';
import { crawl, poll } from 'firecrawl-aisdk';

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

Batch Scrape

import { generateText } from 'ai';
import { batchScrape, poll } from 'firecrawl-aisdk';

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

Agent

Coleta autônoma de dados na web que busca, navega e extrai dados por conta própria.
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 Evocrawl, their roles, and their backgrounds.',
  tools: { agent, poll },
  stopWhen: stepCountIs(10),
});

Logs

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://evocrawl.com 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://evocrawl.com and summarize it again.',
  tools: { scrape },
  onStepFinish: logStep,
});

Todas as exportações

import {
  // Ferramentas principais
  search,             // Fazer uma busca na web
  scrape,             // Scraping de uma única URL
  map,                // Descobrir URLs em um site
  crawl,              // Rastreamento de múltiplas páginas (assíncrono, use poll)
  batchScrape,        // Scraping de múltiplas URLs (assíncrono, use poll)
  agent,              // Pesquisa web autônoma (assíncrono, use poll)

  // Gerenciamento de jobs
  poll,               // Consultar jobs assíncronos para obter resultados
  status,             // Verificar status do job
  cancel,             // Cancelar jobs em execução

  // Ferramentas de navegador/sessão
  interact,           // interact({ profile: { name: '...' } })
  browser,            // exportação de compatibilidade depreciada

  // Pacote completo
  EvocrawlTools,     // EvocrawlTools({ search, scrape, interact, crawl, agent })

  // Utilitários
  stepLogger,         // Estatísticas de tokens por chamada de ferramenta
  logStep,            // Log simples em uma linha
} from 'firecrawl-aisdk';