اجرای یک پایگاه داده بردار در یک سیستم RAG برای یک Chatbot HelpDesk با PGVECTOR

مقدمه
همانطور که chatbots با قدرت AI تکامل می یابد ، نسل بازیابی-اوت (RAG) به یک رویکرد مهم برای بهبود آنها تبدیل شده است دقت و آگاهی متنیبشر در این مقاله ، من نحوه اجرای خود را طی می کنم PGVector، الف پسوند postgresql برای جستجوی بردار، در یک پارچه مبتنی بر Helpdesk Chatbotبشر
هنگام برخورد با یک چالش اسناد طولانی راهنما اطمینان از بازیابی chatbot است مهمترین بخش متن به جای تکیه بر پاسخ های عمومی. من همچنین نحوه پوشش استراتژی های chunking به تجزیه محتوای طولانی برای بازده بهتر بازیابی کمک کنید.
چرا از RAG با PGVECTOR برای HelpDesk Chatbot استفاده می کنید؟
مدل های سنتی chatbot فقط به دانش از پیش آموزش دیده، ساختن آنها محدود در پاسخ به سؤالات پویا. بوها chatbot مبتنی بر پارچه قوطی:
✅ بازیابی محتوای HelpDesk در زمان واقعی پویا
✅ دقت پاسخ را بهبود بخشید با استفاده از دانش خارجی
✅ توهمات را به حداقل برسانید با ایجاد پاسخ در داده های واقعی
چرا PGVECTOR؟
در حالی که بسیاری از پایگاه داده های بردار وجود دارند (به عنوان مثال ، Faiss ، Pinecone ، Weaviate) ، PGVector یک انتخاب عالی است زیرا:
- ✅ این به صورت بومی با postgresql کار می کند، ادغام آن در پایگاه داده های موجود آسان است
- ✅ از جستجوی تقریبی نزدیکترین همسایه (ANN) پشتیبانی می کند، بهبود سرعت بازیابی
- ✅ خوب مقیاس می کند، به خصوص هنگامی که با استراتژی های نمایه سازی ترکیب می شود
پیاده سازی: RAG با PGVECTOR برای HelpDesk Chatbot
1. تنظیم PGVECTOR در PostgreSQL
اول ، فعال کردن pgvector
پسوند در postgresql:
CREATE EXTENSION vector;
سپس ، یک جدول برای ذخیره اسناد HelpDesk با تعبیه بردار ایجاد کنید:
CREATE TABLE helpdesk_articles (
id SERIAL PRIMARY KEY,
title TEXT,
content TEXT,
embedding vector(1536) -- OpenAI's ada-002 embedding size
);
ترتیب. تولید تعبیه برای مقالات Helpdesk
من استفاده کردم اوپای text-embedding-ada-002
مدل برای تولید تعبیه وکتور برای هر سند.
import { OpenAI } from "openai";
import { Client } from "pg";
const openai = new OpenAI({ apiKey: "YOUR_OPENAI_API_KEY" });
const db = new Client({ connectionString: "YOUR_DATABASE_URL" });
async function generateEmbedding(text: string) {
const response = await openai.embeddings.create({
model: "text-embedding-ada-002",
input: text,
});
return response.data[0].embedding;
}
async function storeEmbedding(id: number, title: string, content: string) {
await db.connect();
const embedding = await generateEmbedding(content);
await db.query(
"INSERT INTO helpdesk_articles (id, title, content, embedding) VALUES ($1, $2, $3, $4)",
[id, title, content, embedding]
);
await db.end();
}
این فروشگاه ها بازنمودهای بردار مقالات HelpDesk در PostgreSQL ، امکان جستجوی شباهت سریع را فراهم می کند.
3. برخورد با محتوای طولانی HelpDesk
اسناد طولانی یک چالش را ایجاد می کند: بازیابی کل سند ناکارآمد استبشر در عوض ، ما تقسیم محتوای طولانی به کوچکتر ، بیشتر تکه های قابل بازیابیبشر
استراتژی chunking
من استفاده کردم تقسیم متن بازگشتی با مرزهای جمله به زمینه حفظبشر
function splitText(text: string, chunkSize: number = 512): string[] {
const sentences = text.match(/[^.!?]+[.!?]+/g) || [text];
let chunks: string[] = [];
let currentChunk = "";
for (const sentence of sentences) {
if (currentChunk.length + sentence.length > chunkSize) {
chunks.push(currentChunk.trim());
currentChunk = sentence;
} else {
currentChunk += " " + sentence;
}
}
if (currentChunk) chunks.push(currentChunk.trim());
return chunks;
}
هر تکه است جدا شده به طور جداگانه در PGVector جدول ، بازیابی دقیق تربشر
4. در جستجوی اسناد مربوطه
وقتی کاربر سوالی می پرسد ، ما:
- پرس و جو را به یک تعبیه
- جستجو PGVector پایگاه داده برای نزدیکترین تطبیق تکه
- پس گرفتن نتایج برتر و از آنها به عنوان زمینه برای GPT استفاده کنید
پرس و جو SQL برای جستجوی شباهت بردار
SELECT id, title, content, embedding <=> $1 AS distance
FROM helpdesk_articles
ORDER BY distance
LIMIT 3;
در Typescript:
async function searchHelpdesk(query: string) {
await db.connect();
const queryEmbedding = await generateEmbedding(query);
const result = await db.query(
"SELECT title, content FROM helpdesk_articles ORDER BY embedding <=> $1 LIMIT 3",
[queryEmbedding]
);
await db.end();
return result.rows;
}
این بازیابی بیشتر مقالات راهنمای راهنما، که سپس برای تولید پاسخ به GPT تغذیه می شوند.
5. خط لوله Rag: تولید پاسخ نهایی
هنگامی که ما دارای مقالات مهمترین راهنما هستیم ، آنها را تصویب می کنیم زمینه به مدل GPT Openai:
async function generateResponse(userQuery: string) {
const relevantDocs = await searchHelpdesk(userQuery);
const context = relevantDocs.map(doc => `${doc.title}: ${doc.content}`).join("\n\n");
const response = await openai.chat.completions.create({
model: "gpt-4",
messages: [
{ role: "system", content: "You are a helpful support agent." },
{ role: "user", content: `User query: ${userQuery}` },
{ role: "assistant", content: `Relevant articles:\n${context}` }
],
});
return response.choices[0].message.content;
}
گردش کار نهایی: RAG + PGVECTOR
1⃣ کاربر سوالی می پرسد (به عنوان مثال ، “چگونه رمز ورود خود را دوباره تنظیم کنم؟”)
2 پرس و جو به جاسازی تبدیل می شود
3⃣ PGVECTOR برای مشابه ترین بخش های مقاله HelpDesk جستجو می کند
4⃣ محتوای مربوطه بازیابی می شود و به GPT منتقل می شود
5⃣ GPT پاسخی را بر اساس دانش در زمان واقعی ایجاد می کند
پاسخ مثال
ورودی کاربر:
“چگونه رمز ورود خود را دوباره تنظیم کنم؟”
تطبیق بخش مقاله راهنما:
“برای تنظیم مجدد رمز عبور خود ، به تنظیمات بروید و روی” رمز عبور فراموش شده “کلیک کنید. دستورالعمل ها را برای دریافت ایمیل تنظیم مجدد دنبال کنید.”
پاسخ chatbot:
“شما می توانید با مراجعه به تنظیمات و انتخاب” رمز ورود فراموش شده “رمز عبور خود را مجدداً تنظیم کنید. با دستورالعمل های بیشتر یک ایمیل دریافت خواهید کرد. “
مزایای استفاده از pgveector
✅ ادغام بدون یکپارچه postgresql (نیازی به یک بردار جداگانه DB نیست)
✅ بازیابی کارآمد دانش مربوطه
✅ با استفاده از chunking ، محتوای بزرگ راهنما را کنترل می کند
✅ جستجوی شباهت بردار سریع با فهرست بندی Ann
پیشرفت های آینده
🔹 جستجوی ترکیبی: ترکیب کنید جستجوی بردار + جستجوی کلمات کلیدی برای دقت بهتر
🔹 تعبیه های تنظیم دقیق: یک مدل تعبیه کننده خاص دامنه را آموزش دهید
🔹 به روزرسانی های زمان واقعی: هنگام تغییر محتوای HelpDesk ، تعبیه ها را به طور خودکار به روز کنید
پایان
با استفاده از PGVECTOR در یک سیستم RAG به طور قابل توجهی توانایی HelpDesk Chatbot را در ارائه بهبود بخشید پاسخ های دقیق ، متنی و در زمان واقعیبشر از طرف تقسیم اسناد طولانی و استفاده جستجوی شباهت بردار، ما اطمینان دادیم که chatbot بازیابی می شود مهمترین دانش برای هر پرس و جو
این رویکرد عالی است جایگزین برای Faiss یا Pinecone، به خصوص اگر از قبل استفاده می کنید پس ازبشر
💬 اگر پیاده سازی کرده اید به من اطلاع دهید PGVECTOR برای RAG! دوست دارم تجربه شما را بشنوم.