--- title: Agent Memory emoji: 🧠 colorFrom: blue colorTo: purple sdk: docker app_port: 7860 pinned: false --- # Agent Memory — Fase 1 (Baseline) PoC de **memória observável**: chat à esquerda, armazém de memórias à direita. **Use case:** bot de atendimento de provedor de internet/TV/telefonia que armazena **falas de clientes** (como foram ditas) para extrair aprendizados bons ou ruins e ajudar em conversas futuras — sem CRM, RAG ou integrações externas. ## Estrutura ``` agent_memory/ ├── main.py # FastAPI app ├── agent.py # Lógica do agente + OpenRouter API ├── memory_store.py # ChromaDB + decay heurístico ├── models.py # Pydantic models ├── seeds.py # Memórias seed (falas de clientes fictícios) ├── requirements.txt ├── Dockerfile # Deploy em Hugging Face Spaces ├── .env.example └── static/ └── index.html # UI do armazém ``` ## Deploy no Hugging Face Spaces ### 1. Criar o Space 1. Acesse [huggingface.co/new-space](https://huggingface.co/new-space) 2. **Space name:** ex. `agent-memory` 3. **SDK:** Docker 4. **Hardware:** CPU basic (grátis) 5. **Visibility:** Public ou Private ### 2. Conectar ao GitHub (recomendado) Na aba **Settings** do Space: 1. **Repository** → conecte `EriqueSouza/agent_memory` (branch `claude_agent` ou `main`) 2. Faça push deste repositório com o `Dockerfile` e o frontmatter YAML no `README.md` Ou faça push direto para o git do Space: ```bash git remote add space https://huggingface.co/spaces/SEU_USUARIO/agent-memory git push space claude_agent:main ``` ### 3. Configurar secrets Em **Settings → Repository secrets** do Space, adicione: | Secret | Valor | |--------|-------| | `OPENROUTER_API_KEY` | sua chave OpenRouter | | `OPENROUTER_MODEL` | ex. `nvidia/nemotron-3-super-120b-a12b` | | `OPENROUTER_API_URL` | `https://openrouter.ai/api/v1` | > O Space reinicia automaticamente após salvar os secrets. ### 4. Acessar URL pública: `https://huggingface.co/spaces/SEU_USUARIO/agent-memory` A UI abre na raiz (`/`). O build inicial pode levar alguns minutos (download do modelo de embedding do ChromaDB). **Limitações no tier gratuito:** disco efêmero — memórias criadas no chat somem se o Space reiniciar; os seeds são recarregados automaticamente. --- ## Setup ### 1. Criar ambiente ```bash conda create -n agent_memory python=3.11 -y conda activate agent_memory ``` ### 2. Instalar dependências ```bash cd agent_memory pip install -r requirements.txt ``` > ChromaDB vai baixar um modelo de embedding (~80MB) na primeira execução. ### 3. Configurar API key ```bash cp .env.example .env # editar .env com sua OPENROUTER_API_KEY e OPENROUTER_MODEL ``` ### 4. Rodar ```bash python main.py ``` Abrir: http://localhost:8000 > Se o armazém já foi populado com seeds de outro domínio, use o botão **RESET** na UI (ou `POST /api/memories/reset`) para recarregar os seeds de atendimento ISP. --- ## Tipos de memória | Tipo | Cor | Decay/dia | Uso (neste use case) | |--------------|---------|-----------|-----------------------------------------------------------| | episódica | azul | 0.03 | Situação específica que um cliente relatou | | semântica | roxo | 0.005 | Padrão recorrente inferido de várias falas | | estado | laranja | 0.15 | Algo que clientes disseram sobre condição atual (volátil) | | procedimental| verde | 0.002 | Lição sobre o que ajudou ou irritou no atendimento | As memórias seed em `seeds.py` incluem de propósito relatos **bons, ruins, contraditórios e desatualizados** para exercitar o armazém observável. ## Features da UI - **Chat** com o agente em português (atendimento ISP) - **Armazém** mostra todas as memórias como cards com barra de relevância - Cards **piscam** (dourado) quando a memória foi usada na última resposta - Cards **novos** entram com animação verde - Clique no pill `mem:id` no chat para ir direto ao card no armazém - Filtros por tipo + ordenação por data/relevância/acessos - Botão ✕ para arquivar memórias individuais - Botão RESET para voltar ao estado seed --- ## Fase 2 (próximo) - Scoring por Information Gain (Shannon entropy) - Shannon Surprise para detecção de obsolescência - Decay functions substituídas por cálculo entrópico - Logits do modelo para distribuição de decisão - Comparação experimental Fase 1 vs Fase 2