برنامه نویسی

بهینه سازی chatbot HelpDesk مبتنی بر پارچه: بهبود دقت با PGVECTOR

مقدمه

در پست قبلی خود ، نحوه اجرای آن را پوشش دادم PGVector در الف سیستم Rag (بازیابی نسل و اوج) برای Helpdesk Chatbotبشر در حالی که سیستم خوب عمل می کرد ، مسائل مربوط به دقت ظهور کرد:

  • برخی از مقالات بازیابی شده HelpDesk نبودند کاملاً مرتبط
  • چت بابات گاهی اوقات متن پرس و جو را نادرست تفسیر کرد
  • پاسخهای طولانی از محتوای بازیابی شده GPT اشتباه گرفته شده است

برای رفع این موارد ، من بهینه کردم روند بازیابیبا کیفیت تعبیه شده بهبود یافتهوت نسل پاسخ GPT تصفیه شدهبشر در این پست ، من از طریق بهینه سازی هایی که دقت مدل را بهبود بخشیده استبشر


بهینه سازی های کلیدی برای دقت بالاتر

برای بهبود دقت ، من روی آن تمرکز کردم سه منطقه کلیدی:

1⃣ پیش پردازش پرس و جو پیشرفته: تمیز کردن و اصلاح نمایش داده های کاربر

2 استراتژی های بازیابی بهتر: بهبود نتایج جستجوی pgveector

3⃣ تولید پاسخ پالایش: به GPT یک زمینه ساختاری داده می شود


1. افزایش پردازش پرس و جو

نمایش داده شدگان کاربر اغلب مبهم ، بدون ساختار یا خیلی کوتاهبشر به عنوان مثال:

  • ورودی کاربر: “شماره VPN” → خیلی مبهم
  • پرس و جو اصلاح شده بهتر: “چگونه می توان مشکلات اتصال VPN را در ویندوز رفع کرد؟”

پیشرفت در پیش پردازش پرس و جو

گسترش مترادف: گسترش نمایش داده های کاربر با مترادف مربوطه

عادی سازی: پایین تر ، حذف شخصیت های خاص

گسترش سریع: اصلاح پرس و جوهای کوتاه در سوالات کامل

مثال: گسترش پرس و جو با استفاده از NLP

برای بهبود کیفیت پرس و جو ، من استفاده کردم پردازش زبان طبیعی (NLP) تکنیک های گسترش مبتنی بر مترادف با استفاده از کلمهبشر این کمک می کند دامنه جستجو را گسترده کنید و بازیابی اسناد مرتبط تر در یک سیستم مبتنی بر پارچه.

⚠ ویژگی آزمایشی: این API پایدار نیست و ممکن است تغییرات مهمی داشته باشد. از آن با احتیاط در محیط های تولید استفاده کنید.

اجرای بهینه شده Typescript

من استفاده کردم node.js + typcript با natural کتابخانه ، که یک رابط WordNet را ارائه می دهد.

import natural from "natural";

const wordnet = new natural.WordNet();

async function expandQuery(query: string): Promise<string> {
  const words = query.split(" ");
  const expandedWords: string[] = [];

  for (const word of words) {
    const synonyms = await getSynonyms(word);
    expandedWords.push(synonyms.length > 0 ? synonyms[0] : word); // Use first synonym if available
  }

  return expandedWords.join(" ");
}

