گرمای تابستان — همه‌چیز آب می‌شود، حتی قیمت‌های ما.−25%−۲۵٪ روی هر پلن سالانه، تا ۳۱ اوتدیدن پلن‌ها
EQVPS

میزبانی یک پایگاه‌داده برداری برای حافظه عامل هوش مصنوعی روی VPS

25 خرداد 1405 · 3 دقیقه مطالعه · EQVPS Team

یک عامل هوش مصنوعی بدون حافظه محکوم است در هر گفت‌وگو دوباره خودش را معرفی کند. راه‌حل یک پایگاه‌داده برداری است — embeddingهای اسناد، یادداشت‌ها یا گفت‌وگوهای گذشته شما را ذخیره می‌کند تا عامل بتواند بخش‌های مرتبط را در صورت نیاز به یاد بیاورد (همان «R» در RAG). می‌توانید آن را به صورت یک سرویس مدیریت‌شده اجاره کنید، یا خودتان روی یک VPS اجرایش کنید و داده‌هایتان را — که اغلب داده‌های خصوصی شماست — روی سروری که خودتان کنترل می‌کنید نگه دارید. اینجا می‌بینیم چگونه، و واقعاً چقدر RAM می‌گیرد.

دو گزینه خوب

به چیز عجیب و غریبی نیاز ندارید. دو مسیر تقریباً همه را پوشش می‌دهند:

pgvector — یک افزونه Postgres. اگر همین حالا Postgres را اجرا می‌کنید (یا مایل هستید)، این جست‌وجوی برداری را به پایگاه‌داده‌ای که همین حالا دارید اضافه می‌کند. یک سرویس، یک بکاپ، ‏SQL که بلدید. با فاصله زیاد، کم‌دردسرترین شروع.

Qdrant — یک موتور برداری اختصاصی. وقتی سراغش بروید که تعداد زیادی بردار دارید (چند میلیون به بالا) یا فیلترینگ سریع فراداده و یک API اختصاصی می‌خواهید. سرویس جداگانه‌ای است که باید اجرا کنید، اما دقیقاً برای همین کار ساخته شده است.

برای بیشتر عامل‌هایی که تازه دارند جا می‌افتند، pgvector پاسخ اول درست است. وقتی از آن بزرگ‌تر شدید سراغ Qdrant بروید، نه زودتر.

واقعیت RAM (این بخشی است که مردم دست‌کم می‌گیرند)

جست‌وجوی برداری سریع است چون ایندکس در حافظه زندگی می‌کند — پس RAM، نه دیسک، محدودیت واقعی شماست. یک راهنمای سرانگشتی:

پس برای ایندکس اندازه بگیرید، نه برای فایل. (همان منطق راهنمای اندازه‌گیری عمومی — چیز سنگین تا وقتی اندازه نگیرید آشکار نیست.)

شروع سریع: pgvector

روی سروری که Postgres دارد (‏Docker ساده‌ترین است — همان الگوی خودمیزبانی n8n):

CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE memory (
  id bigserial PRIMARY KEY,
  content text,
  embedding vector(1536)        -- match your embedding model's dimensions
);

-- after you have data, build an index for fast search:
CREATE INDEX ON memory USING hnsw (embedding vector_cosine_ops);

عامل شما content را به‌علاوه embedding آن درج می‌کند، سپس با ORDER BY embedding <=> $query_embedding LIMIT 5 پرس‌وجو می‌کند تا نزدیک‌ترین حافظه‌ها را بیرون بکشد. کل حلقه همین است.

Qdrant را ترجیح می‌دهید؟ یک کانتینر Docker است که یک API از نوع HTTP/gRPC ارائه می‌دهد؛ یک collection با اندازه بردار خود می‌سازید و pointها را upsert می‌کنید. همان ایده، موتور اختصاصی.

آیا می‌تواند یک سرور را با عامل به اشتراک بگذارد؟

