Chat dengan file PDF

Codelab ini menunjukkan cara mem-build aplikasi percakapan yang memungkinkan pengguna mengekstrak informasi dari dokumen PDF menggunakan bahasa alami.

  1. Menyiapkan project
  2. Mengimpor dependensi yang diperlukan
  3. Mengonfigurasi Genkit dan model default
  4. Memuat dan mengurai file PDF
  5. Menyiapkan perintah
  6. Mengimplementasikan UI
  7. Menerapkan loop chat
  8. Menjalankan aplikasi

Prasyarat

Sebelum memulai pekerjaan, Anda harus menyiapkan prasyarat berikut:

Langkah-Langkah Penerapan

Setelah menyiapkan dependensi, Anda dapat mem-build project.

1. Menyiapkan project

  1. Buat struktur direktori dan file untuk menyimpan kode sumber Anda.

    $ mkdir -p chat-with-a-pdf/src && \
    cd chat-with-a-pdf && \
    touch src/index.ts
    
  2. Lakukan inisialisasi project TypeScript baru.

    $ npm init -y
    
  3. Instal modul pdf-parse.

    $ npm i pdf-parse && npm i -D @types/pdf-parse
    
  4. Instal dependensi Genkit berikut untuk menggunakan Genkit dalam project Anda:

    $ npm i genkit @genkit-ai/googleai
    
    • genkit menyediakan kemampuan inti Genkit.
    • @genkit-ai/googleai memberikan akses ke model Gemini AI Google.
  5. Mendapatkan dan mengonfigurasi kunci API model

    Untuk menggunakan Gemini API, yang digunakan codelab ini, Anda harus mengonfigurasi kunci API terlebih dahulu. Jika Anda belum memilikinya, buat kunci di Google AI Studio.

    Gemini API menyediakan paket gratis yang melimpah dan tidak memerlukan kartu kredit untuk memulai.

    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>
    

2. Mengimpor dependensi yang diperlukan

Dalam file index.ts yang Anda buat, tambahkan baris berikut untuk mengimpor dependensi yang diperlukan untuk project ini:

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";
  • Baris pertama mengimpor model gemini20Flash dan plugin googleAI dari paket @genkit-ai/googleai, yang memungkinkan akses ke model Gemini Google.
  • Dua baris berikutnya mengimpor library pdf-parse untuk mengurai file PDF dan modul fs untuk operasi sistem file.
  • Baris terakhir mengimpor fungsi createInterface dari modul node:readline/promises, yang digunakan untuk membuat antarmuka command line untuk interaksi pengguna.

3. Mengonfigurasi Genkit dan model default

Tambahkan baris berikut untuk mengonfigurasi Genkit dan menetapkan Gemini 2.0 Flash sebagai model default.

const ai = genkit({
  plugins: [googleAI()],
  model: gemini20Flash,
});

Kemudian, Anda dapat menambahkan kerangka untuk kode dan penanganan error.

(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. Memuat dan mengurai PDF

  1. Tambahkan kode untuk membaca nama file PDF yang diteruskan dari command line.

        // 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);
        }
    
  2. Tambahkan kode untuk memuat konten file PDF.

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

5. Menyiapkan dialog

Tambahkan kode untuk menyiapkan perintah:

    // 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}
    `;
  • Deklarasi const pertama menentukan perintah default jika pengguna tidak meneruskan salah satu perintahnya dari command line.
  • Deklarasi const kedua menginterpolasi awalan perintah dan teks lengkap file PDF ke dalam perintah untuk model.

6. Mengimplementasikan UI

Tambahkan kode berikut untuk memulai chat dan menerapkan UI:

    // 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");

Deklarasi const pertama memulai chat dengan model dengan memanggil metode chat, meneruskan perintah (yang menyertakan teks lengkap file PDF). Kode lainnya membuat instance input teks, lalu menampilkan pesan kepada pengguna.

7. Mengimplementasikan loop chat

Pada Langkah 5, tambahkan kode untuk menerima input pengguna dan mengirim input tersebut ke model menggunakan chat.send. Bagian aplikasi ini akan berulang hingga pengguna menekan CTRL + C.

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

8. Menjalankan aplikasi

Untuk menjalankan aplikasi, 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.