MODULE 03 / LESSON 18

Vector Databases در سیستم‌های RAG

Vector Database چیست، چرا برای RAG مناسب است و چگونه داده، Embedding، ایندکس HNSW، جست‌وجوی BM25 و Hybrid Search را در یک Workflow عملی کنار هم قرار می‌دهد؟

نویسنده: محمد ابوطالبی۱۲۸۵ واژهماژول ۳: Vector Databaseشامل افزودهٔ پژوهشی ۲۰۲۶

مفهوم اصلی: Vector Database چه مسئله‌ای را حل می‌کند؟

در یک سیستم RAG در محیط Production باید تعداد زیادی Vector را ذخیره و با سرعت زیاد جست‌وجو کنیم. پایگاه‌داده‌ای که از ابتدا برای داده‌های برداری با ابعاد بالا و الگوریتم‌هایی مانند ANN طراحی شده، Vector Database نام دارد.

Vector Database فقط «جدولی از عددها» نیست؛ علاوه بر Vector، متن اصلی، شناسه و Metadata را نگه می‌دارد، برای جست‌وجوی سریع Index می‌سازد و نتیجه‌ها را همراه با Distance یا Score برمی‌گرداند.

اجزای یک رکورد دیتابیس برداری شامل متن، متادیتا، بردار و ایندکس
هر Object متن، Metadata و Vector را کنار هم دارد؛ Index مسیر سریع رسیدن از Query Vector به Objectهای نزدیک را فراهم می‌کند.

چرا Vector Databaseها به وجود آمدند؟

با گسترش Large Language Modelها، Embedding Modelها و Semantic Search در اوایل دههٔ ۲۰۲۰، نیاز به ذخیره و جست‌وجوی سریع Vectorها رشد کرد. Relational Database معمولی، بدون افزونه و Index تخصصی، بیشتر شبیه KNN عمل می‌کند و در مقیاس بزرگ مجبور است فاصلهٔ Query را با تعداد زیادی رکورد حساب کند.

Vector Databaseها این مسیر را برای عملیات برداری بهینه می‌کنند:

  • ساخت Proximity Graph برای الگوریتم‌هایی مانند HNSW؛
  • محاسبهٔ معیارهایی مانند Cosine Similarity و Distance؛
  • بازیابی سریع Top-K در مجموعه‌های بزرگ؛
  • ترکیب Semantic Search با Keyword Search و Metadata Filtering.

در نتیجه، مقیاس‌پذیری و سرعت بیشتری برای سیستم‌های RAG به دست می‌آید.

Vector Database این دوره: Weaviate

در این دوره از Weaviate استفاده می‌شود؛ یک Vector Database متن‌باز که هم به‌صورت Local و هم در Cloud قابل اجراست. محصول‌های مختلف جزئیات API متفاوتی دارند، اما Workflow عمومی آن‌ها شبیه است. هدف اصلی، فهمیدن الگوی کار است: تعریف ساختار داده، ورود Document، ساخت Vector و Index، Query و Filtering.

آماده‌سازی Vector Database برای Retrieval

پیش از اولین Search، داده باید یک مسیر مشخص را طی کند. خروجی این مسیر، Databaseای است که هم جست‌وجوی Keyword و هم جست‌وجوی Semantic را پشتیبانی می‌کند.

  1. راه‌اندازی Database: یک Instance جدید می‌سازیم یا به Instance موجود متصل می‌شویم.
  2. بارگذاری Documentها: سندهای Knowledge Base را همراه با شناسه و Metadata وارد می‌کنیم.
  3. ساخت Sparse Vector: برای Keyword Search، اطلاعاتی بر اساس حضور و فراوانی واژه‌ها ساخته می‌شود.
  4. ساخت Dense Embedding: برای Semantic Search، هر Document با Embedding Model به Dense Vector تبدیل می‌شود.
  5. ساخت ANN Index: برای جست‌وجوی سریع برداری، Indexای مانند HNSW ساخته می‌شود.
خط لوله آماده‌سازی دیتابیس برداری از سند خام تا بردارهای Dense و Sparse و ایندکس HNSW
Document از دو مسیر مکمل عبور می‌کند: Sparse برای واژه‌های دقیق و Dense Embedding برای معنا؛ سپس Indexها آمادهٔ Search می‌شوند.

مثال: از یک خبر تا Object قابل جست‌وجو

{
  "title": "افتتاح خط جدید مترو",
  "body": "خط جدید مترو امروز به بهره‌برداری رسید.",
  "category": "شهر",
  "published_at": "2026-09-08"
}

کلمه‌هایی مانند «مترو» در Inverted Index ثبت می‌شوند؛ هم‌زمان متن با Embedding Model به یک Dense Vector تبدیل می‌شود. اکنون Query «خبرهای جدید حمل‌ونقل شهری» حتی بدون تکرار دقیق واژهٔ «مترو» می‌تواند این سند را از مسیر معنایی پیدا کند.

Workflow در Weaviate

۱. اتصال و ساخت Collection

ابتدا یک Instance جدید ساخته می‌شود یا به Instance موجود متصل می‌شویم. داده‌ها در Weaviate داخل Collection ذخیره می‌شوند. برای مثال، Collectionای به نام Article می‌تواند مقاله‌های خبری را نگه دارد.

هنگام ساخت Collection، Propertyها و نوع آن‌ها مشخص می‌شوند:

Collection: Article
title        → text
body         → text
category     → text
published_at → date

همچنین تعیین می‌کنیم کدام Embedding Model برای ساخت Semantic Vector استفاده شود. پس از آن، هر Article واردشده به Vector تبدیل می‌شود و در Semantic Search شرکت می‌کند.

۲. افزودن داده‌ها با Batch

