Astreus

Bellek

Vektör arama ve otomatik bağlam entegrasyonuna sahip kalıcı konuşma belleği Güvenilir Astreus agent sistemleri oluşturmak için gereken kurulum kalıplarını,...

Vektör arama ve otomatik bağlam entegrasyonuna sahip kalıcı konuşma belleği

Genel Bakış

Bellek (Memory) sistemi, ajanlara uzun vadeli bellek yetenekleri sağlayarak geçmiş konuşmaları hatırlamalarına, etkileşimlerden öğrenmelerine ve oturumlar arasında bağlamı korumalarına olanak tanır. Bellek etkinleştirildiğinde, ajanlar önceki konuşmalardan ilgili bilgileri otomatik olarak saklar ve alır, böylece daha kişiselleştirilmiş ve bağlam farkındalığına sahip bir deneyim oluşur.

Belleği Etkinleştirme

Bir ajan için memory seçeneğini true olarak ayarlayarak belleği etkinleştirin:

import { Agent } from '@astreus-ai/astreus';

const agent = await Agent.create({
  name: 'MemoryAgent',
  model: 'gpt-4o',
  memory: true  // Enable persistent memory
});

Temel Kullanım

Belleğin konuşmalar arasında nasıl çalıştığını gösteren eksiksiz bir örnek:

import { Agent } from '@astreus-ai/astreus';

// Create an agent with memory
const agent = await Agent.create({
  name: 'PersonalAssistant',
  model: 'gpt-4o',
  memory: true,
  systemPrompt: 'You are a helpful personal assistant who remembers user preferences.'
});

// First conversation
const response1 = await agent.ask('My name is John and I love TypeScript');
console.log(response1);
// Output: "Nice to meet you, John! It's great that you love TypeScript..."

// Later conversation - agent remembers
const response2 = await agent.ask('What programming language do I like?');
console.log(response2);
// Output: "You mentioned that you love TypeScript, John!"

// Memory persists even after restarting
const sameAgent = await Agent.create({
  name: 'PersonalAssistant', // Same name retrieves existing memories
  model: 'gpt-4o',
  memory: true
});

const response3 = await sameAgent.ask('Do you remember my name?');
console.log(response3);
// Output: "Yes, your name is John!"

Bellek Metodları

Bellek etkinleştirildiğinde, ajanlar şu bellek yönetim metodlarına erişebilir:

// Add a memory manually
const memory = await agent.addMemory(
  'Important project information: Budget is $50k',
  { type: 'project', category: 'budget' },  // Optional metadata
  { graphId: 'project-123', taskId: 'task-456', sessionId: 'session-789' }  // Optional context for memory isolation
);

// Remember conversation with role context
const userMemory = await agent.rememberConversation(
  'I prefer TypeScript over JavaScript',
  'user'
);

// Get a specific memory by ID
const existingMemory = await agent.getMemory(memory.id);

// Search memories by content (semantic search with embeddings)
const budgetMemories = await agent.searchMemories('budget', {
  limit: 5,
  startDate: new Date('2024-01-01')
});

// Vector similarity search for semantic matching
const happyMemories = await agent.searchMemoriesBySimilarity('joyful moments', {
  similarityThreshold: 0.7,  // Minimum similarity score
  limit: 10
});

// List all memories with options
const allMemories = await agent.listMemories({
  limit: 20,
  orderBy: 'createdAt',
  order: 'desc'
});

// Update a memory
const updatedMemory = await agent.updateMemory(memory.id, {
  content: 'Updated budget: $75k',
  metadata: { type: 'project', category: 'budget', updated: true }
});

// Delete a specific memory
const deleted = await agent.deleteMemory(memory.id);

// Generate embedding for existing memory (migration/repair)
const result = await agent.generateEmbeddingForMemory(memory.id);
if (result.success) {
  console.log('✅ Embedding generated successfully');
}

// Clear all memories
const deletedCount = await agent.clearMemories();

// Clear memories with options
const deletedCount = await agent.clearMemories({
  syncWithContext: false  // Prevent context synchronization (default: true)
});

Benzerlik Arama Matematiği

Vektör benzerliği kullanarak bellekleri ararken sistem, sorgu ile bellek gömme (embedding) vektörleri arasındaki benzerlik skorlarını hesaplar:

Kosinüs Benzerlik Skoru

similarity=qmqm[0,1]\text{similarity} = \frac{\vec{q} \cdot \vec{m}}{||\vec{q}|| \cdot ||\vec{m}||} \in [0, 1]

Burada:

  • q\vec{q} sorgu gömme vektörüdür
  • m\vec{m} bellek gömme vektörüdür
  • Sonuç 0 (tamamen farklı) ile 1 (aynı) arasında değişir

