RAG تطبیقی با Gemini و Qdrant: طبقه‌بندی هوشمند پرس‌وجو

RAG تطبیقی با Gemini و Qdrant: طبقه‌بندی هوشمند پرس‌وجو

9 دقیقه مطالعه · منتشر شده ۱۴۰۵/۴/۲۷

دانلود workflow

فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.

  1. فایل JSON را دانلود کنید.
  2. در n8n: Workflows → Import from File.
  3. Credentialهای هر node را متصل کنید.
  4. workflow را فعال کنید.

شناسه workflow: 3459 · منبع: کاتالوگ Axeto

استراتژی RAG تطبیقی با طبقه‌بندی پرس‌وجو و بازیابی (Gemini & Qdrant)

این Workflow یک چارچوب تولید افزوده بازیابی تطبیقی (RAG) را پیاده‌سازی می‌کند. این چارچوب به طور پویا استراتژی بازیابی اطلاعات و تولید پاسخ خود را بر اساس طبقه‌بندی پرس‌وجوی کاربر تنظیم می‌کند. این روش برای سناریوهایی ایده‌آل است که در آن‌ها انواع مختلف پرس‌وجوها (مانند پرسش‌های واقعی، تحلیلی، نظر، یا زمینه‌ای) نیازمند پردازش سفارشی برای به حداکثر رساندن ارتباط و دقت پاسخ‌ها هستند.

این Workflow می‌تواند مستقیماً از طریق رابط چت n8n یا به عنوان یک زیر-Workflow که توسط Workflowهای دیگر فراخوانی می‌شود، فعال شود و ورودی‌هایی مانند پرس‌وجوی کاربر، شناسه جلسه چت و شناسه مجموعه فروشگاه برداری را دریافت کند.

شما می‌توانید این Workflow و موارد دیگر را در کاتالوگ Axeto ما بیابید: Axeto AI n8n Workflows

نمای کلی Workflow

این Workflow به طور منطقی به بلوک‌های زیر تقسیم می‌شود:

1. دریافت و استانداردسازی ورودی: ورودی‌ها را از چت یا Workflowهای خارجی دریافت و استاندارد می‌کند.

2. طبقه‌بندی پرس‌وجو: پرس‌وجوی کاربر را به یکی از چهار دسته طبقه‌بندی می‌کند.

3. انتخاب استراتژی تطبیقی: Workflow را بر اساس طبقه‌بندی پرس‌وجو هدایت می‌کند.

4. تطبیق پرس‌وجو ویژه استراتژی: یک استراتژی تطبیق پرس‌وجوی سفارشی برای هر دسته اعمال می‌کند.

5. آماده‌سازی Prompt و خروجی: Prompt و متن خروجی را برای بازیابی و تولید پاسخ تنظیم می‌کند.

6. بازیابی اسناد: اسناد مرتبط را از فروشگاه برداری Qdrant بازیابی می‌کند.

7. الحاق زمینه: محتوای اسناد بازیابی شده را در یک بلوک زمینه واحد ترکیب می‌کند.

8. تولید پاسخ: پاسخ نهایی را با استفاده از Google Gemini با زمینه و حافظه چت تولید می‌کند.

9. تحویل پاسخ: پاسخ تولید شده را به کاربر ارسال می‌کند.

---

تحلیل بلوک به بلوک

۱. دریافت و استانداردسازی ورودی

هدف: این بلوک ورودی‌ها را از دو تریگر احتمالی مدیریت می‌کند: رابط داخلی چت یا یک تریگر Workflow خارجی. ورودی‌ها را برای پردازش پایین‌دستی به یک فرمت یکپارچه استاندارد می‌کند.

Nodes:

  • Chat Trigger (n8n-nodes-base.chatTrigger)
  • Execute Workflow Trigger (n8n-nodes-base.executeWorkflowTrigger)
  • Set (n8n-nodes-base.set) - با نام "Combined Fields"

جزئیات:

  • Chat Trigger: به عنوان نقطه ورود برای تعامل مستقیم چت عمل می‌کند. از شناسه Webhook پیش‌فرض برای رابط چت استفاده می‌کند و ورودی چت کاربر را ارسال می‌کند.
  • Execute Workflow Trigger: به این Workflow اجازه می‌دهد تا توسط Workflowهای n8n دیگر فراخوانی شود و پارامترهایی مانند user_query، chat_memory_key و vector_store_id را بپذیرد.
  • Combined Fields (Set): ورودی‌ها را با تنظیم user_query، chat_memory_key و vector_store_id از هر دو منبع تریگر، نرمال می‌کند. از عباراتی برای بازگشت بین ورودی چت و ورودی‌های Workflow استفاده می‌کند.

