Cet atelier de programmation explique comment créer une application conversationnelle qui permet aux utilisateurs d'extraire des informations à partir de documents PDF à l'aide du langage naturel.
- Configurer votre projet
- Importer les dépendances requises
- Configurer Genkit et le modèle par défaut
- Charger et analyser le fichier PDF
- Configurer l'invite
- Implémenter l'UI
- Implémenter la boucle de chat
- Exécuter l'application
Prérequis
Avant de commencer, vous devez configurer les conditions préalables suivantes:
Procédure d'implémentation
Une fois vos dépendances configurées, vous pouvez compiler le projet.
1. Configurer votre projet
Créez une structure de répertoires et un fichier pour contenir votre code source.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf && \ touch src/index.ts
Initialisez un nouveau projet TypeScript.
$ npm init -y
Installez le module pdf-parse.
$ npm i pdf-parse && npm i -D @types/pdf-parse
Installez les dépendances Genkit suivantes pour utiliser Genkit dans votre projet :
$ npm i genkit @genkit-ai/googleai
genkit
fournit les fonctionnalités de base de Genkit.@genkit-ai/googleai
donne accès aux modèles Gemini de l'IA de Google.
Obtenir et configurer la clé API de votre modèle
Pour utiliser l'API Gemini, utilisée dans cet atelier de programmation, vous devez d'abord configurer une clé API. Si vous n'en avez pas encore, créez une clé dans Google AI Studio.
L'API Gemini propose un niveau sans frais généreux et ne nécessite pas de carte de crédit pour commencer.
Une fois que vous avez créé votre 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>
2. Importer les dépendances requises
Dans le fichier index.ts
que vous avez créé, ajoutez les lignes suivantes pour importer les dépendances requises pour ce projet:
import { gemini20Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit/beta'; // chat is a beta feature
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
- La première ligne importe le modèle
gemini20Flash
et le plug-ingoogleAI
à partir du package@genkit-ai/googleai
, ce qui permet d'accéder aux modèles Gemini de Google. - Les deux lignes suivantes importent la bibliothèque
pdf-parse
pour l'analyse des fichiers PDF et le modulefs
pour les opérations de système de fichiers. - La dernière ligne importe la fonction
createInterface
à partir du modulenode:readline/promises
, qui permet de créer une interface de ligne de commande pour l'interaction utilisateur.
3. Configurer Genkit et le modèle par défaut
Ajoutez les lignes suivantes pour configurer Genkit et définir Gemini 2.0 Flash comme modèle par défaut.
const ai = genkit({
plugins: [googleAI()],
model: gemini20Flash,
});
Vous pouvez ensuite ajouter un squelette pour le code et la gestion des erreurs.
(async () => {
try {
// Step 1: get command line arguments
// Step 2: load PDF file
// Step 3: construct prompt
// Step 4: start chat
// Step 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!
4. Charger et analyser le fichier PDF
Ajoutez du code pour lire le nom de fichier PDF transmis à partir de la ligne de commande.
// Step 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); }
Ajoutez du code pour charger le contenu du fichier PDF.
// Step 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Configurer l'invite
Ajoutez du code pour configurer l'invite:
// Step 3: construct prompt
const prefix = process.argv[3] || "Sample prompt: Answer the user's questions about the contents of this PDF file.";
const prompt = `
${prefix}
Context:
${text}
`;
- La première déclaration
const
définit une invite par défaut si l'utilisateur n'en transmet pas une à partir de la ligne de commande. - La deuxième déclaration
const
interpole le préfixe de requête et le texte complet du fichier PDF dans la requête du modèle.
6. Implémenter l'UI
Ajoutez le code suivant pour démarrer le chat et implémenter l'UI:
// Step 4: start chat
const chat = ai.chat({ system: prompt });
const readline = createInterface(process.stdin, process.stdout);
console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
La première déclaration const
lance la discussion avec le modèle en appelant la méthode chat
, en transmettant l'invite (qui inclut le texte complet du fichier PDF). Le reste du code instancie une saisie de texte, puis affiche un message à l'utilisateur.
7. Implémenter la boucle de chat
À l'étape 5, ajoutez du code pour recevoir l'entrée utilisateur et l'envoyer 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.
// Step 5: chat loop
while (true) {
const userInput = await readline.question("> ");
const { text } = await chat.send(userInput);
console.log(text);
}
8. Exécuter l'application
Pour exécuter l'application, 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.