پشته GraphRAG شما دو پایگاه داده است. باید یکی باشه
{
“title”: “پایگاه داده سامیاما: ادغام جستجو و استدلال گراف”,
“content”: “
سامیاما گراف: پایگاه دادهای یکپارچه برای جستجو و استدلال
n
اکثر سیستمهای موجود در زمینه GraphRAG تا کنون به دو لایه مختلف تقسیم شدهاند: یکی برای ذخیرهسازی برداری که به جستجوی معنایی پرداخته و دیگری برای ذخیرهسازی گراف که به استدلال رابطهای میپردازد. این ساختار دو لایه با چالشهای اساسی همراه است؛ به خصوص در زمینه پیوندی که بین جستجوی معنایی و پیمایش گراف وجود دارد، که این پیوند در کد برنامه و نه در موتور پایگاه داده اتفاق میافتد. این موضوع موجب از دست رفتن کنترل پرسوجو و کاهش بهینهسازی همزمان جستجو و پیمایش میشود.
n
سامیاما گراف (Samyama Graph) یک پایگاه داده بومی زبان Rust است که این دو سیستم را در یک موتور واحد ادغام کرده است. ویژگیهای برجسته آن شامل: پرسوجو به سبک OpenCypher، جستجوی برداری HNSW، الگوریتمهای گراف، پروتکل سازگار با Redis و استقرار به صورت تکباینری میباشد.
n
مزایا:
n
- n
- کاهش وابستگی کد: حذف نیاز به انتقال شناسهها و امتیازات بین سیستمها.
- توضیحپذیری ذاتی: مسیرهای گراف به طور طبیعی دلایل بازیابی را نشان میدهند، که این امر در حوزههای پزشکی و مالی اهمیت ویژهای دارد.
- بهینهسازی یکپارچه: ترکیب فیلتر ساختاری، رتبهبندی هیبریدی و پیمایش در لایه ذخیرهسازی.
- مناسب برای دادههای پیچیده: شامل نمودارهای دانش زیستی، کشف تقلب و زنجیره تأمین.
n
n
n
n
n
سامیاما گراف در حال توسعه مداوم است و به عنوان ابزاری متنباز برای توسعهدهندگانی که در زمینه GraphRAG، دانشنامهها و زیرساختهای هوش مصنوعی فعالیت میکنند، در GitHub در دسترس است.
n
اکثر سیستمهای GraphRAG امروزی به صورت حداقل با دو لایه ذخیرهسازی طراحی میشوند.
n
یک سیستم مختص ذخیرهسازی بردارها است.
n
سیستم دیگر مختص ذخیرهسازی روابط میباشد.
n
پایگاه داده برداری به سوالاتی نظیر:
n
n
کدام بخشها، موجودیتها، اسناد یا مفاهیم از نظر معنایی به این پرسش نزدیکتر هستند؟
n
n
در حالی که پایگاه داده گراف به سوالاتی نظیر:
n
n
این موجودیتها چگونه به یکدیگر مرتبط هستند و چه مسیرهایی این ارتباط را توضیح میدهند؟
n
n
پاسخ میدهد. اگرچه این معماری کار میکند، ولی یک مشکل اساسی وجود دارد:
n
پیوند بین بازیابی معنایی و استدلال گراف در خارج از پایگاه داده انجام میشود.
n
این پیوستگی معمولاً در کد برنامه، کد هماهنگ یا گردش کار عامل به وقوع میپیوندد. به این صورت که برنامه تطابقهای برداری را بازیابی کرده و آنها را به پایگاه داده گراف ارسال میکند و سپس پیمایش را انجام میدهد. در نهایت، از یک LLM (مدل زبان بزرگ) برای جمعآوری پاسخ نهایی درخواست میکند.
n
این روش کار میکند، اما ایدئال نیست.
n
زمانی که اتصال به خارج از پایگاه داده جابجا میشود، برنامهریز پرسوجو کنترل خود را از دست میدهد.
n
در این حالت، سیستم نمیتواند جستجوهای برداری، پیمایش گراف، فیلتر کردن، رتبهبندی و الگوریتمهای گراف را به طور همزمان بهینه کند، زیرا هر لایه تنها بخشی از مشکل را درک میکند.
n
این مشکل معماریای است که ما در حال بررسی آن هستیم نمودار سامیاما.
n
سامیاما گراف یک پایگاه داده گراف برداری بومی Rust است که برای GraphRAG، نمودارهای دانش، حافظه عامل هوش مصنوعی و تجزیه و تحلیل روابط در مقیاس بزرگ طراحی شده است.
n
این پایگاه داده عناصر زیر را گرد هم میآورد:
n
- n
- پرسوجو به سبک OpenCypher
- جستجوی برداری
- الگوریتمهای گراف
- دسترسی سازگار با Redis
- زمان اجرای Rust به صورت تک باینری
n
n
n
n
n
n
ایده اصلی این است که:
n
n
پیمایش گراف و جستجوی برداری نباید همیشه در سیستمهای جداگانه اجرا شوند. برای بسیاری از کارهای مربوط به GraphRAG، آنها باید به یک موتور تعلق داشته باشند.
n
n
n
چرا GraphRAG به چیزی فراتر از جستجوی برداری نیاز دارد؟
n
n
جستجوی برداری در پیدا کردن شباهتهای معنایی بسیار موثر است.
n
این قابلیت را دارد که متن، موجودیتها یا اسنادی که “نزدیک” به یک پرسش هستند، شناسایی کند. این ویژگی برای RAG بسیار ارزشمند است.
n
اما جستجوی برداری به تنهایی نمیتواند روابط را درک کند.
n
به عنوان مثال، اگر کاربر بپرسد:
n
n
کدام کارآزماییهای بالینی با یک دارو، یک مسیر، و یک وضعیت مرتبط هستند؟
n
n
یک سیستم جستجوی برداری ممکن است اسناد مرتبط را پیدا کند، اما نمیتواند به طور طبیعی پاسخ دهد:
n
- n
- کدام دارو به چه شرایطی مرتبط است؟
- کدام مسیر اینها را به هم وصل میکند؟
- کدام مقاله این ارتباط را تأیید میکند؟
- کدام کارآزمایی بالینی مرتبط است؟
- کدام مسیر از طریق نمودار دانش پاسخ را توضیح میدهد؟
n
n
n
n
n
n
اینها سوالات نموداری هستند.
n
یک نمودار میتواند ارتباطات و روابط را به طور مستقیم نمایش دهد:
n
Drug -> targets -> ProteinnProtein -> participates_in -> PathwaynPathway -> associated_with -> ConditionnCondition -> studied_in -> ClinicalTrialnPaper -> supports -> Relationship
n
اینجاست که GraphRAG به طرز قابل توجهی از RAG اولیه پیشرفتهتر میشود.
n
به جای اینکه فقط متن مشابه را بازیابی کند، سیستم میتواند موجودیتهای مرتبط را پیدا کند و سپس بر روی روابط استدلال کند.
n
n
معماری متداول GraphRAG
n
n
یک معماری متداول GraphRAG به شکل زیر است:
n
پرسش کاربرn↓nمدل تعبیهn↓nپایگاه داده برداریn↓nکد برنامه / منطق عاملn↓nپایگاه داده گرافn↓nکد برنامه / رتبهبندی مجددn↓nپاسخ LLM
n
این روش عملی است اما پیچیدگیهایی را به همراه دارد.
n
برنامه باید تصمیماتی بگیرد:
n
- n
- چند نتیجه برداری باید بازیابی شود؟
- کدام شناسهها باید به گراف ارسال شوند؟
- چقدر باید پیمایش انجام شود؟
- کدام مسیرها اهمیت دارند؟
- چطور نمرات گراف و برداری را ترکیب کنیم؟
- چگونه از بافت تکراری، نامربوط یا ضعیف جلوگیری کنیم؟
- چگونه توضیح دهیم که چرا زمینه نهایی انتخاب شده است؟
n
n
n
n
n
n
n
n
به مرور زمان، لایه ارکستراسیون به یک موتور جستجوی سفارشی تبدیل میشود.
n
اما واقعاً یک موتور پرسوجو نیست. معمولاً مدل هزینه، بهینهسازی یکپارچه و درک عمیق از طرح داده در هر دو حالت بازیابی ندارد.
n
این نشاندهنده یک مشکل طراحی است.
n
اگر برنامه اتصال بین جستجوی برداری و پیمایش گراف را مدیریت کند، پایگاه داده دیگر قادر به حل مشکل بازیابی کامل نخواهد بود.
n
n
رویکرد طراحی جدید
n
n
سامیاما گراف یک رویکرد جدید را دنبال میکند.
n
به جای اینکه نمودار و بردار را به عنوان ذخیرههای جداگانه در نظر بگیرد، بررسی میکند که چه اتفاقی میافتد وقتی که هر دو بخش از یک موتور پایگاه داده هستند.
n
هدف این است که گردش کاری را پشتیبانی کند که در آن توسعهدهندگان بتوانند:
n
- n
- بازیابی معنایی
- تطبیق الگوی گراف
- پیمایش روابط
- الگوریتمهای گراف
- فیلتر ساختاری
n
n
n
n
n
n
را در یک سیستم ترکیب کنند.
n
در عمل، این امر اهمیت دارد زیرا GraphRAG به ندرت فقط “نزدیکترین بخشها” را پیدا میکند.
n
یک پرسش مفید در GraphRAG غالباً به این صورت خواهد بود:
n
n
مفاهیم مرتبط معنایی را پیدا کنید، سپس از طریق روابط قابل اعتماد گسترش دهید، بر اساس نوع موجودیت فیلتر کنید، بر اساس ساختار گراف رتبهبندی کنید و یک مسیر قابل توضیح ارائه دهید.
n
n
این یک مشکل بردار گراف است.
n
نه تنها یک مشکل برداری.
n
n
چرا یک موتور میتواند مفید باشد
n
n
نزدیک نگه داشتن پیمایش گراف و جستجوی برداری به همدیگر مزایای زیادی به همراه دارد.
n
n
1. کد ارکستراسیون کمتر
n
n
زمانی که بردار و گراف به طور جداگانه عمل میکنند، نیاز به کد چسب بیشتری احساس میشود.
n
توسعهدهندگان باید منطق سفارشی بنویسند تا شناسهها، امتیازات، ابردادهها و فیلترها را بین سیستمها جابجا کنند.
n
یک موتور میتواند این سطح را کاهش دهد.
n
n
2. توضیحپذیری بهتر
n
n
سیستمهای GraphRAG باید علاوه بر بازگرداندن یک پاسخ، توضیح دهند که چرا آن پاسخ بازیابی شده است.
n
نمودارها به طور طبیعی قابل توضیح هستند زیرا میتوانند مسیرها را نمایش دهند:
n
پرسشn-> موجودیت مطابقت یافتهn-> مفهوم مرتبطn-> منبع حمایتکنندهn-> زمینه پاسخ نهایی
n
این امر به ویژه در حوزههایی مانند مراقبتهای بهداشتی، مالی، امنیت سایبری، انطباق و مدیریت دانش سازمانی اهمیت دارد.
n
n
3. مناسبتر برای دادههای پیچیده
n
n
برخی از دادهها به طور طبیعی به هم متصل میشوند:
n
- n
- دانش زیست پزشکی
- آزمایشهای بالینی
- شبکههای کلاهبرداری
- وابستگیهای زیرساختی
- معماری نرمافزار
- روابط زنجیره تأمین
- نمودارهای دانش سازمانی
- حافظه عامل
n
n
n
n
n
n
n
n
n
برای این گونه بارهای کاری، روابط فراداده اختیاری نیستند و هسته اصلی مسئله به شمار میروند.
n
n
4. تجربه توسعهدهنده بهینهتر
n
n
یک پایگاه داده گراف برداری میتواند به راحتی استدلال پشته را تسهیل کند.
n
به جای اینکه بپرسند:
n
n
کدام پایگاه داده مالک این بخش بازیابی است؟
n
n
توسعهدهندگان میتوانند بپرسند:
n
n
چه پرسوجویی از نوع بردار گراف باید اجرا کنم؟
n
n
n
چرا سامیاما گراف؟
n
n
سامیاما گراف به زبان Rust نوشته شده است.
n
Rust برای زیرساخت پایگاه داده بسیار مناسب است زیرا کنترل قوی بر حافظه، عملکرد و همزمانی را بدون نیاز به زمان اجرا جمعآوری شده ارائه میدهد.
n
این موضوع در مورد پایگاه داده گراف-برداری اهمیت دارد.
n
بار کاری گراف میتواند به شدت حافظهبر باشد و جستجوی برداری ممکن است نیاز به محاسبات سنگینی داشته باشد. ترکیب هر دو در یک موتور نیاز به توجه بسیار به عملکرد و اجرای قابل پیشبینی دارد.
n
زنگ به ما یک پایه قوی برای این هدف ارائه میدهد.
n
n
آنچه سامیاما گراف امروز حمایت میکند
n
n
سامیاما گراف در حال حاضر بر روی موارد زیر تمرکز دارد:
n
- n
- پرسوجو به سبک OpenCypher
- جستجوی برداری مبتنی بر HNSW
- الگوریتمهای گراف
- دسترسی به پروتکل سازگار با Redis
- استقرار به صورت تکباینری
- راهاندازی محلی مبتنی بر داکر
- نمودار دانش و بارهای کاری به سبک GraphRAG
n
n
n
n
n
n
n
n
این تلاش نمیکند که همه پایگاه دادهها به طور همزمان عمل کنند.
n
هدف این است که برای توسعهدهندگانی که به استدلال دادههای متصل و بازیابی معنایی در یک سیستم نیاز دارند، مفید باشد.
n
n
محدودیتهای کنونی
n
n
سامیاما گراف هنوز در حال رشد است و ما میخواهیم در این مورد شفاف باشیم.
n
امروز چند محدودیت اصلی وجود دارد:
n
- n
- پشتیبانی OpenCypher هنوز کامل نشده است.
- محصول و اکوسیستم همچنان در حال تکامل است.
- نمونهها، ادغامها و آموزشها در حال گسترش هستند.
- برخی ادعاهای بزرگتر نیاز به پشتیبانی تکرارپذیری عمومی بیشتری دارند.
n
n
n
n
n
ما معتقدیم که زیرساختهای متنباز زمانی اعتبار مییابند که نقاط قوت و ضعف فعلی به روشنی شناخته شوند.
n
n
با سامیاما گراف چه میتوانید بسازید؟
n
n
سامیاما گراف زمانی مفید است که برنامه شما به هر دو استدلال دادههای متصل و بازیابی معنایی نیاز دارد.
n
نمونههایی از کاربردهای آن عبارتند از:
n
- n
- سیستمهای GraphRAG که جستجوی برداری را با پیمایش گراف ترکیب میکنند.
- برنامههای کاربردی نمودار دانش برای دادههای سازمانی، تحقیقاتی، مراقبتهای بهداشتی و عملیاتی.
- حافظه عامل هوش مصنوعی که در آن موجودیتها، ابزارها، اقدامات و زمینه به عنوان یک نمودار ذخیره میشوند.
- نمودارهای زیست پزشکی و بالینی شامل مقالات، آزمایشات، مسیرها، داروها و شرایط.
- نمودارهای تقلب و تحقیق برای کشف روابط و تجزیه و تحلیل الگوها.
- نمودارهای زیرساخت و وابستگی برای تجزیه و تحلیل تأثیر و کاوش ریشه.
- تجزیه و تحلیل گراف در مقیاس بزرگ با استفاده از الگوریتمهای گراف داخلی.
n
n
n
n
n
n
n
n
n
آن را به صورت محلی امتحان کنید
n
n