Cet atelier de programmation vous explique comment utiliser Genkit pour implémenter une application qui vous permet de discuter avec un fichier PDF.
Prérequis
Cet atelier de programmation suppose que vous savez créer des applications avec Node.js. Pour suivre cet atelier de programmation, assurez-vous que votre environnement de développement répond aux exigences suivantes:
- Node.js v20 ou version ultérieure
- npm
Créez un projet
Créez un dossier vide.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Initialisez un nouveau projet TypeScript.
npm init -y
Installer Genkit
Installez les dépendances Genkit suivantes pour utiliser Genkit dans votre projet :
genkit
fournit les fonctionnalités de base de Genkit.@genkit-ai/googleai
donne accès aux modèles Gemini de l'IA de Google.
npm install genkit @genkit-ai/googleai
Configurer la clé API de votre modèle
Dans ce guide, nous allons vous montrer comment utiliser l'API Gemini, qui propose un niveau sans frais généreux et ne nécessite pas de carte de crédit pour commencer. Pour utiliser l'API Gemini, vous avez besoin d'une clé API. Si vous n'en avez pas encore, créez-en une dans Google AI Studio.
Obtenir une clé API depuis Google AI Studio
Une fois que vous avez créé une clé API, définissez la variable d'environnement GOOGLE_GENAI_API_KEY
sur votre clé à l'aide de la commande suivante:
export GOOGLE_GENAI_API_KEY=<your API key>
Remarque:Bien que ce tutoriel utilise l'API Gemini d'AI Studio, Genkit est compatible avec un large éventail de fournisseurs de modèles, y compris : * Gemini de Vertex AI * Les modèles Claude 3 d'Anthropic et Llama 3.1 via le Vertex AI Model Garden * Les modèles Open Source via Ollama * Les fournisseurs soutenus par la communauté tels qu'OpenAI et Cohere.
Importer et initialiser Genkit
Créez un dossier
src
, puis un fichierindex.ts
à l'intérieur. Ajoutez les lignes suivantes pour importer Genkit et le plug-in Google AI.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Ajoutez les lignes suivantes pour configurer Genkit et définir Gemini 1.5 Flash comme modèle par défaut.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Ajoutez le corps principal de votre application.
(async () => { try { // 1: get command line arguments // 2: load PDF file // 3: construct prompt // 4: start chat // 5: chat loop } catch (error) { console.error("Error parsing PDF or interacting with Genkit:", error); } })(); // <-- don't forget the trailing parentheses to call the function!
Charger et analyser un fichier PDF
Dans cette étape, vous allez écrire du code pour charger et analyser un fichier PDF.
Installez
pdf-parse
.npm i pdf-parse
Importez la bibliothèque PDF dans votre application.
import pdf from 'pdf-parse'; import fs from 'fs';
Lisez le nom de fichier PDF transmis à partir de la ligne de commande.
// 1: get command line arguments const filename = process.argv[2]; if (!filename) { console.error("Please provide a filename as a command line argument."); process.exit(1); }
Chargez le contenu du fichier PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Configurer l'invite
Pour configurer l'invite, procédez comme suit :
Autorisez l'utilisateur à fournir une invite personnalisée via la ligne de commande. S'ils ne fournissent pas d'invite, utilisez une valeur par défaut.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Injectez le préfixe de l'invite et le texte complet du fichier PDF dans l'invite du modèle.
const prompt = ` ${prefix} Context: ${data.text} `
Implémenter la boucle de chat
Démarrez la discussion avec le modèle en appelant la méthode
chat
, en transmettant la requête (qui inclut le texte complet du fichier PDF).const chat = ai.chat({ system: prompt })
Importez
createInterface
. Vous pourrez ainsi créer une UI basée sur du texte.import {createInterface} from "node:readline/promises";
Instanciez une entrée de texte, puis affichez un message à l'utilisateur.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Lisez la saisie de l'utilisateur, puis envoyez-la au modèle à l'aide de
chat.send
. Cette partie de l'application s'exécute en boucle jusqu'à ce que l'utilisateur appuie sur CTRL+C.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Exécuter l'application
Vous pouvez maintenant exécuter l'application à partir de votre terminal. Ouvrez le terminal dans le dossier racine de votre projet, puis exécutez la commande suivante:
npx tsx src/index.ts path/to/some.pdf
Vous pouvez alors commencer à discuter avec le fichier PDF.