Pular para o conteúdo principal
Integre o Firecrawl ao LangChain para criar aplicativos de IA alimentados por dados da web.

Configuração

npm install @langchain/openai @mendable/firecrawl-js 
Crie o arquivo .env:
FIRECRAWL_API_KEY=sua_chave_firecrawl
OPENAI_API_KEY=sua_chave_openai
Observação: Se estiver usando Node < 20, instale dotenv e adicione import 'dotenv/config' ao seu código.

Scrape + Chat

Este exemplo demonstra um fluxo de trabalho simples: extrair dados de um site e processar o conteúdo usando o LangChain.
import FirecrawlApp from '@mendable/firecrawl-js';
import { ChatOpenAI } from '@langchain/openai';
import { HumanMessage } from '@langchain/core/messages';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const chat = new ChatOpenAI({
    model: 'gpt-5-nano',
    apiKey: process.env.OPENAI_API_KEY
});

const scrapeResult = await firecrawl.scrape('https://firecrawl.dev', {
    formats: ['markdown']
});

console.log('Tamanho do conteúdo extraído:', scrapeResult.markdown?.length);

const response = await chat.invoke([
    new HumanMessage(`Resuma: ${scrapeResult.markdown}`)
]);

console.log('Resumo:', response.content);

Cadeias

Este exemplo mostra como criar uma cadeia do LangChain para processar e analisar conteúdo coletado.
import FirecrawlApp from '@mendable/firecrawl-js';
import { ChatOpenAI } from '@langchain/openai';
import { ChatPromptTemplate } from '@langchain/core/prompts';
import { StringOutputParser } from '@langchain/core/output_parsers';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });
const model = new ChatOpenAI({
    model: 'gpt-5-nano',
    apiKey: process.env.OPENAI_API_KEY
});

const scrapeResult = await firecrawl.scrape('https://stripe.com', {
    formats: ['markdown']
});

console.log('Tamanho do conteúdo extraído:', scrapeResult.markdown?.length);

// Criar cadeia de processamento
const prompt = ChatPromptTemplate.fromMessages([
    ['system', 'Você é um especialista em análise de sites de empresas.'],
    ['user', 'Extraia o nome da empresa e os principais produtos de: {content}']
]);

const chain = prompt.pipe(model).pipe(new StringOutputParser());

// Executar a cadeia
const result = await chain.invoke({
    content: scrapeResult.markdown
});

console.log('Resultado da cadeia:', result);

Chamada de ferramentas

Este exemplo mostra como usar o recurso de chamada de ferramentas do LangChain para permitir que o modelo decida quando fazer scraping de sites.
import FirecrawlApp from '@mendable/firecrawl-js';
import { ChatOpenAI } from '@langchain/openai';
import { DynamicStructuredTool } from '@langchain/core/tools';
import { z } from 'zod';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });

// Criar a ferramenta de scraping
const scrapeWebsiteTool = new DynamicStructuredTool({
    name: 'scrape_website',
    description: 'Extrair conteúdo de qualquer URL de site',
    schema: z.object({
        url: z.string().url().describe('A URL para extrair')
    }),
    func: async ({ url }) => {
        console.log('Extraindo:', url);
        const result = await firecrawl.scrape(url, {
            formats: ['markdown']
        });
        console.log('Prévia do conteúdo extraído:', result.markdown?.substring(0, 200) + '...');
        return result.markdown || 'Nenhum conteúdo extraído';
    }
});

const model = new ChatOpenAI({
    model: 'gpt-5-nano',
    apiKey: process.env.OPENAI_API_KEY
}).bindTools([scrapeWebsiteTool]);

const response = await model.invoke('O que é o Firecrawl? Acesse firecrawl.dev e me conte sobre ele.');

console.log('Resposta:', response.content);
console.log('Chamadas de ferramenta:', response.tool_calls);

Extração de Dados Estruturados

Este exemplo mostra como extrair dados estruturados usando o recurso de saída estruturada do LangChain.
import FirecrawlApp from '@mendable/firecrawl-js';
import { ChatOpenAI } from '@langchain/openai';
import { z } from 'zod';

const firecrawl = new FirecrawlApp({ apiKey: process.env.FIRECRAWL_API_KEY });

const scrapeResult = await firecrawl.scrape('https://stripe.com', {
    formats: ['markdown']
});

console.log('Tamanho do conteúdo raspado:', scrapeResult.markdown?.length);

const CompanyInfoSchema = z.object({
    name: z.string(),
    industry: z.string(),
    description: z.string(),
    products: z.array(z.string())
});

const model = new ChatOpenAI({
    model: 'gpt-5-nano',
    apiKey: process.env.OPENAI_API_KEY
}).withStructuredOutput(CompanyInfoSchema);

const companyInfo = await model.invoke([
    {
        role: 'system',
        content: 'Extraia informações da empresa do conteúdo do site.'
    },
    {
        role: 'user',
        content: `Extrair dados: ${scrapeResult.markdown}`
    }
]);

console.log('Informações da empresa extraídas:', companyInfo);
Para mais exemplos, confira a documentação do LangChain.