Codelab ini menunjukkan cara mem-build aplikasi percakapan yang memungkinkan pengguna mengekstrak informasi dari dokumen PDF menggunakan bahasa alami.
- Menyiapkan project
- Mengimpor dependensi yang diperlukan
- Mengonfigurasi Genkit dan model default
- Memuat dan mengurai file PDF
- Menyiapkan perintah
- Mengimplementasikan UI
- Menerapkan loop chat
- 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
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
Lakukan inisialisasi project TypeScript baru.
$ npm init -y
Instal modul pdf-parse.
$ npm i pdf-parse && npm i -D @types/pdf-parse
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.
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 plugingoogleAI
dari paket@genkit-ai/googleai
, yang memungkinkan akses ke model Gemini Google. - Dua baris berikutnya mengimpor library
pdf-parse
untuk mengurai file PDF dan modulfs
untuk operasi sistem file. - Baris terakhir mengimpor fungsi
createInterface
dari modulnode: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
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); }
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.