PDF dosyasıyla sohbet etme

Bu kod laboratuvarında, PDF dosyasıyla sohbet etmenize olanak tanıyan bir uygulama uygulamak için Genkit'in nasıl kullanılacağı gösterilmektedir.

Ön koşullar

Bu kod laboratuvarında, Node.js ile uygulama oluşturma hakkında bilgi sahibi olduğunuz varsayılmaktadır. Bu codelab'i tamamlamak için geliştirme ortamınızın aşağıdaki koşulları karşıladığından emin olun:

  • Node.js 20 ve sonraki sürümler
  • npm

Yeni proje oluştur

  1. Yeni bir boş klasör oluşturun.

    mkdir chat-with-a-pdf
    cd chat-with-a-pdf
    
  2. Yeni bir TypeScript projesini başlatın.

    npm init -y
    

Genkit'i yükleme

Genkit'i projenizde kullanmak için aşağıdaki Genkit bağımlılıklarını yükleyin:

  • genkit, Genkit'in temel özelliklerini sağlar.
  • @genkit-ai/googleai, Google AI Gemini modellerine erişim sağlar.
npm install genkit @genkit-ai/googleai

Model API anahtarınızı yapılandırma

Bu kılavuzda, cömert bir ücretsiz katman sunan ve başlamak için kredi kartı gerektirmeyen Gemini API'yi nasıl kullanacağınızı göstereceğiz. Gemini API'yi kullanmak için bir API anahtarına ihtiyacınız vardır. Henüz bir anahtarınız yoksa Google AI Studio'da anahtar oluşturun.

Google AI Studio'dan API anahtarı alma

API anahtarı 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>

Not: Bu eğitimde AI Studio'nun Gemini API'si kullanılsa da Genkit aşağıdakiler dahil olmak üzere çok çeşitli model sağlayıcıları destekler: * Vertex AI'ın Gemini * Vertex AI Model Garden aracılığıyla Anthropic'in Claude 3 modelleri ve Llama 3.1 * Ollama aracılığıyla açık kaynak modeller * OpenAI ve Cohere gibi topluluk destekli sağlayıcılar.

Genkit'i içe aktarma ve başlatma

  1. Yeni bir klasör src ve bu klasörün içinde yeni bir dosya index.ts oluşturun. Genkit ve Google Yapay Zeka eklentisini içe aktarmak için aşağıdaki satırları ekleyin.

    import {gemini15Flash, googleAI} from '@genkit-ai/googleai';
    import {genkit} from 'genkit';
    
  2. Genkit'i yapılandırmak ve Gemini 1.5 Flash'ı varsayılan model olarak ayarlamak için aşağıdaki satırları ekleyin.

    const ai = genkit({
      plugins: [googleAI()],
      model: gemini15Flash,
    });
    
  3. Uygulamanızın ana gövdesini ekleyin.

    (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 dosyası yükleme ve ayrıştırma

Bu adımda, bir PDF dosyasını yükleyip ayrıştıracak kod yazacaksınız.

  1. pdf-parse'ı yükleyin.

    npm i pdf-parse
    
  2. PDF kitaplığını uygulamanıza aktarın.

    import pdf from 'pdf-parse';
    import fs from 'fs';
    
  3. Komut satırından iletilen PDF dosya adını okuyun.

      // 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. PDF dosyasının içeriğini yükleyin.

      // 2: load PDF file
      let dataBuffer = fs.readFileSync(filename);
      const { text } = await pdf(dataBuffer);
    

İstemi ayarlama

İstem ayarlamak için aşağıdaki adımları uygulayın.

  1. Kullanıcının komut satırı üzerinden özel bir istem sağlamasına izin verin. İstem sağlamazsa varsayılan bir değer kullanın.

    const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
    
  2. İstem ön ekini ve PDF dosyasının tam metnini modelin istem alanına ekleyin.

        const prompt = `
          ${prefix}
          Context:
          ${data.text}
        `
    

Sohbet döngüsünü uygulama

  1. İstem (PDF dosyasının tam metnini içeren) ileterek chat yöntemini çağırarak modelle sohbeti başlatın.

    const chat = ai.chat({ system: prompt })
    
  2. createInterface dosyasını içe aktarın. Bu sayede metne dayalı bir kullanıcı arayüzü oluşturabilirsiniz.

    import {createInterface} from "node:readline/promises";
    
  3. Bir metin girişi oluşturun ve ardından kullanıcıya bir mesaj gösterin.

        const readline = createInterface(process.stdin, process.stdout);
        console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
    
  4. Kullanıcının girişini okuyup chat.send kullanarak modele gönderin. Uygulamanın bu kısmı, kullanıcı CTRL + C tuşlarına basana kadar döngüde devam eder.

        while (true) {
          const userInput = await readline.question("> ");
          const {text} = await chat.send(userInput);
          console.log(text);
        }
    

Uygulamayı çalıştırma

Artık uygulamayı terminalinizden çalıştırabilirsiniz. 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.