โค้ดแล็บนี้จะแสดงวิธีใช้ Genkit เพื่อติดตั้งใช้งานแอปที่ให้คุณแชทกับไฟล์ PDF
ข้อกำหนดเบื้องต้น
โค้ดแล็บนี้ถือว่าคุณคุ้นเคยกับการสร้างแอปพลิเคชันด้วย Node.js หากต้องการทำ Codelab นี้ให้เสร็จสมบูรณ์ โปรดตรวจสอบว่าสภาพแวดล้อมการพัฒนาของคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้
- Node.js v20 ขึ้นไป
- npm
สร้างโปรเจ็กต์ใหม่
สร้างโฟลเดอร์ใหม่ว่างเปล่า
mkdir chat-with-a-pdf cd chat-with-a-pdf
เริ่มต้นโปรเจ็กต์ TypeScript ใหม่
npm init -y
ติดตั้ง Genkit
ติดตั้งข้อกําหนดของ Genkit ต่อไปนี้เพื่อใช้ Genkit ในโปรเจ็กต์
genkit
มอบความสามารถหลักของ Genkit@genkit-ai/googleai
ให้สิทธิ์เข้าถึงโมเดล Gemini ของ AI ของ Google
npm install genkit @genkit-ai/googleai
กำหนดค่าคีย์ API ของโมเดล
ในคู่มือนี้ เราจะแสดงวิธีใช้ Gemini API ซึ่งมีระดับแบบไม่มีค่าใช้จ่ายที่ครอบคลุมและไม่จําเป็นต้องใช้บัตรเครดิตในการเริ่มต้นใช้งาน หากต้องการใช้ Gemini API คุณจะต้องมีคีย์ API หากยังไม่มี ให้สร้างคีย์ใน Google AI Studio
รับคีย์ API จาก Google AI Studio
หลังจากสร้างคีย์ API แล้ว ให้ตั้งค่าตัวแปร GOOGLE_GENAI_API_KEY
environment
เป็นคีย์ของคุณด้วยคําสั่งต่อไปนี้
export GOOGLE_GENAI_API_KEY=<your API key>
หมายเหตุ: แม้ว่าบทแนะนำนี้จะใช้ Gemini API จาก AI Studio แต่ Genkit รองรับผู้ให้บริการโมเดลที่หลากหลาย ซึ่งรวมถึง Gemini จาก Vertex AI, โมเดล Claude 3 ของ Anthropic และ Llama 3.1 ผ่าน Vertex AI Model Garden, โมเดลโอเพนซอร์สผ่าน Ollama และผู้ให้บริการที่ชุมชนสนับสนุน เช่น OpenAI และ Cohere
นําเข้าและเริ่มต้น Genkit
สร้างโฟลเดอร์ใหม่
src
และสร้างไฟล์ใหม่index.ts
ไว้ในโฟลเดอร์นั้น เพิ่มบรรทัดต่อไปนี้เพื่อนําเข้า Genkit และปลั๊กอิน AI ของ Googleimport {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
เพิ่มบรรทัดต่อไปนี้เพื่อกําหนดค่า Genkit และตั้งค่า Gemini 1.5 Flash เป็นโมเดลเริ่มต้น
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
เพิ่มเนื้อหาหลักของแอป
(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!
โหลดและแยกวิเคราะห์ไฟล์ PDF
ในขั้นตอนนี้ คุณจะเขียนโค้ดเพื่อโหลดและแยกวิเคราะห์ไฟล์ PDF
ติดตั้ง
pdf-parse
npm i pdf-parse
นําเข้าคลัง PDF ไปยังแอป
import pdf from 'pdf-parse'; import fs from 'fs';
อ่านชื่อไฟล์ PDF ที่ส่งผ่านจากบรรทัดคำสั่ง
// 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
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
ตั้งค่าพรอมต์
ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าพรอมต์
อนุญาตให้ผู้ใช้ระบุพรอมต์ที่กำหนดเองผ่านบรรทัดคำสั่ง หากไม่ได้ระบุพรอมต์ ให้ใช้พรอมต์เริ่มต้น
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
แทรกคำนำหน้าพรอมต์และข้อความทั้งหมดของไฟล์ PDF ลงในพรอมต์สำหรับโมเดล
const prompt = ` ${prefix} Context: ${data.text} `
ใช้แชทลูป
เริ่มแชทกับโมเดลโดยเรียกใช้เมธอด
chat
โดยส่งพรอมต์ (ซึ่งมีข้อความเต็มของไฟล์ PDF)const chat = ai.chat({ system: prompt })
นำเข้า
createInterface
ซึ่งจะช่วยให้คุณสร้าง UI แบบข้อความได้import {createInterface} from "node:readline/promises";
สร้างอินพุตข้อความทันที แล้วแสดงข้อความต่อผู้ใช้
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
อ่านอินพุตของผู้ใช้ แล้วส่งไปยังโมเดลโดยใช้
chat.send
ส่วนนี้ของแอปจะวนซ้ำจนกว่าผู้ใช้จะกด CTRL + Cwhile (true) { const userInput = await readline.question("> "); const {text} = await chat.send(userInput); console.log(text); }
เรียกใช้แอป
ตอนนี้คุณเรียกใช้แอปจากเทอร์มินัลได้แล้ว เปิดเทอร์มินัลในโฟลเดอร์รูทของโปรเจ็กต์ แล้วเรียกใช้คำสั่งต่อไปนี้
npx tsx src/index.ts path/to/some.pdf
จากนั้นคุณจึงเริ่มแชทกับไฟล์ PDF ได้