تصور کنید یک عامل هوش مصنوعی را مدیریت میکنید که پس از اصلاح یک اشتباه، تمام تاریخچهٔ دلیل آن اشتباه را فراموش میکند. این نقص در حافظه، بازرسی تصمیمات مدل را غیرممکن میکند، اما معرفی Minigraf در ۵ اکتبر ۲۰۲۶ این معادله را تغییر داد. این ابزار که به عنوان «SQLite پایگاهدادههای گرافی دو-زمانی» شناخته میشود، یک سیستم جاسازیشده (Embedded) و تکفایلی است که اجازه میدهد دادههای متصل را در طول زمان به جلو و عقب ببریم.
طبق اعلام توسعهدهندگان، اکثر عاملهای فعلی هنگام اصلاح اطلاعات، با مشکل «فراموشی» یا بازنویسی دادهها مواجه هستند. اگر یک عامل متوجه شود حقیقتی اشتباه است و آن را بهروزرسانی کند، رکورد اصلی معمولاً برای همیشه پاک میشود. این موضوع باعث میشود حسابرسی تصمیمات تقریباً غیرممکن شود، زیرا عامل نمیتواند دقیقاً بازسازی کند که در لحظهٔ ارائه یک توصیه خاص، به چه چیزی باور داشت.
Minigraf این مشکل را با پیادهسازی یک مدل دو-زمانی (Bi-temporal) حل میکند. این بدان معناست که هر تکه از داده، دو برچسب زمانی را با خود حمل میکند: زمان تراکنش (Transaction Time) که لحظه ثبت داده در سیستم است، و زمان اعتبار (Valid Time) که زمانی است که آن حقیقت در دنیای واقعی صادق بوده است. این ساختار به توسعهدهندگان اجازه میدهد تا پایگاهداده را بر اساس یک شمارنده تراکنش خاص پرسوجو کنند و به طور موثری قابلیت «سفر در زمان» را برای حافظهٔ عامل فراهم آورند.
زمینه: استدلال برای استفاده از Datalog
همانطور که در تحلیلهای قبلی ما دربارهی امنیت مدلهای بازمتن اشاره کردیم، شفافیت در نحوه رسیدن مدل به پاسخ، کلید اعتماد به سیستمهای خودکار است. در همین راستا، Minigraf به جای زبانهای SQL-مانند، از Datalog استفاده میکند. توسعهدهندگان استدلال میکنند که Datalog اساساً برای گرافها برتر است چون ذاتاً بازگشتی (Recursive) است. این ویژگی باعث میشود پیمایشهای چند-گامی (Multi-hop)—مانند پیدا کردن «دوستِ دوستِ دوستِ یک نفر»—به جای تبدیل شدن به زنجیرهای پیچیده از دستورات JOIN، به شکلی طبیعی و ساده انجام شود.
فراتر از بازگشتپذیری، Datalog به این دلیل انتخاب شده است که مشخصات (Specification) کوچکتری دارد و همین امر آن را قابلاعتمادتر کرده و سرعت انتقال آن به محیط تولید (Production) را افزایش میدهد. این یک رویکرد گرافی-بومی است که در آن حقایق به صورت یالهای Entity-Attribute-Value (EAV) ذخیره میشوند. این دستور زبان یکنواخت—که از الگوهایی مانند [?e :attr ?v] بدون نیاز به تو در تو کردن زیر-پرسوجوها یا انواع JOIN استفاده میکند—برای مدل زبانی بزرگ (LLM) بسیار بهینه است. به عبارت دیگر، دستیارهای کدنویسی AI میتوانند تنها با مشاهده چند مثال در پرامپت سیستمی، پرسوجوهای صحیح Datalog را تولید کنند.
جزئیات: معماری فنی و پرسوجو
قابلیتهای فنی کلیدی این سیستم عبارتند از:
- قوانین بازگشتی: مدیریت طبیعی دسترسیهای متعددی (Transitive Reachability). برای مثال، یک قانون میتواند تعریف کند که
(reachable ?a ?b)صادق است اگر[?a :friend ?b]باشد یا اگر[?a :friend ?m]باشد و(reachable ?m ?b)برقرار باشد. - توابع پنجرهای: پشتیبانی از دستورات
sum،count،min،max،avg،rankوrow-numberبا استفاده از نحو:over (partition-by … :order-by …)در عبارتهای:find. - دستورات آماده (Prepared Statements): توانایی تجزیه و برنامهریزی یکباره یک پرسوجو با استفاده از توکنهای اتصال
$slotو اجرای هزاران باره آن برای دستیابی به عملکرد بالا. - پیکربندی صفر: پایگاهداده با یک فراخوانی ساده
Minigraf::open("data.graph")شروع به کار میکند و به هیچ تنظیمات سروری نیاز ندارد. - کنترل تراکنش: پشتیبانی از تراکنشهای صریح «همه یا هیچ» از طریق فراخوانیهای
begin_write()وcommit().
استقرار و سازگاری
این سیستم که برای محیطهای لبه (Edge) طراحی شده، با زبان Rust (نسخه ۱.۸۹ یا بالاتر) نوشته شده و طیف گستردهای از پلتفرمها را هدف قرار داده است. Minigraf برای مجموعهدادههای زیر یک میلیون گره بهینه شده است که این مقیاس و سادگی را مشابه SQLite میکند. این رویکرد بهینهسازی حافظه در لبه، یادآور تلاشهای مشابهی است که در پروژه Engrim برای کاهش هزینههای توکن حافظه مشاهده کردیم.
بر اساس مستندات پروژه در گیتهاب، این پایگاهداده در دو سطح پشتیبانی ارائه میشود:
- سطح ۱ (کاملاً تست شده): شامل Rust بومی (از طریق crates.io) و Python (از طریق PyPI). این نسخهها همزمان با هر انتشار هسته عرضه میشوند. سیستمعاملها و سیستمهای فایل پشتیبانی شده شامل لینوکس (ext4, xfs)، مک (APFS) و ویندوز (NTFS) روی دیسکهای محلی است. NFSv4 با برخی ملاحظات پشتیبانی میشود، اما NFSv3 nolock برای نویسندگان متعدد پشتیبانی نمیشود.
- سطح ۲ (آزمایشی): شامل WASM مرورگر (از طریق npm)، Node.js، جاوا/JVM (Maven Central)، اندروید (.aar)، iOS/macOS (.xcframework) و C FFI. این موارد تستهای اولیه (Smoke-tested) شدهاند و بر اساس یک برنامه زمانبندی «بهترین تلاش» عرضه میشوند. یک رابط زمانی به سطح ۱ منتقل میشود که کاربران واقعی به آن نیاز داشته باشند.
برای توسعهدهندگان موبایل، این پروژه از طریق UniFFI رابطهای بومی Kotlin و Swift را فراهم کرده است، به این معنی که هیچ دانشی از زبان Rust مورد نیاز نیست. در اندروید، توسعهدهندگان میتوانند از MiniGrafDb.open در دایرکتوری فایلهای اپلیکیشن استفاده کنند و در iOS، فایل .xcframework از طریق Swift Package Manager (SPM) ادغام میشود. این رابطها به صورت فایل .aar در Maven Central برای اندروید و .xcframework در SPM برای iOS عرضه میشوند.
بنچمارکهای عملکرد
دادههای عملکردی ارائه شده توسط توسعهدهندگان نشان میدهد که در مقیاس یک میلیون حقیقت، یک پرسوجوی نقطهای (Point Query) بین ۴.۳ تا ۴.۵ ثانیه زمان میبرد. سیستم از جستجوی انتخابی B+tree برای الگوهای محدود استفاده میکند، اگرچه اسکنهای کامل ویژگیها همچنان با پیچیدگی O(N) هستند.
بهینهسازی حافظه نیز مورد توجه قرار گرفته است. حداکثر استفاده از Heap در مقیاس یک میلیون حقیقت، ۱.۰۵ گیگابایت است که تقریباً ۲۱٪ کمتر از نسخه ۵ نرمافزار است. این بهبود ناشی از این است که ایندکسها به جای بارگذاری کامل در RAM هنگام شروع، بر اساس نیاز (On-demand) صفحهبندی و بارگذاری میشوند. زمان باز شدن در مقیاس یک میلیون حقیقت ۱.۳۱ ثانیه است که ۲.۴ برابر سریعتر از نسخه ۵ است.
دوام و محدودیتها
Minigraf محدودیتهای خاصی را برای تضمین ثبات اعمال کرده است. پایگاهدادههای فایل-محور، حداکثر اندازه سریالشده ۴۰۸۰ بایت را برای هر حقیقت اجبار میکنند، در حالی که پایگاهدادههای درون-حافظهای (In-memory) چنین محدودیتی ندارند.
دوام دادهها از طریق SyncMode مدیریت میشود. به طور پیشفرض، هر عملیات نوشتن فوراً fsync میشود (SyncMode::Full). برای بارگذاریهای حجیم یا مهاجرتهایی که میتوانند با خیال راحت از یک نقطه بازگشت (Checkpoint) دوباره اجرا شوند، توسعهدهندگان میتوانند از SyncMode::Normal برای افزایش نرخ انتقال داده استفاده کنند، هرچند تابع checkpoint() در هر دو حالت، یک fsync بدون شرط را اجرا میکند.
الگوی GraphRAG
این ابزار دقیقاً برای ترکیب با ذخیرهسازهای برداری در معماری تولید بازیابیافزا (GraphRAG) طراحی شده است. در حالی که یک ذخیرهساز برداری به سؤال «چه چیزی مشابه است؟» پاسخ میدهد، Minigraf پاسخ میدهد «روابط چیست، چه کسی آنها را ثبت کرد و در زمان T چه باوری داشتیم؟»
این ترکیب، حافظهٔ عامل را از یک لیست تخت از بردار معنایی (Embedding)—مثل کارت معرفی عددی برای هر واژه که میگوید این کلمه همسایهی چه کلمات دیگری است—به یک نقشه زمانی و ساختاریافته از دانش تبدیل میکند. این رویکرد ساختاریافته برای مدیریت حافظه، مشابه استراتژیهای استفاده از حافظه Git-native در OKF است که با هدف کاهش حجم توکنهای مصرفی و افزایش دقت بازیابی دادهها پیاده شد. یک پیادهسازی عملی از این موضوع در دموی temporal_reasoning دیده میشود، جایی که یک عامل AI از مدل دو-زمانی برای ذخیره، اصلاح و حسابرسی باورهای خود استفاده میکند.
مقایسه با سایر پایگاهدادهها
Minigraf جایگاه منحصر به فردی را اشغال میکند زیرا ویژگیهایی را ترکیب میکند که معمولاً در ابزارهای مختلف تقسیم شدهاند. در مقایسه با XTDB و Cozo، این ابزار پرسوجوهای Datalog و پشتیبانی دو-زمانی را حفظ کرده اما ماهیت «تکفایلی» و جاسازیشده SQLite را به آن اضافه کرده است. برخلاف Neo4j که یک پایگاهداده گرافی مبتنی بر سرور است، Minigraf جاسازیشده و آماده برای WASM است. در حالی که SQLite سادگی تکفایلی را ارائه میدهد، فاقد ذخیرهسازی بومی EAV و قابلیت سفر در زمان دو-زمانی است.
محدودیتهای فعلی
با وجود قابلیتها، این پروژه برای همه موارد استفاده نیست. این سیستم صراحتاً یک پایگاهداده توزیعشده نیست؛ هیچ قابلیت Clustering، Sharding یا Replication در آن وجود ندارد. هر نمونه از عامل، فایل .graph مخصوص به خود را مالک است. علاوه بر این، این یک پایگاهداده زمانی (Temporal) است، نه یک پایگاهداده سری-زمانی (Time-series)؛ به این معنی که تکامل حقایق را دنبال میکند، نه دادههای تلهمتری با فرکانس بالا را.
یک مشکل شناختهشده در نسخه ۲.x مربوط به ویژگیهای چند-مقداری (Multi-valued attributes) است. اگر دو مقدار برای یک ویژگی در یک تراکنش نوشته (یا پس گرفته) شوند، ممکن است هنگام خواندن تنها یک مقدار بازگردانده شود (#371). توسعهدهندگان توصیه میکنند هر مقدار در یک فراخوانی مجزا نوشته یا حذف شود. یک اصلاح دائمی که فرمت فایل را تغییر میدهد برای نسخه ۳.۰.۰ برنامهریزی شده است و نسخه ۲.x تا ۱۲ ماه پس از انتشار نسخه ۳.۰.۰، اصلاحات امنیتی و یکپارچگی را دریافت خواهد کرد.
این تغییر به سمت حافظه گرافی زمانی و جاسازیشده نشان میدهد که نسل بعدی عاملهای AI از پنجرههای متنی (Context Windows) ساده به سمت وضعیتهای محلی پیچیده و قابل حسابرسی حرکت خواهند کرد. با تبدیل زمان به بُعدی دیگر در یک رابطه، Minigraf زیرساختی را برای عاملهایی فراهم میکند که میتوانند در افقهای زمانی طولانی یاد بگیرند، اصلاح کنند و استدلال خود را توضیح دهند.
توسعهدهندگان در حال حاضر میتوانند مدل دو-زمانی را از طریق یک ویژوالایزر مبتنی بر مرورگر تست کنند که به آنها اجازه میدهد در زمان تراکنش و زمان اعتبار جابجا شوند تا تغییرات گراف را در زمان واقعی ببینند. این ویژوالایزر همچنین میتواند فایلهای .graph موجود را باز کند تا سناریوهایی مانند ثبت نادرست یک حقوق ماهیانه و اصلاح بعدی آن را نمایش دهد.
گام بعدی شما
- اگر روی عاملهای هوش مصنوعی کار میکنید، دمو
temporal_reasoningرا برای درک نحوه اصلاح باورها بررسی کنید. - برای کاهش هزینه زیرساخت، جایگزینی دیتابیسهای گرافی سنگین با مدل تکفایلی Minigraf در لبه (Edge) را ارزیابی کنید.
- از ویژوالایزر مرورگر-محور برای تست فایلهای
.graphو مشاهده تغییرات گراف در زمان واقعی استفاده کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو