Questo codelab mostra come utilizzare Genkit per implementare un'app che ti consente di chattare con un file PDF.
Prerequisiti
Questo codelab presuppone che tu abbia familiarità con la creazione di applicazioni con Node.js. Per completare questo codelab, assicurati che il tuo ambiente di sviluppo soddisfi i seguenti requisiti:
- Node.js versione 20 e successive
- npm
Crea un nuovo progetto
Crea una nuova cartella vuota.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Inizializza un nuovo progetto TypeScript.
npm init -y
Installa Genkit
Installa le seguenti dipendenze Genkit per utilizzare Genkit nel tuo progetto:
genkit
fornisce le funzionalità di base di Genkit.@genkit-ai/googleai
consente di accedere ai modelli Gemini di Google AI.
npm install genkit @genkit-ai/googleai
Configura la chiave API del modello
In questa guida ti mostreremo come utilizzare l'API Gemini, che offre un generoso livello senza costi e non richiede una carta di credito per iniziare. Per utilizzare l'API Gemini, devi avere una chiave API. Se non ne hai già una, crea una chiave in Google AI Studio.
Ottenere una chiave API da Google AI Studio
Dopo aver creato una chiave API, imposta la variabile di ambiente GOOGLE_GENAI_API_KEY
sulla chiave con il comando seguente:
export GOOGLE_GENAI_API_KEY=<your API key>
Nota: anche se questo tutorial utilizza l'API Gemini di AI Studio, Genkit supporta una vasta gamma di fornitori di modelli, tra cui: * Gemini di Vertex AI * I modelli Claude 3 di Anthropic e Llama 3.1 tramite Vertex AI Model Garden * Modelli open source tramite Ollama * Fornitori supportati dalla community come OpenAI e Cohere.
Importa e inizializza Genkit
Crea una nuova cartella
src
e al suo interno un nuovo fileindex.ts
. Aggiungi le seguenti righe per importare Genkit e il plug-in Google AI.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Aggiungi le seguenti righe per configurare Genkit e impostare Gemini 1.5 Flash come modello predefinito.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Aggiungi il corpo principale dell'app.
(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!
Caricare e analizzare un file PDF
In questo passaggio scriverai il codice per caricare e analizzare un file PDF.
Installa
pdf-parse
.npm i pdf-parse
Importa la raccolta di PDF nella tua app.
import pdf from 'pdf-parse'; import fs from 'fs';
Leggi il nome del file PDF passato dalla riga di comando.
// 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); }
Carica i contenuti del file PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Configurare il prompt
Per configurare il prompt, segui questi passaggi.
Consenti all'utente di fornire un prompt personalizzato tramite la riga di comando. Se non forniscono un prompt, utilizza un valore predefinito.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Inserisci il prefisso del prompt e il testo completo del file PDF nel prompt per il modello.
const prompt = ` ${prefix} Context: ${data.text} `
Implementare il loop di chat
Avvia la chat con il modello chiamando il metodo
chat
, passando il prompt (che include il testo completo del file PDF).const chat = ai.chat({ system: prompt })
Importa
createInterface
per creare un'interfaccia utente basata su testo.import {createInterface} from "node:readline/promises";
Crea un'istanza di un input di testo, quindi mostra un messaggio all'utente.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Leggi l'input dell'utente, quindi invialo al modello utilizzando
chat.send
. Questa parte dell'app verrà ripetuta fino a quando l'utente non preme CTRL + C.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Esegui l'app
Ora puoi eseguire l'app dal terminale. Apri il terminale nella directory principale del progetto, quindi esegui il seguente comando:
npx tsx src/index.ts path/to/some.pdf
A questo punto puoi iniziare a chattare con il file PDF.