Spec: memória da sessão via Postgres Chat Memory (Z-PRO)
Troca o node de memória do AI Agent (Simple Memory, em RAM, não sobrevive a reinício do n8n) pelo node oficial Postgres Chat Memory, mesma configuração de sessão (sessionKey, contextWindowLength). Infraestrutura: um container Postgres com um banco por cliente/clínica, mesma filosofia de isolamento já usada nos outros parâmetros de configuração do projeto. Tabela criada automaticamente pelo node, sem setup manual de schema. Nada a migrar (histórico atual só existe em RAM). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
34b5fc8a2e
commit
6d12c2206a
@@ -0,0 +1,84 @@
|
||||
# Design — Memória da Sessão via Postgres Chat Memory
|
||||
|
||||
**Data:** 2026-08-11
|
||||
**Status:** Aprovado pelo usuário, aguardando plano de implementação.
|
||||
|
||||
## Objetivo
|
||||
|
||||
O node atual de memória do AI Agent (`Memória da Sessão`, tipo
|
||||
`memoryBufferWindow`/"Simple Memory") guarda o histórico da conversa só
|
||||
em RAM do processo do n8n. Isso tem duas limitações reais de produção:
|
||||
não sobrevive a um reinício do n8n (deploy, crash, atualização) — a
|
||||
conversa em andamento "esquece" tudo — e não funciona em setups com
|
||||
múltiplos workers (queue mode), já que cada worker teria sua própria
|
||||
memória isolada. Este design troca esse node pelo node oficial `Postgres
|
||||
Chat Memory`, que persiste o histórico num banco Postgres.
|
||||
|
||||
## Infraestrutura
|
||||
|
||||
O usuário vai provisionar **um container Postgres**, com **um banco de
|
||||
dados por cliente/clínica** dentro desse container — mesma filosofia de
|
||||
isolamento por cliente já usada nos outros parâmetros de configuração
|
||||
(`docId` do Google Doc, `baseUrl`/`apiId` dos MCP Servers). Isso significa
|
||||
que cada workflow de agente terá sua própria Credential Postgres no n8n,
|
||||
apontando pro mesmo host/porta do container mas pro banco específico
|
||||
daquele cliente.
|
||||
|
||||
## Escopo desta etapa
|
||||
|
||||
Aplicado só ao Z-PRO (`Agendamento - GChat - Z-PRO (clínica exemplo)`,
|
||||
`yG2mi6ECBpPv4Hmn`), único workflow de agente em produção real até
|
||||
agora. Klingo/SysLife/ClinicAll ainda não têm workflow de agente — o
|
||||
padrão fica pronto pra replicar quando esses forem criados.
|
||||
|
||||
## Componentes
|
||||
|
||||
### Troca de node (porta `ai_memory` do AI Agent)
|
||||
|
||||
Sai: `Memória da Sessão` (`@n8n/n8n-nodes-langchain.memoryBufferWindow`).
|
||||
|
||||
Entra: `Memória da Sessão (Postgres)`
|
||||
(`@n8n/n8n-nodes-langchain.memoryPostgresChat`, v1.4), com:
|
||||
|
||||
- `sessionIdType: customKey`, `sessionKey: ={{ $json.sessionId }}` —
|
||||
idêntico ao node atual, mesma expressão, mesmo comportamento de
|
||||
sessão por `protocol`/atendimento.
|
||||
- `contextWindowLength: 20` — idêntico ao valor atual.
|
||||
- `tableName: n8n_chat_histories` — nome padrão do node, **criado
|
||||
automaticamente na primeira execução**, sem setup manual de schema.
|
||||
Se outros clientes futuros usarem o mesmo Postgres (bancos separados
|
||||
por cliente, ver "Infraestrutura"), cada banco terá sua própria
|
||||
instância dessa tabela — sem risco de misturar histórico entre
|
||||
clientes, já que são bancos fisicamente separados.
|
||||
- Credential `postgres` — criada manualmente pelo usuário na UI do n8n
|
||||
(mesmo padrão de todas as outras credenciais deste projeto), apontando
|
||||
pro banco específico do Z-PRO dentro do container.
|
||||
|
||||
### Migração de histórico
|
||||
|
||||
**Não há nada a migrar.** O histórico atual vive só em RAM — ao trocar
|
||||
o node, conversas em andamento simplesmente recomeçam do zero na
|
||||
próxima mensagem. Não é uma perda de dado nova introduzida por esta
|
||||
mudança: é exatamente o que já acontece hoje a cada reinício do n8n,
|
||||
só que agora deixa de acontecer daqui pra frente.
|
||||
|
||||
## Fora de escopo
|
||||
|
||||
- Aplicar o mesmo padrão em Klingo/SysLife/ClinicAll — fica para quando
|
||||
esses tiverem workflow de agente.
|
||||
- Provisionar o container Postgres em si — infraestrutura de
|
||||
responsabilidade do usuário, fora do escopo deste design (que cobre
|
||||
só a integração no n8n).
|
||||
- Qualquer política de retenção/limpeza de histórico antigo na tabela
|
||||
`n8n_chat_histories` — não solicitado, YAGNI por enquanto.
|
||||
|
||||
## Testes
|
||||
|
||||
Sem framework automatizado (workflow n8n). Validação manual: enviar uma
|
||||
conversa de teste com múltiplas mensagens (protocolo novo), confirmar
|
||||
que o agente mantém contexto entre mensagens (ex.: lembra o nome já
|
||||
informado). Confirmar na tabela `n8n_chat_histories` do Postgres que o
|
||||
histórico foi persistido de fato (consulta direta ao banco). Se
|
||||
possível, reiniciar o processo do n8n (ou simular) e confirmar que uma
|
||||
conversa em andamento mantém o histórico depois do reinício — validação
|
||||
do ganho real desta mudança.
|
||||
Reference in New Issue
Block a user