37 KiB
Arquitetura e Implementação de Ecossistemas Multi-Agentes de IA Locais com Memória Semântica Compartilhada e Busca Federada em Ambientes de Processamento Restrito
A transição da inteligência artificial centralizada em nuvem para sistemas agênticos locais e soberanos representa um marco na engenharia de software contemporânea, impulsionada pela necessidade crítica de privacidade de dados, redução de custos operacionais e controle total sobre o ciclo de vida da informação.1 O desafio de construir agentes especializados que operem exclusivamente em Unidades Centrais de Processamento (CPU), sem depender de APIs externas e sem o suporte de frameworks de orquestração de alto nível como o CrewAI, exige uma reengenharia profunda dos componentes de inferência, memória e ação.4 Esta análise técnica detalha como arquitetar um sistema onde múltiplos agentes colaboram de forma assíncrona, compartilhando uma base de conhecimento semântica unificada e realizando pesquisas na internet de forma autônoma, tudo fundamentado em princípios de baixo nível e execução local.4
Otimização de Inferência em CPU e Seleção de Modelos de Linguagem
A viabilidade de executar Grandes Modelos de Linguagem (LLMs) em CPUs modernas foi catalisada pelo desenvolvimento de técnicas de quantização avançadas e frameworks de baixo nível como o llama.cpp, que permitem a execução de modelos com precisão reduzida (inteiros de 4 ou 8 bits) sem perda catastrófica de desempenho cognitivo.3 A quantização reduz a exigência de largura de banda de memória e a pegada de RAM, permitindo que modelos de 7B ou 8B parâmetros habitem a memória de sistemas comuns.3 O formato GGUF (GPT-Generated Unified Format) tornou-se o padrão para estas implementações, permitindo o armazenamento de metadados e garantindo compatibilidade entre diferentes arquiteturas de hardware e sistemas operacionais.3
Para sistemas multi-agentes, a escolha do modelo deve priorizar a capacidade de raciocínio lógico e o seguimento de instruções estruturadas, fundamentais para a execução de ferramentas (tool use).9 Modelos como o Llama 3.1 8B, Phi-3 Mini da Microsoft e a família Qwen 2.5 demonstram eficiência excepcional em processamento CPU-only.8 O Phi-3 Mini, especificamente, com seus 3.8 bilhões de parâmetros, oferece uma latência reduzida e alta precisão em tarefas de lógica, tornando-o ideal para agentes que coordenam fluxos de trabalho ou realizam triagem inicial.9
Comparativo Técnico de Modelos para Execução em CPU (Foco em 8GB-16GB RAM)
A tabela a seguir apresenta os modelos que melhor equilibram a inteligência computacional com as restrições de hardware locais, considerando a quantização Q4_K_M como o padrão de referência para balanço entre velocidade e qualidade.7
| Modelo | Parâmetros | Tamanho de Arquivo (Q4_K_M) | Requisito de RAM (Sistema + Contexto) | Caso de Uso em Multi-Agentes |
|---|---|---|---|---|
| Llama 3.1 8B | 8.03B | ~4.7 GB | 7.2 GB - 8.5 GB | Agente Generalista, Pesquisador, RAG 8 |
| Phi-3 Mini | 3.8B | ~2.3 GB | 3.5 GB - 5.0 GB | Raciocínio Lógico, Orquestração, Sumarização 8 |
| Qwen 2.5 7B | 7.6B | ~4.4 GB | 6.5 GB - 7.5 GB | Codificação, Tarefas Multilíngues, Tool-Use 8 |
| Mistral 7B v0.3 | 7.2B | ~4.1 GB | 6.0 GB - 7.0 GB | Chatbots Rápidos, Classificação de Intenção 8 |
| DeepSeek R1 8B | 8B | ~4.9 GB | 7.0 GB - 8.5 GB | Raciocínio Matemático, Análise de Código 7 |
| LFM2-2.6B | 2.6B | ~1.6 GB | 2.5 GB - 4.0 GB | Agentes de Borda, Baixíssima Latência 13 |
A matemática por trás da inferência em CPU baseia-se fortemente na otimização de operações de álgebra linear, como multiplicações de matrizes por vetores (GEMV). Em CPUs modernas, o uso de instruções vetoriais (AVX-2, AVX-512 ou AMX da Intel) é crucial para atingir taxas de tokens por segundo aceitáveis.3 O cálculo de throughput teórico pode ser estimado pela largura de banda da memória do sistema, uma vez que a inferência em modelos quantizados é frequentemente limitada por este fator, e não pela capacidade bruta de computação do processador.
Em um sistema com DDR5 operando a 64 GB/s, um modelo de 8B parâmetros em 4-bit (ocupando cerca de 0.5 bytes por parâmetro) poderia, teoricamente, atingir velocidades de processamento que permitem a interação fluida, embora o processamento simultâneo de múltiplos agentes exija um escalonamento cuidadoso.7
Arquitetura de Memória Compartilhada e Persistência Semântica
O maior obstáculo em sistemas multi-agentes independentes é o "Problema da Amnésia", onde cada agente opera em um contexto isolado e esquece as interações anteriores ou as descobertas feitas por seus pares.4 Para resolver isso sem frameworks de orquestração pesados, deve-se implementar uma camada de memória externa desacoplada da computação.4 Esta arquitetura divide a memória em duas esferas principais: a memória volátil de curto prazo para troca de mensagens rápida e a memória semântica persistente de longo prazo.4
Implementação de Memória Volátil com Python Nativo
Para agentes que rodam como processos independentes na mesma máquina, o compartilhamento de dados em tempo real pode ser feito através do módulo multiprocessing.shared_memory do Python.17 Este módulo permite que blocos de memória bruta sejam mapeados entre processos distintos, evitando a sobrecarga de serialização (como JSON ou Pickle) e a latência de comunicação via sockets.17 Esta memória é ideal para armazenar o estado atual do sistema, semáforos de controle e filas de tarefas que precisam ser acessadas instantaneamente por qualquer agente da equipe.
Memória Semântica e Unificação de Embeddings
A memória de longo prazo exige que o conhecimento seja armazenado de forma que possa ser recuperado por similaridade semântica. A tecnologia recomendada para execuções locais é o banco de dados vetorial Qdrant, operando em modo local ou via servidor Docker.19 O Qdrant permite que os agentes salvem insights, resultados de buscas e decisões em coleções vetoriais, onde cada ponto contém não apenas a representação numérica do conhecimento, mas um payload rico em metadados (como IDs de projeto, timestamps e identificadores de agentes).20
Um requisito inegociável para a eficácia desta memória compartilhada é a unificação do espaço vetorial.4 Se diferentes agentes utilizarem modelos de embeddings distintos, os vetores resultantes estarão em espaços latentes incompatíveis, tornando a busca semântica falha.4 Portanto, deve-se forçar todos os agentes a utilizarem um único modelo de embedding local, como o sentence-transformers/all-MiniLM-L6-v2 (22M parâmetros) ou o BGE-small-en-v1.5, que rodam eficientemente em CPU através de runtimes ONNX ou FastEmbed.21
Estrutura de Armazenamento para Persistência Eficiente
A tabela abaixo descreve como organizar os diferentes tipos de armazenamento para garantir que agentes independentes colaborem sem perda de contexto.4
| Camada de Memória | Tecnologia | Função no Sistema Multi-Agente | Persistência |
|---|---|---|---|
| Curto Prazo (Short-Term) | multiprocessing.shared_memory | Troca de estado de execução e variáveis rápidas.17 | Volátil (Memória RAM) |
| Episódica (Histórico) | PostgreSQL + pgvector | Logs de conversas passadas e trilhas de decisão.26 | Permanente (Disco) |
| Semântica (Conhecimento) | Qdrant (Local Path) | Armazenamento de insights e documentação indexada.19 | Permanente (Disco) |
| Estruturada (Fatos) | Neo4j ou JSON Files | Relacionamentos entre entidades e hierarquias de projeto.25 | Permanente (Disco) |
A integração dessas camadas permite que um agente "Pesquisador" salve um resumo de uma notícia na memória semântica do Qdrant e, minutos depois, um agente "Escritor" recupere esse mesmo resumo ao realizar uma busca vetorial sobre o tópico, garantindo que o conhecimento flua entre as entidades sem a necessidade de um orquestrador centralizado que passe mensagens manualmente.4
O Loop de Agente Autônomo e a Lógica de Ferramentas sem Frameworks
Na ausência de frameworks como o CrewAI, o desenvolvedor deve implementar o ciclo cognitivo do agente através de um loop de execução manual em Python, baseado no padrão ReAct (Reasoning and Acting).30 Este padrão instrui o modelo de linguagem a pensar antes de agir, decompondo tarefas complexas em passos menores e decidindo qual ferramenta utilizar em cada etapa.30
A Anatomia do Loop ReAct Manual
O loop cognitivo é composto por quatro fases cíclicas que garantem a autonomia do agente 31:
- Pensamento (Thought): O agente analisa a requisição do usuário e o histórico de mensagens, formulando um plano de ação interno.
- Ação (Action): O agente decide utilizar uma ferramenta externa (ex: busca web, leitura de memória). Ele gera uma string estruturada seguindo um contrato rígido (geralmente JSON).
- Pausa (PAUSE): O script Python intercepta a saída do LLM, identifica a chamada de ferramenta, executa o código correspondente e captura o resultado.
- Observação (Observation): O resultado da ferramenta é injetado de volta no prompt do LLM como uma nova mensagem de sistema, permitindo que ele continue o raciocínio.
Este ciclo se repete até que o LLM identifique que possui informações suficientes para fornecer a "Resposta Final".31 O controle de estado entre as iterações é mantido em uma lista simples de dicionários Python que representam o histórico da conversa, que deve ser persistido em disco para permitir a continuidade entre sessões independentes.31
Engenharia de Prompt para Seleção de Ferramentas
Para que o agente local funcione corretamente em CPU com modelos menores (7B-8B), o prompt de sistema deve ser extremamente rigoroso. Ele deve definir explicitamente a lista de ferramentas disponíveis, o formato exato de saída esperado (ex: Action: <tool_name>: <params>) e incluir exemplos de poucas passagens (few-shot prompting) para demonstrar como utilizar o ciclo ReAct.31
A precisão do modelo no seguimento de instruções estruturadas pode ser quantificada pela taxa de sucesso em gerar JSONs válidos. Modelos como o Phi-4 e o Qwen 2.5 demonstram superioridade nesta tarefa em relação ao Llama 3 original, reduzindo erros de sintaxe que interromperiam o loop do agente.9
Capacidade de Busca na Internet Local e sem APIs Externas
A integração da web em agentes locais é o que os transforma de repositórios estáticos em assistentes dinâmicos. Para manter a premissa de "sem APIs externas", deve-se utilizar métodos de raspagem direta ou instâncias de metapesquisa auto-hospedadas.34
SearXNG como Motor de Metapesquisa Privado
A solução mais robusta para busca federada local é o SearXNG, um motor de metapesquisa que pode ser rodado em um container Docker.34 O SearXNG agrega resultados de centenas de motores de busca (Google, Bing, Wikipedia, etc.) e fornece uma API JSON limpa que os agentes podem consultar.34 Esta abordagem protege a privacidade dos agentes, pois as consultas enviadas aos motores globais vêm do IP do servidor SearXNG e não contêm cookies ou identificadores dos agentes.34
Integração com DuckDuckGo (DDGS)
Como alternativa mais leve e que não exige Docker, a biblioteca duckduckgo-search permite realizar buscas programáticas diretamente no motor DuckDuckGo.38 O agente utiliza esta ferramenta para obter uma lista de URLs e trechos de texto (snippets) relevantes para o tópico.38
Para converter os resultados da busca em conhecimento utilizável, o agente deve seguir um pipeline de processamento:
- Metapesquisa: Obtenção de links via SearXNG ou DuckDuckGo.34
- Raspagem (Scraping): Uso de bibliotecas como Trafilatura para extrair apenas o texto principal das páginas, removendo anúncios, menus e scripts.42
- Filtragem e Limpeza: Conversão do conteúdo para Markdown para reduzir o consumo de tokens e facilitar o processamento pelo LLM.6
- Injeção de Contexto: Os dados limpos são fornecidos como uma "Observação" no loop ReAct, permitindo que o agente sintetize a resposta final.41
Governança, Guardrails e Segurança em Sistemas Locais
Operar agentes autônomos com acesso a ferramentas de sistema e internet introduz riscos significativos de segurança e integridade de dados. A governança em sistemas multi-agentes corporativos deve tratar o desperdício de recursos e o risco de ações inadequadas como ameaças correlatas.43
Defesa em Camadas com Llama Guard e SLMs
A primeira linha de defesa em um sistema agêntico eficiente não é o agente principal, mas uma camada de triagem. Utilizar modelos pequenos de segurança, como o Llama Guard 3 1B via Ollama, permite classificar as entradas dos usuários antes que elas ativem os processos de raciocínio mais pesados.43 Se uma consulta for identificada como tóxica ou perigosa (ex: "como explorar uma vulnerabilidade de rede"), ela é bloqueada na periferia do sistema por um custo computacional insignificante.43
Roteamento Semântico para Eficiência Fiscal
O roteamento semântico utiliza o espaço vetorial do Qdrant para identificar a intenção do usuário sem invocar um LLM caro para cada classificação.28 O sistema compara o vetor da consulta com um conjunto de "perguntas canônicas" pré-indexadas para cada equipe de agentes.28 Se a similaridade for inferior a um limiar de confiança (threshold) de 0.75, a consulta é considerada "Fora de Domínio" (OOD) e o sistema se recusa a processar, economizando ciclos de CPU preciosos.43
| Tipo de Guardrail | Mecanismo | Benefício Principal |
|---|---|---|
| Segurança (Input) | Llama Guard 3 1B | Bloqueio de consultas perigosas ou tóxicas com baixa latência.43 |
| Escopo (Gateway) | Roteamento Semântico (Qdrant) | Evita o processamento de consultas irrelevantes ao domínio.28 |
| Controle de Acesso | RBAC Semântico no Banco Vetorial | Impede que agentes acessem dados sensíveis para os quais não têm permissão.6 |
| Integridade (Output) | NeMo Guardrails / Regex | Sobrescreve saídas inadequadas ou alucinações óbvias.43 |
Este modelo de governança assegura que a inteligência artificial permaneça "dentro da linha", operando de forma frugal e segura, enquanto mantém a capacidade de aprender através de fluxos de "Aprendizado Ativo", onde falhas de conhecimento legítimas são sinalizadas para revisão humana e posterior assimilação na memória compartilhada.6
Implementação Prática: O Caminho da Engenharia de Agentes Locais
Para concretizar este sistema, a engenharia deve ser fatiada em módulos independentes que se comunicam através de interfaces simples. O ponto de partida é a configuração do backend de inferência (como o Ollama ou llama-cpp-python rodando como um servidor compatível com a API da OpenAI), que servirá como o motor de raciocínio para todos os agentes.44
Estratégia de Deploy e Orquestração Minimalista
A orquestração não exige frameworks, mas sim um bom design de sistema. Um script principal em Python pode instanciar diferentes agentes como instâncias de uma classe Agent, cada um com seu próprio prompt de sistema e conjunto de ferramentas (tools).10 O compartilhamento de memória é garantido pelo fato de que todas as instâncias de agentes apontam para a mesma URL do banco de dados vetorial Qdrant e utilizam o mesmo identificador de projeto (user_id ou collection_name) para leitura e escrita.4
Abaixo, detalha-se a sequência de inicialização para um ecossistema funcional:
- Início do Backend de Inferência: Executar ollama serve e carregar modelos como phi3 ou llama3.1.1
- Inicialização da Memória Semântica: Rodar o Qdrant via Docker e criar coleções com metadados para segregação de tarefas.21
- Configuração da Busca: Iniciar o SearXNG ou configurar a integração com o DuckDuckGo.36
- Loop de Agentes: Iniciar os processos Python que rodam o loop ReAct, monitorando entradas do usuário e gerenciando o estado compartilhado via memória IPC ou banco de dados estruturado.17
Esta arquitetura soberana transforma a IA de uma caixa preta de terceiros em um ativo institucional dinâmico, capaz de realizar pesquisas profundas, colaborar em tarefas complexas e expandir sua própria base de conhecimento sem nunca vazar informações para a nuvem pública, provendo uma fundação resiliente para o futuro da automação inteligente local.4
Referências citadas
- Run LangChain Locally in 15 Minutes (Without a Single API Key) - DEV Community, acessado em janeiro 27, 2026, https://dev.to/fabiothiroki/run-langchain-locally-in-15-minutes-without-a-single-api-key-1j8m
- LocalAI, acessado em janeiro 27, 2026, https://localai.io/
- 3-ways to Set up LLaMA 2 Locally on CPU (Part 1 — llama-cpp-python) - Medium, acessado em janeiro 27, 2026, https://medium.com/@fradin.antoine17/3-ways-to-set-up-llama-2-locally-on-cpu-part-1-5168d50795ac
- CrewAI: Agentes com Memória Compartilhada
- Getting started with local LLMs in 2025 using just your CPU | nezhar.com, acessado em janeiro 27, 2026, https://nezhar.com/blog/getting-started-with-local-llms/
- IA para Base de Conhecimento Corporativo
- Best Local LLMs for 8GB VRAM: Complete 2025 Performance Guide, acessado em janeiro 27, 2026, https://localllm.in/blog/best-local-llms-8gb-vram-2025
- 10 Best Small Local LLMs to Run on 8GB RAM or VRAM (No Cloud Required) - Apidog, acessado em janeiro 27, 2026, https://apidog.com/blog/small-local-llm/
- Build AI Agents using vanilla Python locally | by Vasanth S - Medium, acessado em janeiro 27, 2026, https://vasanths.medium.com/build-ai-workflows-and-ai-agents-using-pure-python-locally-6cec9b86dd38
- Create a Tool-based LLM Agent from Scratch | Python Tutorial, acessado em janeiro 27, 2026, https://zahere.com/how-to-build-an-ai-agent-without-using-any-libraries-a-step-by-step-guide
- Best AI Models for 8GB RAM: 7 Models That Fit (2025 Tested) - Local AI Master, acessado em janeiro 27, 2026, https://localaimaster.com/blog/best-local-ai-models-8gb-ram
- Run AI Locally: The Best LLMs for 8GB, 16GB, 32GB Memory and Beyond - Micro Center, acessado em janeiro 27, 2026, https://www.microcenter.com/site/mc-news/article/best-local-llms-8gb-16gb-32gb-memory-guide.aspx
- Best Local LLMs - 2025 : r/LocalLLaMA - Reddit, acessado em janeiro 27, 2026, https://www.reddit.com/r/LocalLLaMA/comments/1pwh0q9/best_local_llms_2025/
- How to install Local AI (LLM) on old PC with processor without AVX2 and AVX - YouTube, acessado em janeiro 27, 2026, https://www.youtube.com/watch?v=ehr3vkTGHfw
- Tutorial: Offline Agentic coding with llama-server · ggml-org llama.cpp · Discussion #14758, acessado em janeiro 27, 2026, https://github.com/ggml-org/llama.cpp/discussions/14758
- How to Design Efficient Memory Architectures for Agentic AI Systems - Towards AI, acessado em janeiro 27, 2026, https://pub.towardsai.net/how-to-design-efficient-memory-architectures-for-agentic-ai-systems-81ed456bb74f
- multiprocessing.shared_memory — Fornece memória compartilhada para acesso direto entre processos — documentação Python 3.8.20, acessado em janeiro 27, 2026, https://docs.python.org/pt-br/3.8/library/multiprocessing.shared_memory.html
- multiprocessing.shared_memory — Memória compartilhada para acesso direto entre processos — Documentação Python 3.14.2, acessado em janeiro 27, 2026, https://docs.python.org/pt-br/3/library/multiprocessing.shared_memory.html
- Qdrant - Docs by LangChain, acessado em janeiro 27, 2026, https://docs.langchain.com/oss/python/integrations/vectorstores/qdrant
- A Developer's Friendly Guide to Qdrant Vector Database - Cohorte Projects, acessado em janeiro 27, 2026, https://www.cohorte.co/blog/a-developers-friendly-guide-to-qdrant-vector-database
- Python client for Qdrant vector search engine - GitHub, acessado em janeiro 27, 2026, https://github.com/qdrant/qdrant-client
- An official Qdrant Model Context Protocol (MCP) server implementation - GitHub, acessado em janeiro 27, 2026, https://github.com/qdrant/mcp-server-qdrant
- Data Ingestion for Beginners - Qdrant, acessado em janeiro 27, 2026, https://qdrant.tech/documentation/data-ingestion-beginners/
- Best Open-Source Embedding Models Benchmarked and Ranked - Supermemory, acessado em janeiro 27, 2026, https://supermemory.ai/blog/best-open-source-embedding-models-benchmarked-and-ranked/
- Beyond Vector Databases: Architectures for True Long-Term AI Memory | by Abhishek Jain, acessado em janeiro 27, 2026, https://vardhmanandroid2015.medium.com/beyond-vector-databases-architectures-for-true-long-term-ai-memory-0d4629d1a006
- Building AI Agents with Persistent Memory: A Unified Database Approach | Tiger Data, acessado em janeiro 27, 2026, https://www.tigerdata.com/learn/building-ai-agents-with-persistent-memory-a-unified-database-approach
- Just open-sourced Eion - a shared memory system for AI agents : r/Python - Reddit, acessado em janeiro 27, 2026, https://www.reddit.com/r/Python/comments/1lhbsgi/just_opensourced_eion_a_shared_memory_system_for/
- Roteamento Inteligente para IA Corporativa
- Inside an LLM Agent: Memory, Tools, and How to Build One with OpenAI + Python - Medium, acessado em janeiro 27, 2026, https://medium.com/@kate.ruksha/inside-an-llm-agent-memory-tools-and-how-to-build-one-with-openai-python-90faae1aee88
- IA para Infraestrutura e DevOps
- Create ReAct AI Agent from Scratch using Python Without any ..., acessado em janeiro 27, 2026, https://shafiqulai.github.io/blogs/blog_3.html
- pguso/ai-agents-from-scratch: Demystify AI agents by building them yourself. Local LLMs, no black boxes, real understanding of function calling, memory, and ReAct patterns. - GitHub, acessado em janeiro 27, 2026, https://github.com/pguso/ai-agents-from-scratch
- Running agents - OpenAI Agents SDK, acessado em janeiro 27, 2026, https://openai.github.io/openai-agents-python/running_agents/
- Selfhosting SearXNG - Medium, acessado em janeiro 27, 2026, https://medium.com/@rosgluk/selfhosting-searxng-a3cb66a196e9
- Run SearxNG Locally To Keep Your AI Data Private & Free — Create Custom Agentic Tools | by Gabriel Rodewald | Medium, acessado em janeiro 27, 2026, https://medium.com/@gabrielrodewald/run-searxng-locally-to-keep-your-ai-data-private-free-create-custom-agentic-tools-e8f4b5592082
- coleam00/local-ai-packaged: Run all your local AI together in one package - Ollama, Supabase, n8n, Open WebUI, and more! - GitHub, acessado em janeiro 27, 2026, https://github.com/coleam00/local-ai-packaged
- Python agent connecting local LLM and local SearxNG for web search - GitHub, acessado em janeiro 27, 2026, https://github.com/Dev-TechT/local-llm-searxng-agent
- DuckDuckGo Search - Docs by LangChain, acessado em janeiro 27, 2026, https://docs.langchain.com/oss/python/integrations/providers/duckduckgo_search
- LangChain: DuckDuckGo Quick Guide (Web Search) - Kaggle, acessado em janeiro 27, 2026, https://www.kaggle.com/code/ksmooi/langchain-duckduckgo-quick-guide-web-search
- DuckDuckGo Search Tool - AG2, acessado em janeiro 27, 2026, https://private-04b27de1.mintlify.app/docs/use-cases/notebooks/notebooks/tools_duckduckgo_search
- Build Your Own 'Deep Search' (Part 1): The Core AI Agent Logic | by Pouya - Medium, acessado em janeiro 27, 2026, https://medium.com/@pouya_gh/build-your-own-deep-search-part-1-the-core-ai-agent-logic-592eeaf16356
- Local Research MCP Server, acessado em janeiro 27, 2026, https://mcpservers.org/servers/Unlock-MCP/local-research-server
- IA Corporativa: Guardrails e Aprendizado
- OpenAI Compatible Web Server - llama-cpp-python, acessado em janeiro 27, 2026, https://llama-cpp-python.readthedocs.io/en/latest/server/
- My 5-Step Framework for Building Local AI Agents (No API Keys Needed) | by Shivam Rathod | Medium, acessado em janeiro 27, 2026, https://medium.com/@shivamr021/%EF%B8%8F-my-5-step-framework-for-building-local-ai-agents-no-api-keys-needed-030aa6e12424
- Local Quickstart - Qdrant, acessado em janeiro 27, 2026, https://qdrant.tech/documentation/quickstart/
- memory-agent - PyPI, acessado em janeiro 27, 2026, https://pypi.org/project/memory-agent/