Vous pouvez utiliser Genkit pour créer une application qui permet à son utilisateur de discuter avec un fichier PDF. Pour ce faire, procédez comme suit :
- 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
Ce guide explique comment effectuer chacune de ces tâches.
Dépendances
Avant de commencer, vous devez configurer les dépendances suivantes:
Tâches
Une fois vos dépendances configurées, vous pouvez créer le projet lui-même.
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/src && \ touch index.ts
Initialisez un nouveau projet TypeScript.
$ npm init -y
Installez le module pdf-parse:
$ npm i pdf-parse
Installez les dépendances Genkit suivantes pour utiliser Genkit dans votre projet :
$ npm install 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.
5. 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>
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 et Llama 3.1 d'Anthropic via le jardin de modèles Vertex AI, ainsi que les plug-ins de la communauté.
- Modèles Open Source via Ollama
- Fournisseurs soutenus par la communauté tels qu'OpenAI et Cohere.
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 { gemini15Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit';
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
- Les deux premières lignes importent Genkit et le plug-in Google AI.
- Les deux dernières lignes sont destinées à l'analyseur PDF.
- La cinquième ligne est destinée à implémenter votre UI.
3. Configurer Genkit et le modèle par défaut
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,
});
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
Sous l'étape 1, ajoutez du code pour lire le nom de fichier PDF transmis à partir de la ligne de commande.
const filename = process.argv[2]; if (!filename) { console.error("Please provide a filename as a command line argument."); process.exit(1); }
Sous l'étape 2, ajoutez du code pour charger le contenu du fichier PDF.
let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Configurer l'invite
Sous l'étape 3, ajoutez du code pour configurer l'invite:
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
Sous l'étape 4, ajoutez le code suivant pour démarrer le chat et implémenter l'UI:
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.
while (true) {
const userInput = await readline.question("> ");
const {text} = await chat.send(userInput);
console.log(text);
}
8. Exécuter l'application
Exécutez l'application depuis 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.