-
Notifications
You must be signed in to change notification settings - Fork 45
Memory
Ysrael edited this page May 10, 2026
·
1 revision
Sistemas de memória para agents reterem informações entre tasks e conversas.
Interface abstrata para todos os tipos de memória:
from mangaba.memory import BaseMemory
class BaseMemory:
def add(self, content: str, metadata: dict = None) -> str: ...
def search(self, query: str, top_k: int = 5) -> List[dict]: ...
def get_all(self) -> List[dict]: ...
def clear(self) -> None: ...
def get_relevant(self, query: str, max_results: int = 5) -> str: ...Memória volátil com janela deslizante (sliding window):
from mangaba.memory import ShortTermMemory
memory = ShortTermMemory(max_items=50)
# Adicionar memória
memory.add("The user prefers Python over JavaScript", metadata={"type": "preference"})
memory.add("Project deadline is next Friday", metadata={"type": "deadline"})
# Buscar memórias relevantes
results = memory.search("user preferences", top_k=3)
# Retorna as memórias mais relevantes por keyword matching
# Todas as memórias
all_memories = memory.get_all()
# String formatada para injetar no prompt
context = memory.get_relevant("What does the user prefer?")
# "- The user prefers Python over JavaScript"
print(f"Size: {memory.size}") # 2
memory.clear()| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
max_items |
int |
50 |
Máximo de itens (oldest são removidos) |
- ✅ Rápido (deque em memória)
- ✅ Sem dependências externas
- ❌ Volátil (perde ao reiniciar)
- ❌ Busca por keyword simples (sem embeddings)
Memória persistente com SQLite e busca vetorial opcional:
from mangaba.memory import LongTermMemory
# Com SQLite apenas
memory = LongTermMemory(db_path="./memory.db")
# Com busca vetorial (requer embedding)
from mangaba.embeddings import OpenAIEmbedding
memory = LongTermMemory(
db_path="./memory.db",
embedding=OpenAIEmbedding(api_key="KEY"),
enable_vector_search=True,
)
# Uso
memory.add("User likes functional programming", metadata={"category": "preference"})
results = memory.search("programming style", top_k=3)| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
db_path |
str |
"mangaba_memory.db" |
Path do SQLite |
embedding |
BaseEmbedding |
None |
Provider de embeddings |
enable_vector_search |
bool |
False |
Usar busca vetorial |
- ✅ Persistente (SQLite)
- ✅ Busca vetorial opcional
- ✅ Suporte a metadata
- ❌ Mais lento que ShortTermMemory
Memória focada em entidades (pessoas, lugares, conceitos):
from mangaba.memory import EntityMemory
memory = EntityMemory()
# Adicionar informações sobre entidades
memory.add("John is the CEO of TechCorp, based in São Paulo")
memory.add("TechCorp raised $10M in Series A funding")
# Buscar por entidade
results = memory.search("John", top_k=3)
# Retorna informações sobre John e entidades relacionadas
# Listar entidades conhecidas
entities = memory.get_entities()
# ["John", "TechCorp", "São Paulo"]- ✅ Extrai entidades automaticamente
- ✅ Relações entre entidades
- ✅ Busca contextual por entidade
from mangaba import Agent
from mangaba.core.types import LLMConfig, MemoryConfig
from mangaba.core.llm import create_llm_client
from mangaba.memory import ShortTermMemory
llm_config = LLMConfig(provider="google", api_key="KEY", model="gemini-2.5-flash")
llm = create_llm_client(
provider=llm_config.provider,
api_key=llm_config.api_key,
model=llm_config.model,
temperature=llm_config.temperature,
max_output_tokens=llm_config.max_tokens,
)
# Opção 1: Memory direto
agent = Agent(
role="Assistant",
goal="Help the user",
backstory="Helpful assistant",
memory=ShortTermMemory(max_items=100),
llm=llm,
)
# Opção 2: MemoryConfig (cria ShortTermMemory automaticamente)
agent = Agent(
role="Assistant",
goal="Help the user",
backstory="Helpful assistant",
memory_config=MemoryConfig(
short_term=True,
max_short_term_items=100,
),
llm=llm,
)A memória é automaticamente consultada antes de cada task:
# O agent automaticamente:
# 1. Busca memórias relevantes para a task
# 2. Injeta no prompt como contexto
# 3. Salva o resultado na memória após execução
result = agent.execute_task("What did we discuss earlier?")