Local AI

ساخت یک پایپ‌لاین RAG محلی با Milvus و Ollama برای جستجوی سازمانی با تراکم بالا

در چشم‌انداز به‌سرعت در حال تحول هوش مصنوعی، حریم خصوصی داده‌ها و کارایی هزینه برای پذیرش سازمانی حیاتی هستند. اگرچه مدل‌های زبانی بزرگ مبتنی بر ابر (LLMs) قابلیت‌های چشمگیری ارائه می‌دهند، اما اغلب با تأخیر قابل توجه و ریسک‌های انطباق همراه هستند. اینجاست که زیرساخت هوش مصنوعی محلی می‌درخشد. با ترکیب Milvus، یک پایگاه داده برداری با عملکرد بالا، و Ollama، ابزاری برای اجرای مدل‌های زبانی بزرگ متن‌باز به صورت محلی، توسعه‌دهندگان می‌توانند یک پایپ‌لاین تولید تقویت‌شده با بازیابی (RAG) مستحکم بسازند که داده‌ها را در محل نگه می‌دارد و در عین حال قابلیت‌های جستجوی با تراکم بالا را ارائه می‌دهد.

چرا Milvus و Ollama؟

سیستم‌های RAG به شدت به سرعت و دقت جستجوهای شباهت برداری وابسته هستند. پایگاه‌های داده رابطه‌ای سنتی در مقابله با ابعاد بردارهای جاسازی (embedding) با مشکل مواجه شده و هنگام مقیاس‌پذیری داده‌ها دچار گلوگاه می‌شوند. Milvus به طور خاص برای این منظور طراحی شده و تأخیر جستجوی زیر میلی‌ثانیه و معماری‌های توزیع‌شده مقیاس‌پذیر را ارائه می‌دهد.

در کنار Ollama که استقرار مدل‌هایی مانند Llama 3 یا Mistral را ساده می‌کند، شما توانایی اجرای استنتاج (inference) را به طور کاملاً محلی کسب می‌کنید. این ترکیب هزینه‌های API خارجی را حذف کرده و اطمینان حاصل می‌کند که اسناد حساس شرکتی هرگز از محیط امن شما خارج نمی‌شوند.

راه‌اندازی محیط

قبل از نوشتن کد، اطمینان حاصل کنید که Docker برای Milvus نصب شده است و تصویر جدیدترین نسخه Ollama را کشیده‌اید. همچنین به پایتون همراه با کتابخانه‌های milvus-client و requests نصب‌شده نیاز خواهید داشت. برای جاسازی، از قابلیت‌های داخلی Ollama برای جاسازی از طریق API آن استفاده خواهیم کرد تا کل پشته یکپارچه بماند.

اولین قدم، شروع Milvus با استفاده از Docker Compose است. یک تنظیمات استاندارد شامل Etcd، MinIO و جزء Milvus Standalone می‌باشد. پس از اجرا، می‌توانید اتصال را با استفاده از CLI Milvus یا کلاینت پایتون بررسی کنید.

پیاده‌سازی منطق جاسازی و نمایه‌سازی

هسته اصلی پایپ‌لاین RAG ما شامل تبدیل اسناد متنی به بردارهای جاسازی و ذخیره آن‌ها در Milvus است. ما از API Ollama برای تولید این جاسازی‌ها استفاده خواهیم کرد. در زیر یک مثال عملی پایتون آورده شده است که نحوه اتصال به Milvus، ایجاد یک مجموعه (collection) و درج داده‌ها را نشان می‌دهد.

from pymilvus import connections, Collection, CollectionSchema, FieldSchema, DataType
import requests
import numpy as np

# اتصال به Milvus
connections.connect(alias="default", host="localhost", port="19530")

# تعریف طرح مجموعه
fields = [
    FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
    FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=768),
    FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=512)
]
schema = CollectionSchema(fields, "Local RAG Collection")
collection = Collection("RAG_Collection", schema)

def get_embedding(text):
    response = requests.post("http://localhost:11434/api/embeddings", json={
        "model": "nomic-embed-text",
        "prompt": text
    })
    return response.json()["embedding"]

# مثال: درج یک سند
text_data = "Enterprise security protocols require multi-factor authentication."
embedding = get_embedding(text_data)

insert_data = [
    [0],  # جایگاه شناسه تولید شده خودکار
    [embedding],
    [text_data]
]
collection.insert(insert_data)
collection.load()

# ایجاد نمایه برای جستجوی سریع
index_params = {
    "metric_type": "IP",  # حاصل ضرب داخلی
    "index_type": "IVF_FLAT",
    "params": {"nlist": 128}
}
collection.create_index("vector", index_params)

اجرای جستجوی با تراکم بالا

پس از نمایه‌سازی داده‌های شما، مرحله بازیابی ساده می‌شود. می‌توانید از پایگاه داده برداری با سوال کاربر پرس‌وجو کنید، اسناد را که بیشترین شباهت معنایی را دارند بازیابی کنید و آن‌ها را به عنوان زمینه برای مدل زبانی بزرگ محلی خود برای تولید پاسخ ارسال نمایید. از آنجا که Milvus کار سنگین ریاضیات برداری را انجام می‌دهد، حتی با میلیون‌ها رکورد، نتایج جستجو در عرض میلی‌ثانیه بازگردانده می‌شوند.

نتیجه‌گیری

ساخت یک پایپ‌لاین RAG محلی با Milvus و Ollama تنها درباره حریم خصوصی نیست؛ بلکه درباره ساخت زیرساخت جستجویی مقیاس‌پذیر، مقرون‌به‌صرفه و با عملکرد بسیار بالا است. با بهره‌گیری از Milvus برای ذخیره‌سازی برداری و Ollama برای استنتاج، توسعه‌دهندگان می‌توانند برنامه‌های هوش مصنوعی در سطح سازمانی ایجاد کنند که حاکمیت داده‌ها را محترم می‌شمارند بدون اینکه در سرعت یا دقت تخفیفی داده شود. کوچک شروع کنید، استراتژی‌های نمایه‌سازی خود را تکرار و بهبود بخشید و هنگامی که داده‌های شما رشد می‌کند، مقیاس‌پذیری را افزایش دهید.

Share: