معرفی
«پیجیوکتور» (pgvector) یک افزونه متنباز برای PostgreSQL است که نوع داده برداری، عملگرهای محاسبه فاصله و ایندکسهای جستوجوی تقریبی را به این پایگاه داده اضافه میکند. با آن میتوانید بردار «نهفته» (Embedding) تولیدشده از متن، تصویر یا دیگر دادهها را کنار دادههای رابطهای معمول ذخیره و بر اساس شباهت جستوجو کنید. نوعهای داده و عملگرهای فاصله در مستندات رسمی pgvector توضیح داده شدهاند.
کاربرد شناختهشده pgvector در ساخت سامانههای «تولید تقویتشده با بازیابی» (Retrieval-Augmented Generation یا RAG) است. برای نمونه، تیم میتواند بردارهای نهفته بخشهای اسناد را در یک جدول PostgreSQL نگه دارد، بخشهای نزدیک به پرسش کاربر را بازیابی کند و آنها را به مدل زبانی بدهد. Python میتواند برای تولید و ثبت بردارها به کار رود و LangChain یا OpenAI API نیز نمونههایی از ابزارهای ساخت جریان بازیابی یا تولید بردار نهفته هستند.
مهندسان هوش مصنوعی، توسعهدهندگان بکاند و مهندسان داده معمولاً زمانی به سراغ pgvector میروند که از پیش PostgreSQL دارند و نمیخواهند برای حجم و نیاز فعلی پروژه، یک پایگاه داده برداری مستقل راهاندازی کنند. SQL، فیلترهای فراداده، تراکنشها و کنترل دسترسی PostgreSQL در همان پشته باقی میمانند. در ایران نیز انتخاب سرویس PostgreSQL مدیریتشده باید پس از بررسی پشتیبانی واقعی آن سرویس از افزونه pgvector و محدودیتهای عملیاتی تیم انجام شود.
شروع و ارزیابی عملی
پیش از انتخاب سرویس یا نصب محلی، پشتیبانی PostgreSQL از افزونه را بررسی کنید و pgvector را طبق راهنمای نصب رسمی فعال کنید.
ستون vector را با بُعدی برابر بُعد خروجی مدل تولیدکننده بردار نهفته بسازید؛ تغییر مدل با بُعد متفاوت معمولاً به بازتولید و ذخیرهسازی دوباره بردارها نیاز دارد.
ابتدا با جستوجوی دقیق و داده واقعی پروژه، یک خط مبنا بسازید. سپس IVFFlat و HNSW را طبق مستندات IVFFlat و مستندات HNSW آزمایش کنید.
هر گزینه را با Recall نسبت به نتایج دقیق، تأخیر جستوجو، زمان ساخت ایندکس و مصرف حافظه بسنجید. نتیجه به داده، پارامترهای ایندکس، تنظیمات جستوجو و بار کاری وابسته است.
pgvector جایگزین تولید بردار نهفته یا ارزیابی کیفیت بازیابی نیست. انتخاب مدل، تعریف معیار مرتبطبودن، طراحی فیلترها و سنجش تأخیر و Recall همچنان بر عهده تیم است. در مقیاسهای بسیار بزرگ یا نیازهای تخصصی جستوجوی برداری، مقایسه آن با موتورهای اختصاصی با داده و بار کاری واقعی ضروری است.
این ابزار را با نامهای دیگری نیز میشناسند:
- پیجی وکتور
ویژگیهای کلیدی
در ادامه، مهمترین موارد این بخش به تفکیک معرفی شدهاند.
-
نوع داده vector در PostgreSQL
بردارهای با بُعد مشخص را در ستون جدول ذخیره میکند تا بردار نهفته و دادههای رابطهای در یک پایگاه داده بمانند.
-
چند معیار شباهت و فاصله
از فاصله اقلیدسی، ضرب داخلی، شباهت کسینوسی، فاصله منهتن و معیارهای دیگر پشتیبانی میکند. معیار باید با مدل بردار نهفته و هدف بازیابی هماهنگ باشد. مستندات: github.com
-
جستوجوی دقیق با SQL
میتوانید با مرتبسازی بر اساس عملگر فاصله، نزدیکترین بردارها را دقیق پیدا کنید و همزمان شرطهای SQL و فیلترهای فراداده را اعمال کنید.
-
ایندکسهای IVFFlat و HNSW
برای جستوجوی تقریبی، IVFFlat و HNSW ارائه میکند. تفاوت Recall، زمان ساخت و مصرف حافظه به داده و تنظیمات وابسته است. مستندات: github.com
-
ترکیب جستوجوی برداری و فیلتر رابطهای
میتوان نتایج را بر اساس شناسه سازمان، زبان، نوع سند، سطح دسترسی یا تاریخ محدود کرد؛ قابلیتی مهم برای دادههای چندمستاجری و کنترل دسترسی.
-
سازگاری با اکوسیستم PostgreSQL
از ابزارهای موجود PostgreSQL برای مهاجرت، پشتیبانگیری، تراکنش، تکرار داده و مدیریت دسترسی استفاده میکند و نیاز به پشته عملیاتی جداگانه را کاهش میدهد.
کاربردها
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
بازیابی اسناد برای سامانه RAG
بردار نهفته بخشهای اسناد را ذخیره میکنید، برای پرسش کاربر نزدیکترین بخشها را مییابید و متن بازیابیشده را به مدل زبانی میفرستید.
-
جستوجوی معنایی در محتوا
کاربر میتواند به زبان طبیعی جستوجو کند، حتی اگر واژههای پرسش او دقیقاً در عنوان یا متن سند وجود نداشته باشند.
-
پیشنهاد محتوای مشابه
مقاله، محصول، دوره یا آیتمهای مشابه را با مقایسه بردار نهفته محتوای فعلی با بردارهای ذخیرهشده پیشنهاد میدهید.
-
بازیابی با فیلترهای دسترسی
در دستیار سازمانی، ابتدا دامنه داده را با سطح دسترسی یا واحد سازمانی محدود میکنید و سپس جستوجوی شباهت را روی همان دادهها اجرا میکنید.
-
نمونهسازی سریع محصول هوش مصنوعی
برای محصولی که PostgreSQL دارد، بدون افزودن سرویس برداری مستقل، فرضیه جستوجوی معنایی یا RAG را با داده و بار کاری واقعی آزمایش میکنید.
پرسشهای رایج درباره پیجیوکتور (pgvector)
اگر درباره این ابزار پرسشی دارید، ممکن است پاسخ آن را در میان موارد زیر پیدا کنید.
آیا pgvector خودش بردار نهفته تولید میکند؟
خیر. pgvector بردارها را ذخیره و جستوجو میکند. باید بردار نهفته را با یک مدل یا API دیگر تولید کنید و سپس در PostgreSQL ثبت کنید.
آیا برای استفاده از pgvector باید PostgreSQL داشته باشم؟
بله. pgvector افزونه PostgreSQL است و روی یک نصب یا سرویس سازگار با PostgreSQL فعال میشود. پیش از انتخاب سرویس مدیریتشده، پشتیبانی آن از این افزونه را بررسی کنید.
تفاوت HNSW و IVFFlat در pgvector چیست؟
هر دو ایندکس جستوجوی تقریبی هستند. HNSW و IVFFlat را باید با داده خود مقایسه کنید. Recall، تأخیر، زمان ساخت و مصرف حافظه به تنظیمات ایندکس و جستوجو، داده و بار کاری وابستهاند. مستندات رسمی: github.com و github.com
آیا pgvector برای پروژههای RAG مناسب است؟
برای بسیاری از پروژههای RAG، بهویژه وقتی PostgreSQL از قبل در پشته وجود دارد، مناسب است. کیفیت پاسخ به انتخاب مدل بردار نهفته، بخشبندی اسناد، فیلترها و ارزیابی بازیابی وابسته است.
چه زمانی پایگاه داده برداری مستقل را بررسی کنم؟
اگر حجم بردار، نرخ جستوجو، نیاز به توزیعشدگی یا قابلیتهای بازیابی از ظرفیت عملیاتی PostgreSQL شما فراتر میرود، گزینههای اختصاصی را با داده و بار کاری واقعی مقایسه کنید. Recall، تأخیر، زمان ساخت ایندکس و مصرف حافظه را بسنجید.