Lớp học lập trình này minh hoạ cách tạo một ứng dụng trò chuyện cho phép người dùng trích xuất thông tin từ tài liệu PDF bằng ngôn ngữ tự nhiên.
- Thiết lập dự án
- Nhập các phần phụ thuộc bắt buộc
- Định cấu hình Genkit và mô hình mặc định
- Tải và phân tích cú pháp tệp PDF
- Thiết lập lời nhắc
- Triển khai giao diện người dùng
- Triển khai vòng lặp trò chuyện
- Chạy ứng dụng
Điều kiện tiên quyết
Trước khi bắt đầu, bạn nên thiết lập các điều kiện tiên quyết sau:
Các bước triển khai
Sau khi thiết lập các phần phụ thuộc, bạn có thể tạo dự án.
1. Thiết lập dự án
Tạo cấu trúc thư mục và tệp để lưu trữ mã nguồn.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf && \ touch src/index.ts
Khởi chạy một dự án TypeScript mới.
$ npm init -y
Cài đặt mô-đun pdf-parse.
$ npm i pdf-parse && npm i -D @types/pdf-parse
Cài đặt các phần phụ thuộc Genkit sau đây để sử dụng Genkit trong dự án:
$ npm i genkit @genkit-ai/googleai
genkit
cung cấp các tính năng cốt lõi của Genkit.@genkit-ai/googleai
cung cấp quyền truy cập vào các mô hình Gemini AI của Google.
Lấy và định cấu hình khoá API mô hình
Để sử dụng API Gemini mà lớp học lập trình này sử dụng, trước tiên, bạn phải định cấu hình khoá API. Nếu bạn chưa có, hãy tạo khoá trong Google AI Studio.
Gemini API cung cấp một cấp miễn phí hào phóng và không yêu cầu thẻ tín dụng để bắt đầu.
Sau khi tạo khoá API, hãy đặt biến môi trường
GOOGLE_GENAI_API_KEY
thành khoá của bạn bằng lệnh sau:$ export GOOGLE_GENAI_API_KEY=<your API key>
2. Nhập các phần phụ thuộc bắt buộc
Trong tệp index.ts
mà bạn đã tạo, hãy thêm các dòng sau để nhập các phần phụ thuộc cần thiết cho dự án này:
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";
- Dòng đầu tiên nhập mô hình
gemini20Flash
và trình bổ trợgoogleAI
từ gói@genkit-ai/googleai
, cho phép truy cập vào các mô hình Gemini của Google. - Hai dòng tiếp theo nhập thư viện
pdf-parse
để phân tích cú pháp tệp PDF và mô-đunfs
để thao tác với hệ thống tệp. - Dòng cuối cùng nhập hàm
createInterface
từ mô-đunnode:readline/promises
. Mô-đun này dùng để tạo giao diện dòng lệnh cho hoạt động tương tác của người dùng.
3. Định cấu hình Genkit và mô hình mặc định
Thêm các dòng sau để định cấu hình Genkit và đặt Gemini 2.0 Flash làm mô hình mặc định.
const ai = genkit({
plugins: [googleAI()],
model: gemini20Flash,
});
Sau đó, bạn có thể thêm một khung cho mã và xử lý lỗi.
(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. Tải và phân tích cú pháp tệp PDF
Thêm mã để đọc tên tệp PDF được truyền vào từ dòng lệnh.
// 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); }
Thêm mã để tải nội dung của tệp PDF.
// Step 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. Thiết lập lời nhắc
Thêm mã để thiết lập lời nhắc:
// 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}
`;
- Nội dung khai báo
const
đầu tiên xác định một lời nhắc mặc định nếu người dùng không truyền một lời nhắc của riêng họ qua dòng lệnh. - Phần khai báo
const
thứ hai nội suy tiền tố lời nhắc và toàn bộ văn bản của tệp PDF vào lời nhắc cho mô hình.
6. Triển khai giao diện người dùng
Thêm mã sau để bắt đầu cuộc trò chuyện và triển khai giao diện người dùng:
// 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");
Nội dung khai báo const
đầu tiên bắt đầu cuộc trò chuyện với mô hình bằng cách gọi phương thức chat
, truyền lời nhắc (bao gồm toàn bộ văn bản của tệp PDF). Phần còn lại của mã tạo bản sao
một phương thức nhập văn bản, sau đó hiển thị thông báo cho người dùng.
7. Triển khai vòng lặp trò chuyện
Trong Bước 5, hãy thêm mã để nhận dữ liệu đầu vào của người dùng và gửi dữ liệu đầu vào đó đến mô hình bằng chat.send
. Phần này của ứng dụng lặp lại cho đến khi người dùng nhấn tổ hợp phím CTRL + C.
// Step 5: chat loop
while (true) {
const userInput = await readline.question("> ");
const { text } = await chat.send(userInput);
console.log(text);
}
8. Chạy ứng dụng
Để chạy ứng dụng, hãy mở thiết bị đầu cuối trong thư mục gốc của dự án, sau đó chạy lệnh sau:
npx tsx src/index.ts path/to/some.pdf
Sau đó, bạn có thể bắt đầu trò chuyện bằng tệp PDF.