بله — برای ذخیره‌سازهای حافظه کوچک تا متوسط، پایگاه‌داده برداری را روی همان VPS عامل اجرا کنید. ساده‌تر است و تأخیر عملاً صفر. تنها زمانی آن‌ها را روی سرورهای جدا تقسیم کنید که یکی شروع به بیرون‌راندن دیگری از RAM کند. این تصمیمی است برای بعد و از جنس مسئله‌های خوب، نه دغدغه روز اول.

هشدارهای صادقانه

با رعایت این نکات، یک ذخیره‌ساز برداری خودمیزبان راهی تمیز است برای دادن حافظه پایدار به یک عامل، بدون سپردن داده‌های خصوصی‌تان به شخص ثالث. با pgvector روی یک سرور ۲ گیگابایتی شروع کنید، حواس‌تان به RAM باشد، و تنها زمانی که اعداد به شما می‌گویند به Qdrant یا یک پلن بزرگ‌تر مهاجرت کنید.

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

pgvector یا Qdrant — کدام را خودمیزبان کنم؟

اگر همین حالا Postgres را اجرا می‌کنید (یا می‌خواهید یک پایگاه‌داده هم برای داده‌های اپ و هم برای embeddingها داشته باشید)، pgvector کم‌دردسرترین گزینه است — فقط یک افزونه است. اگر میلیون‌ها بردار دارید یا موتوری اختصاصی با فیلترینگ سریع می‌خواهید، Qdrant ارزش یک سرویس جدا را دارد. برای بیشتر عامل‌هایی که تازه شروع می‌کنند، pgvector روی Postgres کاملاً کافی است.

یک پایگاه‌داده برداری به چقدر RAM نیاز دارد؟

بیشتر از آن چیزی که حدس می‌زنید، چون جست‌وجوی خوب می‌خواهد ایندکس در حافظه باشد. یک قاعده سرانگشتی: چند صد هزار embedding به‌راحتی در ۲ گیگابایت جا می‌گیرند؛ وقتی به چند میلیون رسیدید، برای ۴ گیگابایت به بالا برنامه‌ریزی کنید و ایندکس را تنظیم کنید. از ۲ گیگابایت شروع کنید، حافظه را زیر نظر داشته باشید و وقتی جست‌وجو کند شد اندازه را بزرگ‌تر کنید.

چرا به جای یک سرویس مدیریت‌شده، ذخیره‌ساز برداری را خودمیزبان کنم؟

دو دلیل که مردم واقعاً به‌خاطرش این کار را می‌کنند: embeddingهای شما اغلب داده‌های خصوصی‌تان را در خود دارند (یادداشت‌ها، اسناد، محتوای مشتریان)، و یک ذخیره‌ساز خودمیزبان آن را روی سروری که خودتان کنترل می‌کنید نگه می‌دارد. و هزینه‌اش ثابت است — یک سرویس برداری مدیریت‌شده بر اساس تعداد بردار و پرس‌وجو صورت‌حساب می‌کند، در حالی که VPS یک عدد ماهانه بدون کنتور به‌ازای هر پرس‌وجو است.

آیا یک پایگاه‌داده برداری و عامل من می‌توانند روی یک VPS اجرا شوند؟

بله، برای بارهای کاری کوچک تا متوسط — قرار دادن عامل و یک نمونه pgvector/Qdrant روی یک سرور ساده است و تأخیر را تقریباً به صفر می‌رساند. تنها زمانی آن‌ها را روی سرورهای جدا تقسیم کنید که یکی شروع به گرسنه نگه‌داشتن دیگری از نظر RAM کند، که مسئله خوبی است برای بعد، نه دغدغه روز اول.

آیا embeddingها دیسک زیادی می‌گیرند؟

یک embedding تنها چند کیلوبایت است، پس یک میلیون از آن‌ها چند گیگابایت به‌علاوه سربار ایندکس است — قابل توجه اما نه عظیم. ۲۵ تا ۴۵ گیگابایت دیسک یک ذخیره‌ساز حافظه قابل توجه را برای بیشتر عامل‌ها پوشش می‌دهد. معمولاً RAM، نه دیسک، اولین محدودیتی است که به آن برمی‌خورید.

← بازگشت به وبلاگ← پلن‌ها و قیمت‌ها

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.