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 });
// Créer l'outil de scraping
const scrapeWebsiteTool = new DynamicStructuredTool({
name: 'scrape_website',
description: 'Scraper le contenu de n'importe quelle URL de site web',
schema: z.object({
url: z.string().url().describe('L'URL à scraper')
}),
func: async ({ url }) => {
console.log('Scraping :', url);
const result = await firecrawl.scrape(url, {
formats: ['markdown']
});
console.log('Aperçu du contenu scrapé :', result.markdown?.substring(0, 200) + '...');
return result.markdown || 'Aucun contenu scrapé';
}
});
const model = new ChatOpenAI({
model: 'gpt-5-nano',
apiKey: process.env.OPENAI_API_KEY
}).bindTools([scrapeWebsiteTool]);
const response = await model.invoke('Qu'est-ce que Firecrawl ? Visitez firecrawl.dev et parlez-moi-en.');
console.log('Réponse :', response.content);
console.log('Appels d'outils :', response.tool_calls);