function getSynonyms(word: string): Promise<string[]> {
  return new Promise((resolve) => {
    wordnet.lookup(word, (results) => {
      if (results.length > 0) {
        resolve(results[0].synonyms);
      } else {
        resolve([]);
      }
    });
  });
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چگونه کار می کند

  1. شکاف پرس و جو کاربر به کلمات فردی.
  2. مترادف واکشی از کلمه برای هر کلمه
  3. کلمات را جایگزین می کند با اولین مترادف موجود (در صورت یافتن).
  4. بازسازی پرس و جو اصلاح شده و آن را برمی گرداند.

نمونه خروجی

🔹 پرس و جو کاربر: "VPN problem"

🔹 پرس و جو گسترده: "VPN issue error troubleshooting"

از طرف در حال گسترش نمایش داده شد، chatbot می تواند اسناد مربوط به HelpDesk را بازیابی کنید، بهبود دقت بازیابی در الف سیستم پارچه ای با قدرت PGVECTORبشر 🚀


2. بهبود استراتژی های بازیابی در PGVECTOR

بعد از پیش پردازش نمایش داده شد ، چالش بعدی این بود بهبود دقت بازیابیبشر

شماره: نتایج بی ربط

در جستجوی PGVECTOR گاهی اوقات مقالات مرتبط با هم برگشته بود، کاهش دقت.

بهینه سازی: جستجوی ترکیبی (بردار + کلمه کلیدی)

به دقت را بهبود بخشید، من ترکیب کردم:

  • جستجوی بردار (pgveector): محتوای مشابه مشابهی را پیدا می کند
  • فیلتر کلمه کلیدی (SQL Like/جستجوی متن کامل): ارتباط را تضمین می کند
SELECT id, title, content, embedding <=> $1 AS distance
FROM helpdesk_articles
WHERE title ILIKE '%' || $2 || '%'
ORDER BY distance
LIMIT 3;
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔹 چگونه کمک می کند:

  • جستجوی بردار نتایج توسط شباهت معنایی
  • تطابق کلمه کلیدی محتوای بی ربط را فیلتر می کند

نمایه سازی برای جستجوی سریعتر

به سرعت بازیابی، من اضافه کردم شاخص IVFFLAT در pgveector:

CREATE INDEX ON helpdesk_articles USING ivfflat (embedding vector_l2_ops);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔹 نتیجه: بازیابی سریعتر و دقیق تر اسنادبشر

در مورد شاخص IVFFLAT بخوانید


3. پالایش نسل پاسخ GPT

حتی پس از بهبود بازیابی ، GPT گاهی اوقات زمینه اشتباه فهمیده می شودبشر

شماره: پاسخهای ساختاری ضعیف

GPT گهگاه اسناد بازیابی نادرست تفسیر شده، منجر به پاسخ های بلند یا مبهمبشر

بهینه سازی: زمینه ساختاری برای GPT

به جای تغذیه اسناد خام راهنما، من آنها را قالب بندی کردم قبل از انتقال به GPTبشر

async function generateStructuredResponse(userQuery: string) {
  const relevantDocs = await searchHelpdesk(userQuery);

  // Structure the retrieved data for GPT
  const structuredContext = relevantDocs.map(doc => 
    `Title: ${doc.title}\nSummary: ${summarizeText(doc.content)}`
  ).join("\n\n");

  const response = await openai.chat.completions.create({
    model: "gpt-4",
    messages: [
      { role: "system", content: "You are a support agent. Answer using provided helpdesk articles." },
      { role: "user", content: `User query: ${userQuery}` },
      { role: "assistant", content: `Relevant Articles:\n${structuredContext}` }
    ],
  });

  return response.choices[0].message.content;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔹 چرا این کار می کند:

  • ورودی های کوتاه تر و ساخت یافته ترGPT بهتر می فهمد
  • محتوای خلاصه شده سر و صدا را کاهش می دهد GPT روی نکات کلیدی تمرکز دارد

خلاصه مقاله های طولانی کمک

وقتی الف سند بازیابی خیلی طولانی بود، من قبل از انتقال به GPT آن را خلاصه کرد با استفاده از Openai gpt-4-turboبشر

async function summarizeText(text: string) {
  const response = await openai.chat.completions.create({
    model: "gpt-4-turbo",
    messages: [
      { role: "system", content: "Summarize the following helpdesk article into key points." },
      { role: "user", content: text }
    ],
  });

  return response.choices[0].message.content;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

🔹 مثال:

قبل از آن:

“برای تنظیم مجدد رمز عبور خود ، به تنظیمات بروید. روی” رمز عبور فراموش شده “کلیک کنید. ایمیل خود را وارد کنید و دستورالعمل های ارسال شده به ایمیل خود را دنبال کنید.”

بعد از خلاصه:

“به تنظیمات بروید> رمز ورود را فراموش کرده اید> دستورالعمل های ایمیل را دنبال کنید.”

این محتوای فشرده شده، نگه داشتن اطلاعات ضروری برای پاسخ های دقیق GPTبشر


نتایج نهایی: بهبود دقت

پس از استفاده از این بهینه سازی ها:

📌 قبل از بهینه سازی:

  • 🔴 gpt گاهی تولید می شود پاسخ های بی ربط
  • 🔴 اسناد بازیابی شده بودند همیشه بهترین مسابقه نیست
  • 🔴 اسناد طولانی GPT گیج شده، منجر به پاسخ های مبهم

📌 پس از بهینه سازی:

نتایج جستجوی مرتبط تر با استفاده از جستجوی ترکیبی

ورودی های GPT کوتاهتر و ساختار یافتهپاسخهای واضح تر و مختصر تر

50 ٪ کاهش در توهم GPT

مثال قبل در مقابل پس از بهینه سازی

پرس و جو کاربر:

“چگونه رمز ورود خود را دوباره تنظیم کنم؟”

📉 قبل از بهینه سازی:

“تنظیم مجدد رمزهای عبور نیاز به تأیید اعتبار دارد. اگر در ورود به سیستم مشکل دارید ، سعی کنید اعتبار خود را در تنظیمات حساب تغییر دهید.”

📈 پس از بهینه سازی:

“به تنظیمات بروید> رمز عبور را فراموش کرده اید. برای تنظیم مجدد رمز عبور ، دستورالعمل های ایمیل را دنبال کنید.”

دقت به طور قابل توجهی بهبود یافت! 🚀


غذای اصلی

✅ بهترین روشها برای بهینه سازی دقت RAB

پرس و جوهای کاربر پیش پردازش: گسترش ، تمیز کردن و عادی سازی ورودی

بازیابی را با جستجوی ترکیبی بهبود بخشید: ترکیب کنید بردار + جستجوی کلمه کلیدی

تعبیه های شاخص به طور کارآمد: استفاده کنید نمایه سازی ivfflat برای جستجوی سریع

اسناد طولانی را خلاصه کنید: زمینه کوتاهتر کیفیت پاسخ GPT را بهبود می بخشد

ورودی های ساختار به GPT: ارائه قالب شفاف و مختصر


افکار نهایی

ادغام کننده PGVector با خیش یک تغییر دهنده بازی برای Chavidesk Chatbots، اما بهبود دقت بهینه سازی عمیق تر مورد نیاز است. از طرف افزایش بازیابیبا پالایش ورودی GPTوت دست زدن به اسناد طولانی بهتر، من به طور قابل توجهی بهبود یافتم دقت پاسخبشر

اگر با شما کار کرده اید RAG + PGVECTOR، من دوست دارم افکار شما را بشنوم! تجربیات خود را در نظرات رها کنید. 💬

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

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

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

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