โค้ดแล็บนี้แสดงวิธีสร้างแอปพลิเคชันการสนทนาที่อนุญาตให้ผู้ใช้ดึงข้อมูลจากเอกสาร PDF โดยใช้ภาษาธรรมชาติ
- สร้างโปรเจ็กต์
- นําเข้าไลบรารีที่ต้องระบุ
- กําหนดค่า Genkit และโมเดลเริ่มต้น
- โหลดและแยกวิเคราะห์ไฟล์ PDF
- ตั้งค่าพรอมต์
- ติดตั้งใช้งาน UI
- ใช้แชทลูป
- เรียกใช้แอป
ข้อกำหนดเบื้องต้น
ก่อนเริ่มทํางาน คุณควรตั้งค่าข้อกําหนดเบื้องต้นต่อไปนี้
ขั้นตอนการติดตั้งใช้งาน
หลังจากตั้งค่าทรัพยากร คุณจะสร้างโปรเจ็กต์ได้
1. สร้างโปรเจ็กต์
สร้างโครงสร้างไดเรกทอรีและไฟล์สำหรับเก็บซอร์สโค้ด
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf && \ touch src/index.ts
เริ่มต้นโปรเจ็กต์ TypeScript ใหม่
$ npm init -y
ติดตั้งโมดูล pdf-parse
$ npm i pdf-parse && npm i -D @types/pdf-parse
ติดตั้งข้อกําหนดของ Genkit ต่อไปนี้เพื่อใช้ Genkit ในโปรเจ็กต์
$ npm i genkit @genkit-ai/googleai
genkit
มอบความสามารถหลักของ Genkit@genkit-ai/googleai
ให้สิทธิ์เข้าถึงโมเดล AI Gemini ของ Google
รับและกำหนดค่าคีย์ API ของโมเดล
หากต้องการใช้ Gemini API ซึ่งโค้ดแล็บนี้ใช้ คุณต้องกำหนดค่าคีย์ API ก่อน หากยังไม่มี ให้สร้างใน Google AI Studio
Gemini API มีระดับแบบไม่มีค่าใช้จ่ายที่ครอบคลุมและไม่ต้องใช้บัตรเครดิตเพื่อเริ่มต้นใช้งาน
หลังจากสร้างคีย์ API แล้ว ให้ตั้งค่าตัวแปรสภาพแวดล้อม
GOOGLE_GENAI_API_KEY
เป็นคีย์ด้วยคำสั่งต่อไปนี้$ export GOOGLE_GENAI_API_KEY=<your API key>
2. นําเข้าไลบรารีที่ต้องระบุ
ในไฟล์ index.ts
ที่คุณสร้างขึ้น ให้เพิ่มบรรทัดต่อไปนี้เพื่อนำเข้าข้อกำหนดที่จำเป็นสำหรับโปรเจ็กต์นี้
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";
- บรรทัดแรกจะนําเข้าโมเดล
gemini20Flash
และปลั๊กอินgoogleAI
จากแพ็กเกจ@genkit-ai/googleai
ซึ่งช่วยให้เข้าถึงโมเดล Gemini ของ Google ได้ - 2 บรรทัดถัดไปจะนําเข้าไลบรารี
pdf-parse
สําหรับการแยกวิเคราะห์ไฟล์ PDF และโมดูลfs
สําหรับการดําเนินการของระบบไฟล์ - บรรทัดสุดท้ายจะนําเข้าฟังก์ชัน
createInterface
จากข้อบังคับnode:readline/promises
ซึ่งใช้สร้างอินเทอร์เฟซบรรทัดคําสั่งสําหรับการโต้ตอบของผู้ใช้
3. กำหนดค่า Genkit และโมเดลเริ่มต้น
เพิ่มบรรทัดต่อไปนี้เพื่อกําหนดค่า Genkit และตั้งค่า Gemini 2.0 Flash เป็นโมเดลเริ่มต้น
const ai = genkit({
plugins: [googleAI()],
model: gemini20Flash,
});
จากนั้นคุณสามารถเพิ่มโครงร่างสําหรับโค้ดและการจัดการข้อผิดพลาด
(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. โหลดและแยกวิเคราะห์ PDF
เพิ่มโค้ดเพื่ออ่านชื่อไฟล์ PDF ที่ส่งผ่านจากบรรทัดคำสั่ง
// 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); }
เพิ่มโค้ดเพื่อโหลดเนื้อหาของไฟล์ PDF
// Step 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
5. ตั้งค่าพรอมต์
เพิ่มโค้ดเพื่อตั้งค่าข้อความแจ้ง
// 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}
`;
- การประกาศ
const
รายการแรกจะกำหนดพรอมต์เริ่มต้นในกรณีที่ผู้ใช้ไม่ได้ส่งพรอมต์ของตนเองจากบรรทัดคำสั่ง - การประกาศ
const
รายการที่ 2 จะแทรกคํานำหน้าพรอมต์และข้อความทั้งหมดของไฟล์ PDF ลงในพรอมต์สําหรับโมเดล
6. ติดตั้งใช้งาน UI
เพิ่มโค้ดต่อไปนี้เพื่อเริ่มแชทและติดตั้งใช้งาน 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");
การประกาศ const
รายการแรกจะเริ่มแชทกับโมเดลโดยเรียกใช้เมธอด chat
โดยส่งพรอมต์ (ซึ่งรวมถึงข้อความแบบเต็มของไฟล์ PDF) โค้ดที่เหลือจะสร้างอินสแตนซ์ของป้อนข้อความ แล้วแสดงข้อความต่อผู้ใช้
7. ใช้แชทลูป
ในขั้นตอนที่ 5 ให้เพิ่มโค้ดเพื่อรับอินพุตของผู้ใช้และส่งอินพุตนั้นไปยังโมเดลโดยใช้ chat.send
ส่วนนี้ของแอปจะวนซ้ำจนกว่าผู้ใช้จะกด CTRL + C
// Step 5: chat loop
while (true) {
const userInput = await readline.question("> ");
const { text } = await chat.send(userInput);
console.log(text);
}
8. เรียกใช้แอป
หากต้องการเรียกใช้แอป ให้เปิดเทอร์มินัลในโฟลเดอร์รูทของโปรเจ็กต์ แล้วเรียกใช้คำสั่งต่อไปนี้
npx tsx src/index.ts path/to/some.pdf
จากนั้นคุณจึงเริ่มแชทกับไฟล์ PDF ได้