Za pomocą Genkit możesz utworzyć aplikację, która umożliwia użytkownikowi prowadzenie czatu z plikiem PDF. W tym celu należy wykonać następujące czynności:
- Konfigurowanie projektu
- Importowanie wymaganych zależności
- Konfigurowanie Genkit i modelu domyślnego
- Wczytywanie i analizowanie pliku PDF
- Konfigurowanie promptu
- Implementacja interfejsu użytkownika
- Wdrażanie pętli czatu
- Uruchamianie aplikacji
Z tego poradnika dowiesz się, jak wykonać te czynności.
Zależności
Przed rozpoczęciem pracy musisz skonfigurować te zależności:
Lista zadań
Po skonfigurowaniu zależności możesz skompilować projekt.
1. Konfigurowanie projektu
Utwórz strukturę katalogów i plik, w których będziesz przechowywać kod źródłowy.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf/src && \ touch index.ts
Zainicjuj nowy projekt TypeScript.
$ npm init -y
Zainstaluj moduł pdf-parse:
$ npm i pdf-parse
Aby używać Genkit w projekcie, zainstaluj te zależności Genkit:
$ npm install genkit @genkit-ai/googleai
genkit
zapewnia podstawowe funkcje Genkit.@genkit-ai/googleai
zapewnia dostęp do modeli Google AI Gemini.
5. Pobieranie i konfigurowanie klucza interfejsu API modelu
-
Aby korzystać z interfejsu Gemini API, którego używa ten warsztat, musisz najpierw skonfigurować klucz API. Jeśli nie masz jeszcze klucza, utwórz go w Google AI Studio.
Gemini API oferuje obszerny bezpłatny poziom dostępu i nie wymaga karty kredytowej, aby zacząć korzystać z usługi.
Po utworzeniu klucza interfejsu API ustaw zmienną środowiskową
GOOGLE_GENAI_API_KEY`
na ten klucz za pomocą tego polecenia:
$ export GOOGLE_GENAI_API_KEY=<your API key>
Uwaga: chociaż w tym samouczku używamy Gemini API z AI Studio, Genkit obsługuje wiele różnych dostawców modeli, w tym:
- Gemini z Vertex AI.
- modele Claude 3 i Llama 3.1 firmy Anthropic dostępne w bazie modeli Vertex AI, a także wtyczki społecznościowe.
- modele open source za pomocą Ollama.
- Dostawcy wspierani przez społeczność, tacy jak OpenAI i Cohere.
2. Importowanie wymaganych zależności
W utworzonym pliku index.ts
dodaj te wiersze, aby zaimportować zależności wymagane w tym projekcie:
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";
- Pierwsze 2 wiersze importują Genkit i wtyczkę Google AI.
- Drugie 2 wiersze są przeznaczone dla analizatora PDF.
- Piąty wiersz służy do implementacji interfejsu użytkownika.
3. Konfigurowanie Genkit i modelu domyślnego
Dodaj te wiersze, aby skonfigurować Genkit i ustawić Gemini 1.5 Flash jako domyślny model.
const ai = genkit({
plugins: [googleAI()],
model: gemini15Flash,
});
Następnie możesz dodać szkielet kodu i obsługi błędów.
(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. Wczytaj i przeanalizuj plik PDF
W kroku 1 dodaj kod, który odczytuje nazwę pliku PDF przekazaną z wiersza poleceń.
const filename = process.argv[2]; if (!filename) { console.error("Please provide a filename as a command line argument."); process.exit(1); }
W kroku 2 dodaj kod, który wczyta zawartość pliku PDF.
let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Konfigurowanie prompta
W kroku 3 dodaj kod, aby skonfigurować 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}
`
- Pierwsza deklaracja
const
definiuje domyślne prompt, jeśli użytkownik nie poda własnego prompta w wierszu poleceń. - Druga deklaracja
const
interpoluje prefiks prompta i pełny tekst pliku PDF w prompt modelu.
6. Implementacja interfejsu użytkownika
W kroku 4 dodaj ten kod, aby rozpocząć czat i wdrożyć interfejs użytkownika:
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");
Pierwsza deklaracja const
uruchamia czat z modelem przez wywołanie metody chat
, przekazując prompt (który zawiera pełny tekst pliku PDF). Pozostała część kodu tworzy instancję wejścia tekstowego, a następnie wyświetla wiadomość użytkownikowi.
7. Zaimplementuj pętlę czatu
W kroku 5 dodaj kod, który będzie odbierał dane wejściowe od użytkownika i przesyłał je do modelu za pomocą funkcji chat.send
. Ta część aplikacji działa w pętli, dopóki użytkownik nie naciśnie CTRL + C.
while (true) {
const userInput = await readline.question("> ");
const {text} = await chat.send(userInput);
console.log(text);
}
8. Uruchamianie aplikacji
Uruchom aplikację w terminalu. Otwórz terminal w folderze głównym projektu, a potem uruchom to polecenie:
npx tsx src/index.ts path/to/some.pdf
Możesz wtedy rozpocząć czat z pliku PDF.