* user_query = $json.user_query || $json.chatInput

* chat_memory_key = $json.chat_memory_key || $('Chat Trigger').item.json.sessionId

* vector_store_id = $json.vector_store_id || "<ID HERE>" (نیاز به به‌روزرسانی دستی با شناسه مجموعه Qdrant شما دارد).

---

۲. طبقه‌بندی پرس‌وجو

هدف: پرس‌وجوی کاربر را به یکی از چهار دسته طبقه‌بندی می‌کند: واقعی (Factual)، تحلیلی (Analytical)، نظر (Opinion) یا زمینه‌ای (Contextual). این طبقه‌بندی استراتژی بازیابی بعدی را تعیین می‌کند.

Nodes:

  • Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Classification"
  • LangChain Agent ( @n8n/n8n-nodes-langchain.agent) - با نام "Query Classification"
  • Switch (n8n-nodes-base.switch)
  • Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note6"

جزئیات:

  • Gemini Classification (Google Gemini LM Chat): از مدل models/gemini-2.0-flash-lite برای طبقه‌بندی پرس‌وجو استفاده می‌کند. نیاز به اعتبارنامه Google Palm API دارد.
  • Query Classification (LangChain Agent): یک prompt طبقه‌بندی را با یک پیام سیستمی که مدل را برای بازگرداندن دقیقاً یک نام دسته راهنمایی می‌کند، پردازش می‌کند. Prompt شامل user_query از مرحله قبل است.

* عبارت کلیدی: Classify this query: {{ $('Combined Fields').item.json.user_query }}

  • Switch: Workflow را بر اساس رشته طبقه‌بندی trimmed شده هدایت می‌کند. دارای چهار حالت است که با رشته‌های دقیق مطابقت دارند: "Factual"، "Analytical"، "Opinion" و "Contextual".
  • Sticky Note6: توضیحی برای هدف طبقه‌بندی پرس‌وجو ارائه می‌دهد.

---

۳. انتخاب استراتژی تطبیقی

هدف: این بلوک توسط گره Switch از بخش قبل مدیریت می‌شود که Workflow را بر اساس نوع پرس‌وجوی طبقه‌بندی شده به یکی از چهار شاخه استراتژی هدایت می‌کند.

---

۴. تطبیق پرس‌وجو ویژه استراتژی

هدف: هر یک از چهار شاخه استراتژی، تطبیق پرس‌وجوی سفارشی را با استفاده از عامل‌های Google Gemini برای اصلاح پرس‌وجو یا تولید زیر-پرس‌وجوها برای بازیابی مؤثرتر، اعمال می‌کند.

Nodes:

  • استراتژی واقعی (Factual Strategy):

* LangChain Agent ( @n8n/n8n-nodes-langchain.agent) - با نام "Factual Strategy - Focus on Precision"

* Memory Buffer Window ( @n8n/n8n-nodes-langchain.memoryBufferWindow) - با نام "Chat Buffer Memory Factual"

* Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Factual"

* Set (n8n-nodes-base.set) - با نام "Factual Prompt and Output"

* Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note"

  • استراتژی تحلیلی (Analytical Strategy):

* LangChain Agent ( @n8n/n8n-nodes-langchain.agent) - با نام "Analytical Strategy - Comprehensive Coverage"

* Memory Buffer Window ( @n8n/n8n-nodes-langchain.memoryBufferWindow) - با نام "Chat Buffer Memory Analytical"

* Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Analytical"

* Set (n8n-nodes-base.set) - با نام "Analytical Prompt and Output"

* Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note1"

  • استراتژی نظر (Opinion Strategy):

* LangChain Agent ( @n8n/n8n-nodes-langchain.agent) - با نام "Opinion Strategy - Diverse Perspectives"

* Memory Buffer Window ( @n8n/n8n-nodes-langchain.memoryBufferWindow) - با نام "Chat Buffer Memory Opinion"

* Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Opinion"

* Set (n8n-nodes-base.set) - با نام "Opinion Prompt and Output"

* Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note2"

  • استراتژی زمینه‌ای (Contextual Strategy):

* LangChain Agent ( @n8n/n8n-nodes-langchain.agent) - با نام "Contextual Strategy - User Context Integration"