برای ورود تعداد زیادی Object می‌توان از Batch Method استفاده کرد. عملیاتی مانند Batch.addObject Objectها را اضافه می‌کند و امکان ثبت تعداد خطاها را می‌دهد.

فرض کنید ۱۰٬۰۰۰ مقاله وارد می‌کنیم و ۱۲ مورد به‌دلیل تاریخ نامعتبر شکست می‌خورند. با ثبت خطا می‌توان همان ۱۲ مورد را اصلاح و دوباره ارسال کرد؛ اگر نسبت خطا غیرعادی باشد، بهتر است فرآیند متوقف شود.

۳. اجرای Vector Search و خواندن Distance

پس از ورود داده‌ها، Collection و متن Query را مشخص می‌کنیم. Weaviate برای Query نیز Vector می‌سازد، نزدیک‌ترین Objectها را پیدا می‌کند و می‌تواند Distance هر نتیجه را برگرداند.

Query: "حمل‌ونقل عمومی در پایتخت"
Top result: "افتتاح خط جدید مترو"
Distance: 0.12

Distance فاصلهٔ Query Vector و Object Vector است. در یک معیار فاصله، مقدار کمتر معمولاً یعنی نزدیکی بیشتر؛ اما تفسیر دقیق Score یا Distance باید با معیار انتخاب‌شده و API همان Database انجام شود.

Keyword Search و Inverted Index

Weaviate برای Keyword Search یک Inverted Index می‌سازد. این Index مشخص می‌کند هر کلمه در کدام Documentها آمده و فراوانی آن چقدر است. با این ساختار می‌توان BM25 Query اجرا کرد؛ مثلاً سه سند برتر شامل عبارت دقیق «HNSW» را خواست.

Keyword Search برای نام محصول، شمارهٔ خطا، کد قرارداد یا اصطلاحی که باید دقیقاً تطبیق پیدا کند مفید است. Vector Search در مقابل، ارتباط معنایی را بهتر تشخیص می‌دهد.

Hybrid Search؛ معنا و واژه به‌صورت هم‌زمان

در Hybrid Search، Vector Search و Keyword Search به‌صورت موازی اجرا می‌شوند. امتیازهای دو مسیر ترکیب و نتایج دوباره رتبه‌بندی می‌شوند؛ بنابراین یک نتیجه می‌تواند هم به‌دلیل معنای نزدیک و هم به‌دلیل تطابق واژه‌های مهم امتیاز بگیرد.

جریان Hybrid Search شامل اجرای موازی BM25 و Vector Search، ترکیب امتیازها و اعمال فیلتر
Hybrid Search دو فهرست Candidate را می‌سازد، Scoreها را ترکیب می‌کند و سپس نتیجه‌های مجاز و مرتبط را برمی‌گرداند.

پارامتر Alpha چه می‌کند؟

Alpha وزن هر روش را تعیین می‌کند. در قرارداد توضیح‌داده‌شده در این درس:

alpha = 0.25

25%  Vector Search
75%  Keyword Search

برای Query شامل کدی دقیق مانند ERR-429 می‌توان وزن Keyword را بیشتر کرد؛ برای پرسشی محاوره‌ای مانند «چرا درخواست‌ها گاهی رد می‌شوند؟» وزن Vector Search معمولاً مفیدتر است. مقدار مناسب را باید با Queryهای واقعی و Eval پیدا کرد.

چرا Hybrid Search در Production رایج است؟

روشنقطهٔ قوتمثال
Vector Searchشباهت معنایی«هزینهٔ ارسال» را نزدیک به «تعرفهٔ پست» می‌بیند.
Keyword Searchتطابق دقیق کلماتشناسهٔ «INV-2048» را دقیق پیدا می‌کند.
Hybrid Searchتعادل میان هر دوهم موضوع فاکتور و هم شناسهٔ دقیق آن را لحاظ می‌کند.

اعمال Filter روی Search

Metadata Filter مشخص می‌کند کدام Object اجازهٔ حضور در نتیجه را دارد. اگر شرط برقرار باشد Object عبور می‌کند؛ در غیر این صورت حذف می‌شود.

Query: "به‌روزرسانی قوانین مرخصی"
Filter:
  department = "HR"
  valid_from <= today
  access_group contains "employees"

در این مثال، حتی یک سند بسیار مشابه نیز اگر متعلق به واحد دیگری باشد یا کاربر مجوز دیدنش را نداشته باشد، نباید وارد Context شود. Filter می‌تواند روی تاریخ، دسته‌بندی، زبان، tenant یا سطح دسترسی اعمال شود.

Workflow کامل Vector Database

1. Configure Database and Collection
2. Load Documents and Metadata
3. Create Sparse and Dense representations
4. Build ANN / HNSW Index
5. Run Vector, BM25, or Hybrid Query
6. Apply Metadata and access Filters
7. Return Top-K Documents to the RAG pipeline

جمع‌بندی

  • Vector Databaseها برای ذخیره و جست‌وجوی Vectorهای حجیم طراحی شده‌اند و برای ANN و HNSW بهینه‌اند.
  • Relational Databaseهای معمولی بدون قابلیت برداری تخصصی، در Semantic Search بزرگ عملکرد ضعیف‌تری دارند.
  • Weaviate یک Vector Database متن‌باز است که در این دوره برای یادگیری Workflow عمومی استفاده می‌شود.
  • آماده‌سازی شامل راه‌اندازی Database، بارگذاری Document، ساخت Sparse Vector، ساخت Dense Embedding و ایجاد ANN Index است.
  • Weaviate از Vector Search، Keyword Search مبتنی بر BM25، Hybrid Search و Filtering پشتیبانی می‌کند.
  • Hybrid Search رایج است، چون شباهت معنایی و تطابق دقیق کلمات را در یک رتبه‌بندی ترکیب می‌کند.