Bu codelab'de, kullanıcıların doğal dil kullanarak PDF dokümanlarından bilgi edinebilmesini sağlayan bir sohbet uygulamasının nasıl oluşturulacağı gösterilmektedir.
- Projenizi oluşturun
- Zorunlu bağımlılıkları içe aktarma
- Genkit'i ve varsayılan modeli yapılandırma
- PDF dosyasını yükleme ve ayrıştırma
- İsteği ayarlama
- Kullanıcı arayüzünü uygulama
- Sohbet döngüsünü uygulama
- Uygulamayı çalıştırma
Ön koşullar
Çalışmaya başlamadan önce aşağıdaki ön koşulları ayarlamanız gerekir:
Uygulama Adımları
Bağımlılıklarınızı ayarladıktan sonra projeyi derleyebilirsiniz.
1. Projenizi oluşturma
Kaynak kodunuzu barındıracak bir dizin yapısı ve dosya oluşturun.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf && \ touch src/index.ts
Yeni bir TypeScript projesini başlatın.
$ npm init -y
pdf-parse modülünü yükleyin.
$ npm i pdf-parse && npm i -D @types/pdf-parse
Genkit'i projenizde kullanmak için aşağıdaki Genkit bağımlılıklarını yükleyin:
$ npm i genkit @genkit-ai/googleai
genkit
, Genkit'in temel özelliklerini sağlar.@genkit-ai/googleai
, Google AI Gemini modellerine erişim sağlar.
Model API anahtarınızı alma ve yapılandırma
Bu kod laboratuvarının kullandığı Gemini API'yi kullanmak için öncelikle bir API anahtarı yapılandırmanız gerekir. Henüz yoksa Google AI Studio'da anahtar oluşturun.
Gemini API, cömert bir ücretsiz katman sunar ve başlamak için kredi kartı gerektirmez.
API anahtarınızı oluşturduktan sonra aşağıdaki komutu kullanarak
GOOGLE_GENAI_API_KEY
ortam değişkenini anahtarınıza ayarlayın:$ export GOOGLE_GENAI_API_KEY=<your API key>
2. Gerekli bağımlılıkları içe aktarma
Oluşturduğunuz index.ts
dosyasına, bu proje için gereken bağımlılıkları içe aktarmak üzere aşağıdaki satırları ekleyin:
import { gemini20Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit/beta'; // chat is a beta feature
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
- İlk satır,
gemini20Flash
modelini vegoogleAI
eklentisini@genkit-ai/googleai
paketinden içe aktararak Google'ın Gemini modellerine erişimi sağlar. - Sonraki iki satır, PDF dosyalarını ayrıştırmak için
pdf-parse
kitaplığını ve dosya sistemi işlemleri içinfs
modülünü içe aktarır. - Son satırda, kullanıcı etkileşimi için komut satırı arayüzü oluşturmak amacıyla kullanılan
node:readline/promises
modülündencreateInterface
işlevi içe aktarılır.
3. Genkit'i ve varsayılan modeli yapılandırma
Genkit'i yapılandırmak ve Gemini 2.0 Flash'i varsayılan model olarak ayarlamak için aşağıdaki satırları ekleyin.
const ai = genkit({
plugins: [googleAI()],
model: gemini20Flash,
});
Ardından kod ve hata işleme için bir iskelet ekleyebilirsiniz.
(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. PDF'yi yükleme ve ayrıştırma
Komut satırından iletilen PDF dosya adını okuyacak kod ekleyin.
// Step 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); }
PDF dosyasının içeriğini yüklemek için kod ekleyin.
// Step 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. İstemi ayarlama
İstemi ayarlamak için kod ekleyin:
// Step 3: construct 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}
`;
- İlk
const
beyanı, kullanıcı komut satırından kendi istemini iletmezse varsayılan bir istem tanımlar. - İkinci
const
beyanı, istem ön ekini ve PDF dosyasının tam metnini modelin isteminde araya yerleştirir.
6. Kullanıcı arayüzünü uygulama
Sohbeti başlatmak ve kullanıcı arayüzünü uygulamak için aşağıdaki kodu ekleyin:
// Step 4: start chat
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");
İlk const
beyanı, chat
yöntemini çağırarak istemi (PDF dosyasının tam metnini içeren) ileterek modelle sohbeti başlatır. Kodun geri kalanı bir metin girişi oluşturur ve ardından kullanıcıya bir mesaj gösterir.
7. Sohbet döngüsünü uygulama
5. adımda, kullanıcı girişini alacak ve chat.send
kullanarak bu girişi modele gönderecek kod ekleyin. Uygulamanın bu kısmı, kullanıcı CTRL + C tuşlarına basana kadar döngüde çalışır.
// Step 5: chat loop
while (true) {
const userInput = await readline.question("> ");
const { text } = await chat.send(userInput);
console.log(text);
}
8. Uygulamayı çalıştırma
Uygulamayı çalıştırmak için projenizin kök klasöründe terminali açıp aşağıdaki komutu çalıştırın:
npx tsx src/index.ts path/to/some.pdf
Ardından PDF dosyasıyla sohbet etmeye başlayabilirsiniz.