Как дать Claude Code подсознание: разбираем letta-ai/claude-subconscious

#AI#LLM#claude#subconscious#architecture

TL;DR

Проект letta-ai/claude-subconscious реализует архитектуру “подсознания” для Claude Code, позволяя ассистенту сохранять контекст между сессиями. Разбираем core-механизмы и паттерны, которые можно адаптировать для других AI-агентов.

Введение: зачем AI подсознание?

Современные LLM-ассистенты страдают от амнезии между сессиями - каждый диалог начинается с чистого листа. Архитектура подсознания решает эту проблему, добавляя персистентный контекст:

interface SubconsciousMemory {
  sessionId: string;
  persistentContext: Record<string, any>;
  episodicMemories: MemoryChunk[];
}

Core-механизмы проекта

1. Memory Chunking

Работа с долгосрочной памятью через чанкинг и embeddings:

class MemoryProcessor {
  async chunkText(text: string): Promise<MemoryChunk[]> {
    const chunks = splitText(text); // Логика разделения
    const vectors = await embed(chunks);
    return chunks.map((text, i) => ({ text, vector: vectors[i] }));
  }
}

2. Contextual Recall

Поиск релевантных воспоминаний по векторному сходству:

const findRelevantMemories = (query: string, memories: MemoryChunk[]) => {
  const queryVector = await embed(query);
  return memories
    .map(m => ({ ...m, similarity: cosineSimilarity(m.vector, queryVector) }))
    .sort((a, b) => b.similarity - a.similarity)
    .slice(0, 5);
};

3. Reflection Loop

Автономный процесс “рефлексии” для консолидации памяти:

def reflection_loop(memory_store):
    while True:
        recent_memories = memory_store.get_recent()
        if should_consolidate(recent_memories):
            consolidated = consolidate_memories(recent_memories)
            memory_store.add_long_term(consolidated)
        sleep(REFLECTION_INTERVAL)

Практическое применение

Интеграция с Claude API

Пример инициализации подсознания для Claude:

const claudeWithMemory = new ClaudeSubconscious({
  apiKey: process.env.CLAUDE_API_KEY,
  memoryConfig: {
    chunkSize: 1000,
    reflectionInterval: '1h'
  }
});

Кастомные провайдеры памяти

Реализация собственного MemoryProvider:

class CustomMemoryProvider implements MemoryProvider {
  async save(memory: Memory): Promise<void> { ... }
  async recall(query: RecallQuery): Promise<Memory[]> { ... }
}

Оптимизации и gotchas

  1. Cold start проблема: первые несколько сессий могут быть менее релевантными
  2. Memory leaks: необходимо реализовывать TTL для эпизодических воспоминаний
  3. Privacy-first: шифрование чувствительных данных перед сохранением
// Пример шифрования в памяти
impl MemoryEncryptor for AesGcmEncryptor {
    fn encrypt(&self, data: &[u8]) -> Result<Vec<u8>> {
        // Реализация AES-GCM
    }
}

Заключение

Архитектура подсознания открывает новые возможности для персистентных AI-ассистентов. Проект letta-ai/claude-subconscious предлагает production-ready шаблон, который можно адаптировать под другие LLM. Ключевые моменты для успешной реализации:

  1. Грамотный баланс между краткосрочной и долгосрочной памятью
  2. Оптимизированные векторные поиски (например, через HNSW)
  3. Регулярная “чистка” памяти от мусора

Для глубокого погружения рекомендую изучить:


Источник: https://github.com/letta-ai/claude-subconscious