Vector Databases

ساخت سیستم‌های RaaS امن با استفاده از چند‌سکونتی Weaviate

تولید تقویت‌شده با بازیابی (RAG) به معیار طلایی برای اتصال مدل‌های زبانی بزرگ (LLMs) به داده‌های اختصاصی تبدیل شده است. با این حال، هنگام استقرار راهکارهای RAG برای پلتفرم‌های SaaS، یک چالش حیاتی پدیدار می‌شود: جداسازی داده‌ها. در یک محیط چند‌سکونتی، اطمینان از اینکه مستأجر A هرگز اسناد متعلق به مستأجر B را بازیابی نکند، صرفاً یک بهترین شیوه نیست، بلکه یک الزام امنیتی است.

Weaviate این چالش را به‌طور بومی از طریق قابلیت‌های چند‌سکونتی خود برطرف می‌کند. برخلاف رویکردهای سنتی که ممکن است مجبور شوید مجموعه‌های جداگانه‌ای را راه‌اندازی کنید یا منطق فیلترینگ پیچیده‌ای را در لایه برنامه خود مدیریت کنید، Weaviate به شما امکان می‌دهد «فضای‌نام‌های» مجزا را درون یک مجموعه واحد ایجاد کنید. این مقاله به بررسی نحوه پیاده‌سازی مؤثر این فضای‌نام‌های برداری مجزا می‌پردازد.

درک چند‌سکونتی Weaviate

در Weaviate، یک مجموعه چند‌سکونتی به عنوان یک ظرف برای چندین مستأجر عمل می‌کند. هر مستأجر در واقع یک بخش مجزا از مجموعه است. مزیت کلیدی معماری این است که هر مستأجر مجموعه‌ای از بردارها و متادیتا را دارد که در سطح ذخیره‌سازی به‌طور فیزیکی از هم جدا شده‌اند. این بدان معناست که:

  • جداسازی عملکرد: مجموعه داده بزرگ یک مستأجر، پرس‌وجوهای مستأجر دیگر را کند نمی‌کند.
  • امنیت: پرس‌وجوها باید به‌طور صریح شناسه مستأجر را مشخص کنند، که از نشت تصادفی داده‌ها بین مستأجران جلوگیری می‌کند.
  • مقیاس‌پذیری: می‌توانید به‌راحتی مستأجران را اضافه یا حذف کنید بدون نیاز به مهاجرت داده‌ها.

مراحل پیاده‌سازی

1. پیکربندی مجموعه

برای فعال‌سازی چند‌سکونتی، باید اسکیمای مجموعه را با گزینه multiTenancyConfig پیکربندی کنید. توجه داشته باشید که این تنظیمات پس از ایجاد مجموعه قابل تغییر نیستند.

import weaviate

client = weaviate.WeaviateClient(
    connection_params=weaviate.ConnectionParams(
        from_environment()
    )
)

schema = client.collections

# Create a multi-tenant collection
collection = schema.get_or_create(
    "KnowledgeBase",
    data=weaviate.classes.data.Config(
        vector_index_config=weaviate.classes.config.VectorIndexConfig(
            vector_index_type="hnsw"
        ),
        multi_tenancy_config=weaviate.classes.config.MultiTenancyConfig(
            enabled=True
        )
    )
)

2. ورود داده‌های اختصاصی مستأجر

هنگام افزودن داده، باید tenant_id را مشخص کنید. این کار اطمینان می‌دهد که بردار در فضای‌نام مجزای صحیح ذخیره می‌شود.

# Ingest data for Tenant A
collection.data.insert(
    {
        "content": "Tenant A's proprietary documentation...",
        "category": "manual"
    },
    tenant_id="tenant_a"
)

# Ingest data for Tenant B
collection.data.insert(
    {
        "content": "Tenant B's private user guides...",
        "category": "help"
    },
    tenant_id="tenant_b"
)

3. اجرای پرس‌وجوهای مجزا

هنگام انجام جستجوهای برداری، tenant_id یک پارامتر اجباری است. اگر آن را حذف کنید، API یک خطا ایجاد می‌کند که به عنوان یک مکانیزم ایمنی عمل می‌کند.

# Query strictly within Tenant A's namespace
response = collection.query.near_text(
    query="How do I reset my password?",
    limit=5,
    tenant_id="tenant_a"
)

print(f"Results for Tenant A: {len(response.objects)}")
# This query will NEVER return Tenant B's data, even if it is semantically similar.

ملاحظات عملی برای برنامه‌های SaaS

اگرچه Weaviate جداسازی بردارها را مدیریت می‌کند، معماری برنامه شما باید زمینه مستأجر را به درستی مدیریت کند. در اینجا بهترین شیوه‌ها آورده شده است:

  1. یکپارچه‌سازی میانی‌افزار (Middleware): از میانی‌افزار API برای استخراج شناسه مستأجر از توکن احراز هویت (مثلاً JWT) و تزریق آن در زمینه کلاینت Weaviate استفاده کنید. هرگز به ورودی سمت کلاینت اجازه ندهید که شناسه مستأجر را برای عملیات حیاتی امنیتی تعیین کند.
  2. مدیریت شاخص: برای مستأجران بسیار بزرگ، در نظر بگیرید که با استفاده از ویژگی‌های partitioning Weaviate بیشتر تقسیم‌بندی کنید یا استراتژی‌های ذخیره‌سازی داغ/سرد را مدیریت کنید.
  3. یکپارچگی Embedding: اطمینان حاصل کنید که از همان مدل Embedding برای همه مستأجران استفاده می‌شود. اگرچه بردارها مجزا هستند، اما فضای Embedding ناسازگار بین مستأجران می‌تواند در صورت نیاز به تحلیل‌های بین‌مستأجری (که در سناریوهای جداسازی سخت‌گیرانه باید نادر باشد) منجر به بازیابی بهینه‌نشده شود.

نتیجه‌گیری

چند‌سکونتی Weaviate یک راهکار قوی و درجه یک برای ساخت خطوط لوله RAG مجزا در محیط‌های SaaS ارائه می‌دهد. با بهره‌گیری از فضای‌نام‌های بومی مستأجر، توسعه‌دهندگان می‌توانند جداسازی سخت‌گیرانه داده‌ها، بهبود عملکرد پرس‌وجو و مدیریت ساده‌تر منابع را به دست آورند. هنگام مقیاس‌پذیر کردن برنامه‌های RAG خود، پذیرش زودهنگام این الگو، تلاش قابل توجهی را در طراحی لایه‌های امنیتی سفارشی در آینده صرفه‌جویی می‌کند.

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

Share: