Chat dengan file PDF

Codelab ini menunjukkan cara menggunakan Genkit untuk menerapkan aplikasi yang memungkinkan Anda melakukan chat dengan file PDF.

Prasyarat

Codelab ini mengasumsikan bahwa Anda sudah terbiasa mem-build aplikasi dengan Node.js. Untuk menyelesaikan codelab ini, pastikan lingkungan pengembangan Anda memenuhi persyaratan berikut:

  • Node.js v20+
  • npm

Membuat project baru

  1. Buat folder kosong baru.

    mkdir chat-with-a-pdf
    cd chat-with-a-pdf
    
  2. Lakukan inisialisasi project TypeScript baru.

    npm init -y
    

Menginstal Genkit

Instal dependensi Genkit berikut untuk menggunakan Genkit dalam project Anda:

  • genkit menyediakan kemampuan inti Genkit.
  • @genkit-ai/googleai memberikan akses ke model Gemini Google AI.
npm install genkit @genkit-ai/googleai

Mengonfigurasi kunci API model

Untuk panduan ini, kami akan menunjukkan cara menggunakan Gemini API, yang menyediakan paket gratis yang cukup besar dan tidak memerlukan kartu kredit untuk memulai. Untuk menggunakan Gemini API, Anda memerlukan kunci API. Jika Anda belum memilikinya, buat kunci di Google AI Studio.

Mendapatkan kunci API dari Google AI Studio

Setelah membuat kunci API, tetapkan variabel lingkungan GOOGLE_GENAI_API_KEY ke kunci Anda dengan perintah berikut:

export GOOGLE_GENAI_API_KEY=<your API key>

Catatan: Meskipun tutorial ini menggunakan Gemini API dari AI Studio, Genkit mendukung berbagai penyedia model, termasuk: * Gemini dari Vertex AI * Model Claude 3 dari Anthropic dan Llama 3.1 melalui Vertex AI Model Garden * Model open source melalui Ollama * Penyedia yang didukung komunitas seperti OpenAI dan Cohere.

Mengimpor dan melakukan inisialisasi Genkit

  1. Buat folder baru src, dan di dalamnya, file baru index.ts. Tambahkan baris berikut untuk mengimpor Genkit dan plugin Google AI.

    import {gemini15Flash, googleAI} from '@genkit-ai/googleai';
    import {genkit} from 'genkit';
    
  2. Tambahkan baris berikut untuk mengonfigurasi Genkit dan menetapkan Gemini 1.5 Flash sebagai model default.

    const ai = genkit({
      plugins: [googleAI()],
      model: gemini15Flash,
    });
    
  3. Tambahkan isi utama aplikasi Anda.

    (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!
    

Memuat dan mengurai file PDF

Pada langkah ini, Anda akan menulis kode untuk memuat dan menguraikan file PDF.

  1. Instal pdf-parse.

    npm i pdf-parse
    
  2. Impor library PDF ke aplikasi Anda.

    import pdf from 'pdf-parse';
    import fs from 'fs';
    
  3. Baca nama file PDF yang diteruskan dari command line.

      // 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. Muat konten file PDF.

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

Menyiapkan dialog

Ikuti langkah-langkah berikut untuk menyiapkan perintah.

  1. Izinkan pengguna memberikan perintah kustom melalui command line. Jika tidak memberikan perintah, gunakan default.

    const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
    
  2. Masukkan awalan perintah dan teks lengkap file PDF ke dalam perintah untuk model.

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

Mengimplementasikan loop chat

  1. Mulai chat dengan model dengan memanggil metode chat, meneruskan perintah (yang menyertakan teks lengkap file PDF).

    const chat = ai.chat({ system: prompt })
    
  2. Impor createInterface; tindakan ini akan memungkinkan Anda mem-build UI berbasis teks.

    import {createInterface} from "node:readline/promises";
    
  3. Buat instance input teks, lalu tampilkan pesan kepada pengguna.

        const readline = createInterface(process.stdin, process.stdout);
        console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
    
  4. Baca input pengguna, lalu kirim ke model menggunakan chat.send. Bagian aplikasi ini akan berulang hingga pengguna menekan CTRL + C.

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

Menjalankan aplikasi

Sekarang Anda dapat menjalankan aplikasi dari terminal. Buka terminal di folder root project Anda, lalu jalankan perintah berikut:

npx tsx src/index.ts path/to/some.pdf

Kemudian, Anda dapat mulai melakukan chat dengan file PDF.