خلفيات الذاكرة

تطبق جميع الواجهات الخلفية نفس MemoryService trait، لذلك تختار واحدة عن طريق تمكين علامة ميزة وبنائها — لا يتغير رمز الـ Agent الخاص بك. يوجد ستة.

لمحة سريعة

الواجهة الخلفيةالميزةالاستمراريةالبحثيُستخدم عندما
InMemoryMemoryService(افتراضي)للعملية فقطكلمة مفتاحيةالتطوير، الاختبارات، العروض التوضيحية
SqliteMemoryServicesqlite-memoryملفكلمة مفتاحيةتطبيقات العقدة الواحدة، الاستمرارية المحلية
PostgresMemoryServicedatabase-memoryPostgres + pgvectorتشابه المتجهاتالبحث الدلالي للإنتاج
RedisMemoryServiceredis-memoryRedis (اختياري TTL)كلمة مفتاحيةذاكرة تخزين مؤقت سريعة، شبه مؤقتة، مشتركة
MongoMemoryServicemongodb-memoryMongoDBكلمة مفتاحية / متجهالبنية التحتية لـ Mongo الموجودة
Neo4jMemoryServiceneo4j-memoryNeo4jالرسم البيانيالبنية التحتية لـ Neo4j الموجودة

(ثنائي الزمن GraphMemoryService هو السابع، ويتم تغطيته في صفحته الخاصة — الرسم البياني المعرفي.)

InMemory — ابدأ هنا

إعداد صفري. كل شيء يعيش في العملية ويختفي عند الخروج.

use adk_memory::InMemoryMemoryService;
let memory = InMemoryMemoryService::new();

مثالي للتطوير ومجموعة الاختبار؛ استبدله بخلفية دائمة بتغيير سطر واحد لأن السمة متطابقة.

SQLite — ملف

دائم، ملف واحد، بدون خادم. رائع لتطبيقات سطح المكتب والخدمات أحادية العقدة.

use adk_memory::SqliteMemoryService;
let memory = SqliteMemoryService::new("sqlite://memory.db").await?;
// or build from an existing pool: SqliteMemoryService::from_pool(pool)

الخلفية للبحث الحقيقي عن التشابه. يخزن التضمينات في pgvector ويتيح لك اختيار استراتيجية الفهرسة.

use adk_memory::{PostgresMemoryService, VectorIndexType};

let memory = PostgresMemoryService::builder(pool, embedding_provider)
    .vector_index(VectorIndexType::Hnsw { m: 32, ef_construction: 128 })  // or IvfFlat / None
    .build()
    .await?;

يقوم VectorIndexType::None بالبحث الدقيق (القوة الغاشمة) — وهو جيد للمجموعات الصغيرة؛ يتوسع Hnsw (الافتراضي) و IvfFlat إلى المجموعات الكبيرة. يتطلب البحث المتجه مزود تضمين.

Redis, MongoDB, Neo4j

استخدم هذه عندما تكون البنية التحتية لديك قيد التشغيل بالفعل:

use adk_memory::{RedisMemoryService, RedisMemoryConfig};
use std::time::Duration;

let memory = RedisMemoryService::new(RedisMemoryConfig {
    url: "redis://localhost:6379".into(),
    ttl: Some(Duration::from_secs(60 * 60 * 24 * 30)),   // optional expiry
}).await?;

يتبع MongoMemoryService::new(...) و Neo4jMemoryService::new(...) نفس الشكل. كلها تحترم عزل (app, user, project) من المفاهيم.

التضمينات

الخلفيات التي تقوم بتشابه المتجهات (Postgres، Mongo اختياريًا) تحتاج إلى تحويل النص إلى متجهات. قدم EmbeddingProvider:

#[async_trait]
pub trait EmbeddingProvider: Send + Sync {
    async fn embed(&self, texts: &[String]) -> Result<Vec<Vec<f32>>>;
}

الخلفيات القائمة على الكلمات المفتاحية (InMemory, SQLite, Redis) لا تحتاج إلى واحدة. طابق نموذج التضمين الذي تقوم ب فهرسته مع النموذج الذي تستعلم به.

الترحيلات

تقوم الخدمات المدعومة بـ SQL بتشغيل ترحيلات ذات إصدارات ومتطابقة لإنشاء وتحديث مخططها، لذا فإن نشر إصدار جديد لا يتطلب DDL يدويًا. استدعِ migrate() للخدمة (أو دع الإنشاء يتعامل معها) عند بدء التشغيل.

الاختيار

  • البناء / الاختبار → InMemory.
  • عقدة واحدة، وتريدها أن تستمر → SQLite.
  • استدعاء دلالي حقيقي على نطاق واسع → Postgres + pgvector.
  • أنت تدير بالفعل Redis / Mongo / Neo4j → تلك الخلفية.
  • تريد نموذجًا قابلًا للاستعلام للمستخدم، وليس نسخة نصيةGraphMemoryService.

التالي: الرسم البياني المعرفي →

خلفيات الذاكرة - وثائق ADK-Rust | ADK-Rust