In diesem Codelab erfahren Sie, wie Sie mit Genkit eine App implementieren, mit der Sie mit einer PDF-Datei chatten können.
Vorbereitung
In diesem Codelab wird davon ausgegangen, dass Sie mit dem Erstellen von Anwendungen mit Node.js vertraut sind. Damit Sie dieses Codelab ausführen können, muss Ihre Entwicklungsumgebung die folgenden Anforderungen erfüllen:
- Node.js v20 und höher
- npm
Erstellen Sie ein neues Projekt
Erstellen Sie einen neuen, leeren Ordner.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Initiieren Sie ein neues TypeScript-Projekt.
npm init -y
Genkit installieren
Installieren Sie die folgenden Genkit-Abhängigkeiten, um Genkit in Ihrem Projekt zu verwenden:
genkit
stellt die wichtigsten Funktionen von Genkit bereit.@genkit-ai/googleai
bietet Zugriff auf die Google AI-Gemini-Modelle.
npm install genkit @genkit-ai/googleai
API-Schlüssel des Modells konfigurieren
In dieser Anleitung zeigen wir Ihnen, wie Sie die Gemini API verwenden. Diese bietet eine großzügige kostenlose Stufe, sodass Sie für den Einstieg keine Kreditkarte brauchen. Zur Verwendung der Gemini API benötigen Sie einen API-Schlüssel. Wenn Sie noch keinen haben, erstellen Sie einen in Google AI Studio.
API-Schlüssel von Google AI Studio abrufen
Nachdem Sie den API-Schlüssel erstellt haben, legen Sie die Umgebungsvariable GOOGLE_GENAI_API_KEY
mit dem folgenden Befehl auf Ihren Schlüssel fest:
export GOOGLE_GENAI_API_KEY=<your API key>
Hinweis: In dieser Anleitung wird die Gemini API von AI Studio verwendet. Genkit unterstützt jedoch eine Vielzahl von Modellanbietern, darunter: * Gemini von Vertex AI * Claude 3-Modelle von Anthropic und Llama 3.1 über den Vertex AI Model Garden * Open-Source-Modelle über Ollama * Community-unterstützte Anbieter wie OpenAI und Cohere.
Genkit importieren und initialisieren
Erstellen Sie einen neuen Ordner
src
und darin eine neue Dateiindex.ts
. Fügen Sie die folgenden Zeilen hinzu, um Genkit und das Google AI-Plug-in zu importieren.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Fügen Sie die folgenden Zeilen hinzu, um Genkit zu konfigurieren und Gemini 1.5 Flash als Standardmodell festzulegen.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Fügen Sie den Hauptteil Ihrer App hinzu.
(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!
PDF-Datei laden und parsen
In diesem Schritt schreiben Sie Code zum Laden und Parsen einer PDF-Datei.
Installieren Sie
pdf-parse
.npm i pdf-parse
Importieren Sie die PDF-Bibliothek in Ihre App.
import pdf from 'pdf-parse'; import fs from 'fs';
Lies den PDF-Dateinamen, der über die Befehlszeile übergeben wurde.
// 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); }
Laden Sie den Inhalt der PDF-Datei.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Prompt einrichten
So richten Sie den Prompt ein:
Dem Nutzer die Möglichkeit geben, über die Befehlszeile einen benutzerdefinierten Prompt anzugeben Wenn kein Prompt angegeben wird, verwenden Sie einen Standardprompt.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Fügen Sie das Prompt-Präfix und den vollständigen Text der PDF-Datei in den Prompt für das Modell ein.
const prompt = ` ${prefix} Context: ${data.text} `
Chat-Loop implementieren
Starten Sie den Chat mit dem Modell, indem Sie die Methode
chat
aufrufen und den Prompt übergeben, der den vollständigen Text der PDF-Datei enthält.const chat = ai.chat({ system: prompt })
Importieren Sie
createInterface
, um eine textbasierte Benutzeroberfläche zu erstellen.import {createInterface} from "node:readline/promises";
Erstellen Sie eine Texteingabe und zeigen Sie dem Nutzer dann eine Nachricht an.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Lies die Eingabe des Nutzers und sende sie mit
chat.send
an das Modell. Dieser Teil der App wird in einer Schleife ausgeführt, bis der Nutzer STRG + C drückt.while (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
Anwendung ausführen
Sie können die App jetzt über Ihr Terminal ausführen. Öffnen Sie das Terminal im Stammverzeichnis Ihres Projekts und führen Sie den folgenden Befehl aus:
npx tsx src/index.ts path/to/some.pdf
Sie können dann mit der PDF-Datei chatten.