Mesafe Tabanlı Skor

Mesafe metrikleri için benzerlik skoru şu şekilde hesaplanır: score=11+d(q,m)\text{score} = \frac{1}{1 + d(\vec{q}, \vec{m})}

Burada dd, vektörler arasındaki Öklid mesafesidir.

Eşik Filtreleme

Bellekler yalnızca şu durumda döndürülür: similarityθ\text{similarity} \geq \theta

Burada θ\theta, similarityThreshold parametresidir (varsayılan: 0.7).

Bellek Nesne Yapısı

interface Memory {
  id: string;               // Unique memory identifier (UUID)
  agentId: string;          // ID of the owning agent (UUID)
  graphId?: string;         // Graph context (for memory isolation)
  taskId?: string;          // Task context (for memory isolation)
  sessionId?: string;       // Session context (for memory isolation)
  content: string;          // Memory content
  embedding?: number[];     // Vector embedding (auto-generated)
  metadata?: MetadataObject; // Custom metadata
  createdAt: Date;          // When memory was created
  updatedAt: Date;          // Last update time
}

interface MemorySearchOptions {
  limit?: number;           // Max results (default: 10 for search, 100 for list)
  offset?: number;          // Skip results (default: 0)
  pageSize?: number;        // Pagination size for large result sets
  graphId?: string;         // Filter by graph context
  taskId?: string;          // Filter by task context
  sessionId?: string;       // Filter by session context
  orderBy?: 'createdAt' | 'updatedAt' | 'relevance'; // Sort field
  order?: 'asc' | 'desc';   // Sort order (default: 'desc')
  startDate?: Date;         // Filter from date
  endDate?: Date;           // Filter to date
  similarityThreshold?: number; // Similarity threshold (0-1, default: 0.7)
  useEmbedding?: boolean;   // Use embedding search (default: true)
}

Yanıt Tipleri

Her bellek metodunun ne döndürdüğünü anlamak, kodunuzda yanıtları doğru şekilde işlemenize yardımcı olur.

Bellek Nesnesi Yanıtı

Bellekler oluşturulduğunda veya alındığında eksiksiz bir Memory nesnesi alırsınız:

const memory = await agent.addMemory("User prefers dark mode", {
  type: "preference",
  importance: "high"
});

// Response structure:
{
  id: "550e8400-e29b-41d4-a716-446655440000",  // UUID string
  agentId: "agent-uuid-123",                    // UUID string
  content: "User prefers dark mode",
  embedding: [0.1, 0.2, 0.3, ..., 0.768],      // 1536 dimensions array
  metadata: {
    type: "preference",
    importance: "high"
  },
  createdAt: Date('2024-01-15T10:30:00Z'),
  updatedAt: Date('2024-01-15T10:30:00Z')
}

Bellek Listesi Yanıtı

Arama ve listeleme metodları, Memory nesnelerinden oluşan bir dizi döndürür:

const memories = await agent.searchMemories("preferences", {
  limit: 5,
  similarityThreshold: 0.7
});

// Response structure:
[
  {
    id: "memory-uuid-1",
    agentId: "agent-uuid",
    content: "User prefers dark mode",
    embedding: [0.1, 0.2, ...],
    metadata: { type: "preference" },
    createdAt: Date(...),
    updatedAt: Date(...)
  },
  {
    id: "memory-uuid-2",
    agentId: "agent-uuid",
    content: "User timezone is PST",
    embedding: [0.15, 0.25, ...],
    metadata: { type: "preference" },
    createdAt: Date(...),
    updatedAt: Date(...)
  }
]

Gömme Üretimi Yanıtı

Gömme (embedding) üretimi, ayrıntılı bir başarı/başarısızlık nesnesi döndürür:

const result = await agent.generateEmbeddingForMemory(memory.id);

// Response structure:
{
  success: true,
  message: "Embedding generated successfully",
  embedding: [0.1, 0.2, 0.3, ..., 0.768]  // Optional: included on success
}

// On failure (possible messages):
{
  success: false,
  message: "Memory not found"  // or "Memory already has embedding", "Failed to generate embedding", etc.
}

Silme Yanıtı

Silme işlemleri, başarıyı gösteren bir boolean döndürür:

const deleted = await agent.deleteMemory(memory.id);
// Returns: true or false

Bellekleri Temizleme Yanıtı

Tüm bellekleri temizlemek, silinen öğelerin sayısını döndürür:

const deletedCount = await agent.clearMemories();
// Returns: 15 (number of memories deleted)

Son güncelleme: 6 Temmuz 2026