สร้าง chatgpt chatbot สำหรับเว็บไซต์ของคุณโดยใช้ Langchain, Supabase, typeScript, OpenAI และ Next.js. Langchain เป็นเฟรมเวิร์กที่ทำให้แอพ AI/LLM ปรับขนาดได้ง่ายขึ้น Supabase เป็นฐานข้อมูล Postgres โอเพนซอร์สที่สามารถจัดเก็บการฝังตัวโดยใช้ส่วนขยายเวกเตอร์ PG
วิดีโอการสอน
ติดต่อผ่าน Twitter หากคุณต้องการความช่วยเหลือ
คู่มือภาพของ repo และการสอนนี้อยู่ในโฟลเดอร์ visual guide
git clone [github https url]
pnpm install
.env ของคุณ.env.local.example เป็น .env ไฟล์ .env ของคุณควรมีลักษณะเช่นนี้: OPENAI_API_KEY=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=
.env ของคุณ ในโฟลเดอร์ config ให้แทนที่ URL ในอาร์เรย์ด้วย URL เว็บไซต์ของคุณ (สคริปต์ต้องใช้ URL มากกว่าหนึ่ง URL)
ใน utils/custom_web_loader.ts ภายในฟังก์ชั่น load แทนที่ค่าของ title date และ content ด้วยองค์ประกอบ CSS ของข้อความที่คุณต้องการแยกจากหน้าเว็บที่กำหนด คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับวิธีใช้ Cheerio ได้ที่นี่
คุณสามารถเพิ่มองค์ประกอบที่กำหนดเองของคุณไปยังข้อมูลเมตาเพื่อตอบสนองความต้องการของคุณโปรดทราบว่ารูปแบบโหลดเดอร์เริ่มต้นตามที่คาดว่าจะมีอย่างน้อยสตริงสำหรับ pageContent และ metadata ที่มีคุณสมบัติ source เป็นค่าที่ส่งคืน:
async load(): Promise<Document[]>{
const $ = await this.scrape();
const text = $("body").text();
const metadata = { source: this.webPath };
return [new Document({ pageContent: text, metadata })];
}
pageContent และ metadata จะถูกเก็บไว้ในตารางฐานข้อมูล Supabase ของคุณในภายหลัง
schema.sql ในตัวแก้ไข Supabase SQL ของคุณdocuments มีอยู่ในฐานข้อมูลเช่นเดียวกับฟังก์ชัน match_documents ในการเรียกใช้สคริปต์การขูดและฝังใน scripts/scrape-embed.ts เพียงแค่เรียกใช้:
npm run scrape-embed
สคริปต์นี้จะเยี่ยมชม URL ทั้งหมดที่ระบุไว้ในโฟลเดอร์ config และแยกข้อมูลที่คุณระบุในไฟล์ custom_web_loader.ts
จากนั้นจะใช้การฝังตัวของ OpenAI ( text-embedding-ada-002 ) เพื่อแปลงข้อมูลที่ถูกคัดลอกมาเป็นเวกเตอร์
เมื่อคุณตรวจสอบว่าการเพิ่มและเนื้อหาได้รับการเพิ่มลงในตาราง supabase ของคุณสำเร็จคุณสามารถเรียกใช้แอพ npm run dev และพิมพ์คำถามเพื่อถามเว็บไซต์ของคุณ
ส่วนหน้าของ repo นี้ได้รับแรงบันดาลใจจาก langchain-chat-nextjs
repo นี้ใช้แนวทางแนวคิดเชิงลึกจากเว็บไซต์ของผู้เชี่ยวชาญด้านการผลิต Thomas Frank