Ai Docs
Providers

Sistemas de Memória

Comparativo dos principais sistemas de memória para chat e IA generativa.

Sistemas de Memória

Visão Geral

Sistemas de memória armazenam o histórico de conversas, contexto e dados temporários em aplicações de IA. A escolha do sistema impacta performance, escalabilidade e custo.

Comparativo de Sistemas

SistemaTipoPontos FortesConsiderações
MongoDBNoSQLFlexível, escalável, bom para JSONOverhead, complexidade
PostgreSQLSQLEstruturado, transacional, confiávelPerformance, rigidez
RedisCacheUltra rápido, simples, TTL nativoVolatilidade, tamanho

MongoDB

Visão Geral

Banco NoSQL flexível, ótimo para armazenar históricos de chat em formato JSON.

Exemplo de Uso

class MongoMemoryStore implements MemoryStore {
  constructor(private collection: Collection) {}
  async addMessage(sessionId: string, message: ChatMessage): Promise<void> {
    await this.collection.updateOne(
      { sessionId },
      { 
        $push: { messages: message },
        $setOnInsert: { createdAt: new Date() }
      },
      { upsert: true }
    );
  }
  async getMessages(sessionId: string): Promise<ChatMessage[]> {
    const session = await this.collection.findOne({ sessionId });
    return session?.messages || [];
  }
}

PostgreSQL

Visão Geral

Banco relacional robusto, ideal para times que já usam SQL e precisam de transações.

Exemplo de Uso

class PostgresMemoryStore implements MemoryStore {
  constructor(private pool: Pool) {}
  async addMessage(sessionId: string, message: ChatMessage): Promise<void> {
    await this.pool.query(
      'INSERT INTO chat_memory (session_id, message, created_at) VALUES ($1, $2, NOW())',
      [sessionId, JSON.stringify(message)]
    );
  }
  async getMessages(sessionId: string): Promise<ChatMessage[]> {
    const res = await this.pool.query(
      'SELECT message FROM chat_memory WHERE session_id = $1 ORDER BY created_at ASC',
      [sessionId]
    );
    return res.rows.map(r => JSON.parse(r.message));
  }
}

Redis

Visão Geral

Cache em memória, ultra rápido, ideal para sessões temporárias e TTL automático.

Exemplo de Uso

class RedisMemoryStore implements MemoryStore {
  constructor(
    private redis: Redis,
    private ttl: number = 24 * 60 * 60 // 24 horas
  ) {}
  async addMessage(sessionId: string, message: ChatMessage): Promise<void> {
    const key = `chat:${sessionId}`;
    await this.redis.rpush(key, JSON.stringify(message));
    await this.redis.expire(key, this.ttl);
  }
  async getMessages(sessionId: string): Promise<ChatMessage[]> {
    const key = `chat:${sessionId}`;
    const messages = await this.redis.lrange(key, 0, -1);
    return messages.map(m => JSON.parse(m));
  }
}