Mit einer PDF-Datei chatten

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

  1. Erstellen Sie einen neuen, leeren Ordner.

    mkdir chat-with-a-pdf
    cd chat-with-a-pdf
    
  2. 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

  1. Erstellen Sie einen neuen Ordner src und darin eine neue Datei index.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';
    
  2. 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,
    });
    
  3. 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.

  1. Installieren Sie pdf-parse.

    npm i pdf-parse
    
  2. Importieren Sie die PDF-Bibliothek in Ihre App.

    import pdf from 'pdf-parse';
    import fs from 'fs';
    
  3. 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);
      }
    
  4. 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:

  1. 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.";
    
  2. 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

  1. 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 })
    
  2. Importieren Sie createInterface, um eine textbasierte Benutzeroberfläche zu erstellen.

    import {createInterface} from "node:readline/promises";
    
  3. 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");
    
  4. 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.