برنامه نویسی

اجرای یک پایگاه داده بردار در یک سیستم 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. در جستجوی اسناد مربوطه

وقتی کاربر سوالی می پرسد ، ما:

  1. پرس و جو را به یک تعبیه
  2. جستجو PGVector پایگاه داده برای نزدیکترین تطبیق تکه
  3. پس گرفتن نتایج برتر و از آنها به عنوان زمینه برای 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! دوست دارم تجربه شما را بشنوم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا