ساخت سیستمهای تولید تقویتشده بازیابی (RAG) برای پلتفرمهای SaaS سازمانی چالشی منحصربهفرد را مطرح میکند: ایزولهسازی داده. برخلاف برنامههای تکمستأجری، محیطهای چند مستأجری به مرزهای سختگیرانه بین مشتریان نیاز دارند. اگرچه Weaviate چند مستأجری بومی را ارائه میدهد، اما صرفاً جدا کردن تکهها بر اساس مستأجر اغلب برای امنیت سطح سازمانی کافی نیست. این مقاله بررسی میکند که چگونه میتوان ایندکسهای ایزوله Weaviate را با امنیت سطح ردیف (RLS) در سطح برنامه ترکیب کرد تا یک معماری RAG امن و مقیاسپذیر ایجاد شود.
درک چند مستأجری Weaviate
ویژگی چند مستأجری Weaviate به شما امکان میدهد دادههای مستأجران مختلف را در یک مجموعه واحد ذخیره کنید، در حالی که ایزولهسازی فیزیکی یا منطقی را حفظ میکنید. هر مستأجر مجموعهای از بردارها را در اختیار دارد که به طور مؤثر زیرمجموعههایی را ایجاد میکند. این کار در مقایسه با ایجاد یک مجموعه جداگانه برای هر مشتری، سربار منابع را کاهش میدهد، اما به مدیریت دقیق کنترل دسترسی نیاز دارد.
مزیت کلیدی، عملکرد است. پرسوجوها به مستأجران خاص محدود میشوند و اطمینان حاصل میشود که عملیات جستجو فقط از روی شارد دادههای مرتبط عبور میکنند. با این حال، این به طور خودکار مجوزهای سطح کاربر را درون یک مستأجر مدیریت نمیکند. جایی که امنیت سطح ردیف وارد عمل میشود.
پیادهسازی امنیت سطح ردیف با فیلترگذاری متادیتا
RLS در Weaviate معمولاً از طریق فیلترگذاری متادیتا اعمال میشود. با برچسب زدن هر بردار با ویژگیهای اضافی مانند department، role یا project_id، میتوانید محدود کنید که کاربر میتواند کدام مستندات را بازیابی کند. برای مثال، یک "مدیر مالی" ممکن است فقط مستنداتی را ببیند که با department: finance برچسب زده شدهاند، در حالی که یک "مهندس" department: engineering را میبیند.
اینجاست که چگونه میتوانید دادههای خود را برای پشتیبانی از RLS ساختار دهید:
import weaviate
import json
client = weaviate.Client("http://localhost:8080")
# تعریف یک مستند با متادیتای مرتبط با RLS
document = {
"title": "Q3 Financial Report",
"content": "Detailed analysis of Q3 earnings...",
"tenant": "acme-corp",
"department": "finance",
"clearance_level": "senior"
}
# افزودن به Weaviate با زمینه مستأجر مناسب
client.data_object.create(
data=doc,
collection="RAG_Documents",
tenant="acme-corp"
)
ساخت خط لوله پرسوجوی امن
هنگام انجام یک پرسوجوی RAG، باید دو لایه فیلترگذاری را اعمال کنید: ایزولهسازی مستأجر و امنیت سطح ردیف. لایه برنامه باید زمینه کاربر را متوقف کند و به طور پویا پرسوجوی فیلتر را بسازد.
def secure_rag_query(client, user_context, query_text):
tenant = user_context["tenant"]
department = user_context["department"]
# ساخت فیلتر برای RLS
rls_filter = {
"where": {
"path": ["department"],
"operator": "Equal",
"valueText": department
}
}
# انجام جستجوی هیبریدی با مستأجر و فیلتر
results = client.query.get(
collection="RAG_Documents",
properties=["title", "content"],
limit=5
).with_tenant(tenant).with_where_filter(rls_filter).with_nearest_neighbor(
query_text
).do()
return results
بهترین روشها برای استقرار سازمانی
اولاً، هرگز به فیلترهای سمت کلاینت اعتماد نکنید. همیشه RLS را در سمت سرور با استفاده از کلاینت پایتون یا Go Weaviate اعمال کنید. ثانیاً، از نامگذاری یکپارچه برای شناسههای مستأجر برای جلوگیری از تعارض استفاده کنید. ثالثاً، تأخیر پرسوجوها را پایش کنید، زیرا فیلترهای پیچیده میتوانند بر عملکرد تأثیر بگذارند؛ در صورت نیاز، در نظر بگیرید که امبدینگها را برای زیرمجموعههای فیلترشده از قبل محاسبه کنید. در نهایت، برای ردیابی اینکه کدام مستندات توسط کدام کاربران دسترسی پیدا میکنند، ثبت رویداد (logging) را برای رعایت ممیزی پیادهسازی کنید.
نتیجهگیری
ترکیب چند مستأجری Weaviate با امنیت قوی سطح ردیف، پایهای قدرتمند برای سیستمهای RAG سازمانی فراهم میکند. با ایزوله کردن ایندکسها برای هر مستأجر و اعمال کنترل دسترسی ریزبینانه از طریق متادیتا، میتوانید بازیابی دانش شخصیسازی شده و امن را ارائه دهید که با رشد کسبوکار شما مقیاسپذیر است. با مرکزیتر شدن برنامههای هوش مصنوعی در عملیات سازمانی، تسلط بر این الگوهای امنیتی دیگر اختیاری نیست—ضروری است.