* Memory Buffer Window ( @n8n/n8n-nodes-langchain.memoryBufferWindow) - با نام "Chat Buffer Memory Contextual"

* Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Contextual"

* Set (n8n-nodes-base.set) - با نام "Contextual Prompt and Output"

* Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note3"

جزئیات:

  • Nodes LangChain Agent: هر گره عامل، پرس‌وجوی کاربر را بر اساس استراتژی خود بازنویسی می‌کند:

* واقعی (Factual): پرس‌وجو را برای دقت و تمرکز بر موجودیت‌ها بهبود می‌بخشد.

* تحلیلی (Analytical): دقیقاً ۳ زیر-پرس‌وجو برای پوشش جامع تولید می‌کند.

* نظر (Opinion): دقیقاً ۳ دیدگاه متفاوت مرتبط با پرس‌وجو را شناسایی می‌کند.

* زمینه‌ای (Contextual): زمینه ضمنی یا مرتبطی را که به صراحت بیان نشده است، استنباط می‌کند.

  • Nodes Memory Buffer Window: تاریخچه چت را برای هر شاخه استراتژی با استفاده از chat_memory_key حفظ می‌کنند. از طول پنجره زمینه ۱۰ استفاده می‌کنند.
  • Nodes Google Gemini LM Chat: اینها فراخوانی‌های مدل زبان زیربنایی برای عامل‌های استراتژی مربوطه هستند که از مدل models/gemini-2.0-flash استفاده می‌کنند. آنها خروجی گره‌های عامل LangChain را پردازش می‌کنند.
  • Nodes Set (Prompt and Output): این گره‌ها خروجی نهایی و یک prompt سیستمی سفارشی را برای مرحله بعدی تولید پاسخ آماده می‌کنند. آنها output را به نتیجه استراتژی و prompt را به یک پیام سیستمی که LLM را در مورد نحوه پاسخ‌دهی بر اساس نوع پرس‌وجو راهنمایی می‌کند، تنظیم می‌کنند.
  • Sticky Notes: هر یادداشت چسبان، تمرکز استراتژی بازیابی خاص را برای دسته مربوطه توصیف می‌کند.

---

۵. آماده‌سازی Prompt و خروجی

هدف: خروجی استراتژی انتخاب شده و prompt مربوط به آن را در یک ساختار یکپارچه برای بازیابی اسناد ادغام می‌کند.

Nodes:

  • Set (n8n-nodes-base.set) - با نام "Set Prompt and Output"
  • Sticky Note (n8n-nodes-base.stickyNote) - با نام "Sticky Note4"

جزئیات:

  • Set Prompt and Output (Set): این گره به سادگی فیلدهای output و prompt دریافتی از یکی از گره‌های "Prompt and Output" ویژه استراتژی را عبور می‌دهد.
  • Sticky Note4: توضیح می‌دهد که این مرحله با در نظر گرفتن پرس‌وجوی تطبیق یافته و زمینه، برای بازیابی تطبیقی آماده می‌شود.

---

۶. بازیابی اسناد

هدف: با استفاده از پرس‌وجوی تطبیق یافته و prompt، مرتبط‌ترین اسناد را از مجموعه فروشگاه برداری Qdrant مشخص شده بازیابی می‌کند.

Nodes:

  • Google Gemini Embeddings ( @n8n/n8n-nodes-langchain.embeddingsGoogleGemini)
  • Qdrant Vector Store ( @n8n/n8n-nodes-langchain.vectorStoreQdrant)

جزئیات:

  • Google Gemini Embeddings: Embeddingهای متنی را برای پرس‌وجوی تطبیق یافته (از فیلد output گره "Set Prompt and Output") برای استفاده در جستجوی برداری تولید می‌کند. از مدل models/text-embedding-004 استفاده می‌کند و نیاز به اعتبارنامه Google Palm API دارد.
  • Qdrant Vector Store: مجموعه Qdrant مشخص شده توسط vector_store_id را برای ۱۰ سند مرتبط بر اساس embeddingهای تولید شده جستجو می‌کند.

* Mode: load

* topK: 10

* Prompt: prompt سیستمی و پرس‌وجوی تطبیق یافته را ترکیب می‌کند.

* Qdrant Collection ID: از متغیر vector_store_id گرفته می‌شود.

* Credentials: نیاز به اعتبارنامه Qdrant API دارد.

---

۷. الحاق زمینه

هدف: محتوای قطعات سند بازیابی شده را در یک بلوک متن واحد و منسجم ترکیب می‌کند تا به عنوان زمینه برای تولید پاسخ نهایی استفاده شود.

Nodes:

  • Set (n8n-nodes-base.set) - با نام "Concatenate Context"

جزئیات:

  • Concatenate Context (Set): pageContent را از هر قطعه سند بازیابی شده می‌گیرد و آنها را با جدا کردن با خطوط جدید، در یک متغیر رشته‌ای واحد به نام context به هم متصل می‌کند.

---

۸. تولید پاسخ

هدف: پاسخ نهایی به پرس‌وجوی کاربر را با استفاده از Google Gemini، با ادغام زمینه بازیابی شده و حفظ تاریخچه چت، تولید می‌کند.

Nodes:

  • Memory Buffer Window ( @n8n/n8n-nodes-langchain.memoryBufferWindow) - با نام "Chat Buffer Memory Final"
  • Google Gemini LM Chat ( @n8n/n8n-nodes-langchain.lmChatGoogleGemini) - با نام "Gemini Final Answer"

جزئیات:

  • Chat Buffer Memory Final (Memory Buffer Window): تاریخچه کلی چت مکالمه را با استفاده از chat_memory_key مدیریت می‌کند.
  • Gemini Final Answer (Google Gemini LM Chat): این گره prompt نهایی را می‌سازد و prompt سیستمی، context بازیابی شده، user_query اصلی کاربر و تاریخچه چت را ترکیب می‌کند. سپس از مدل models/gemini-2.0-pro برای تولید پاسخ نهایی استفاده می‌کند. نیاز به اعتبارنامه Google Palm API دارد.

---

۹. تحویل پاسخ

هدف: پاسخ تولید شده را به کاربر ارسال می‌کند، چه از طریق رابط چت و چه به عنوان یک مقدار بازگشتی به Workflow فراخواننده.

Nodes:

  • Respond to Webhook (n8n-nodes-base.respondToWebhook)

جزئیات:

  • Respond to Webhook: پاسخ نهایی تولید شده را به کلاینتی که درخواست را آغاز کرده است، باز می‌گرداند. اگر توسط رابط چت فعال شده باشد، پاسخ را به چت ارسال می‌کند. اگر به عنوان یک زیر-Workflow فراخوانی شده باشد، داده‌ها را به Workflow والد باز می‌گرداند.

Nodeهای استفاده‌شده

سوالات متداول

RAG تطبیقی چیست و چرا از آن استفاده می‌کنیم؟

RAG تطبیقی (Adaptive RAG) یک چارچوب تولید افزوده بازیابی است که استراتژی خود را بر اساس نوع پرس‌وجوی کاربر تنظیم می‌کند. این امر باعث می‌شود پاسخ‌ها دقیق‌تر و مرتبط‌تر باشند، زیرا برای پرس‌وجوهای مختلف (مانند پرسش‌های واقعی، تحلیلی، نظر یا زمینه‌ای) رویکرد متفاوتی اتخاذ می‌شود.

نقش Google Gemini و Qdrant در این Workflow چیست؟

Google Gemini برای طبقه‌بندی پرس‌وجوی کاربر به دسته‌های مختلف (واقعی، تحلیلی، نظر، زمینه‌ای) استفاده می‌شود. Qdrant به عنوان یک فروشگاه برداری (Vector Store) برای ذخیره و بازیابی اسناد مرتبط با پرس‌وجو عمل می‌کند.

این Workflow چگونه کار می‌کند؟

Workflow ابتدا ورودی کاربر را دریافت و استاندارد می‌کند، سپس پرس‌وجو را با استفاده از Gemini طبقه‌بندی می‌کند. بر اساس این طبقه‌بندی، استراتژی مناسبی برای بازیابی اسناد از Qdrant انتخاب شده و سپس با استفاده از Gemini و اسناد بازیابی شده، پاسخ نهایی تولید و ارسال می‌شود.

چگونه می‌توان این Workflow را در n8n پیاده‌سازی کرد؟

این Workflow از نودهای n8n مانند Chat Trigger، Execute Workflow Trigger، Set، Google Gemini LM Chat، LangChain Agent، Switch، Qdrant Vector Store و Respond to Webhook استفاده می‌کند. شما می‌توانید این نودها را به ترتیب مشخص شده در مستندات، پیکربندی و به هم متصل کنید.

workflowهای مرتبط

این workflow در کاتالوگ Axeto.ai بایگانی شده است. لایسنس اصلی متعلق به سازنده workflow است.