Ten warsztat programistyczny pokazuje, jak za pomocą Genkit wdrożyć aplikację, która umożliwia prowadzenie czatu z pliku PDF.
Wymagania wstępne
W tym ćwiczeniu zakładamy, że wiesz, jak tworzyć aplikacje za pomocą Node.js. Aby ukończyć to ćwiczenie, sprawdź, czy środowisko programistyczne spełnia te wymagania:
- Node.js w wersji 20 lub nowszej
- npm
Utwórz nowy projekt
Utwórz nowy pusty folder.
mkdir chat-with-a-pdf cd chat-with-a-pdf
Zainicjuj nowy projekt TypeScript.
npm init -y
Instalowanie Genkit
Aby używać Genkit w projekcie, zainstaluj te zależności Genkit:
genkit
zapewnia podstawowe funkcje Genkit.@genkit-ai/googleai
zapewnia dostęp do modeli Google AI Gemini.
npm install genkit @genkit-ai/googleai
Konfigurowanie klucza interfejsu API modelu
W tym przewodniku pokażemy, jak korzystać z interfejsu Gemini API, który oferuje obszerny bezpłatny poziom i nie wymaga karty kredytowej, aby zacząć. Aby korzystać z interfejsu Gemini API, musisz mieć klucz interfejsu API. Jeśli jeszcze go nie masz, utwórz klucz w Google AI Studio.
Uzyskiwanie klucza interfejsu API z Google AI Studio
Po utworzeniu klucza interfejsu API ustaw zmienną środowiskową GOOGLE_GENAI_API_KEY
na klucz za pomocą tego polecenia:
export GOOGLE_GENAI_API_KEY=<your API key>
Uwaga: ten samouczek używa interfejsu Gemini API z AI Studio, ale Genkit obsługuje też wiele innych dostawców modeli, takich jak: * Gemini z Vertex AI * modele Claude 3 firmy Anthropic i Llama 3.1 za pomocą Vertex AI Model Garden * modele open source za pomocą Ollama * dostawcy obsługiwani przez społeczność, tacy jak OpenAI i Cohere.
Importowanie i inicjowanie Genkit
Utwórz nowy folder
src
i w nim nowy plikindex.ts
. Aby zaimportować Genkit i wtyczkę Google AI, dodaj te wiersze:import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
Dodaj te wiersze, aby skonfigurować Genkit i ustawić Gemini 1.5 Flash jako domyślny model.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
Dodaj główną część aplikacji.
(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!
Ładowanie i analizowanie pliku PDF
W tym kroku napiszesz kod do wczytywania i analizowania pliku PDF.
Zainstaluj aplikację
pdf-parse
.npm i pdf-parse
Zaimportuj bibliotekę PDF do aplikacji.
import pdf from 'pdf-parse'; import fs from 'fs';
odczytuje nazwę pliku PDF przekazaną z wiersza poleceń;
// 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); }
Wczytaj zawartość pliku PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
Konfigurowanie prompta
Aby skonfigurować prompt, wykonaj te czynności.
Zezwalanie użytkownikowi na wyświetlanie niestandardowego prompta w wierszu poleceń. Jeśli nie podadzą prompta, użyj prompta domyślnego.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
Wprowadź prefiks promptu i pełny tekst pliku PDF do promptu dla modelu.
const prompt = ` ${prefix} Context: ${data.text} `
Zaimplementuj pętlę czatu
Rozpocznij czat z modelem, wywołując metodę
chat
, przekazując prompt (który zawiera pełny tekst pliku PDF).const chat = ai.chat({ system: prompt })
Importuj
createInterface
, aby utworzyć interfejs tekstowy.import {createInterface} from "node:readline/promises";
Utwórz instancję pola tekstowego, a potem wyświetl wiadomość użytkownikowi.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
Przeczytaj dane wejściowe użytkownika, a potem wyślij je do modelu za pomocą funkcji
chat.send
. Ten fragment aplikacji będzie się powtarzać, 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); }
Uruchamianie aplikacji
Teraz możesz uruchomić 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.