Configuração¶
Todos os parâmetros do sistema de memória são configurados através de uma única dataclass MemoryConfig. Todo parâmetro tem um default sensato - sobrescreva apenas o que importa para o seu caso de uso.
from arandu import MemoryClient, MemoryConfig
config = MemoryConfig(
extraction_timeout_sec=15.0,
topk_facts=30,
enable_reranker=True,
)
memory = MemoryClient(
database_url="postgresql+psycopg://...",
llm=provider,
embeddings=provider,
config=config,
)
Extraction¶
Parâmetros que controlam como fatos, entidades e relacionamentos são extraídos de mensagens.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
extraction_timeout_sec |
float |
30.0 |
Timeout por chamada LLM durante extração. No timeout, a extração retorna resultado vazio (fail-safe) - sem exceção |
enable_informed_extraction |
bool |
True |
Habilita extração informada por memória (v0.9.0+). Quando habilitado, o pipeline usa uma única chamada LLM informada pelo conhecimento existente em vez de 4 chamadas separadas. Cai pro fallback (extração cega) em caso de falha. False para usar a extração multi-pass legada |
informed_extraction_topk |
int |
10 |
Máximo de fatos existentes a recuperar por entidade como contexto da extração informada. Só usado quando a entidade não tem profile_text |
informed_extraction_context_budget_tokens |
int |
800 |
Budget de tokens para o contexto de conhecimento existente injetado no prompt de extração informada. Distribuído entre as entidades encontradas |
Dicas:
- O modelo de extração é determinado pelo
LLMProviderinjetado noMemoryClient. Para usar um modelo mais barato na extração, injete um provider configurado com esse modelo - Reduza
extraction_timeout_secse precisa de respostas mais rápidas ao custo de extrações potencialmente perdidas - Use
enable_informed_extraction=Falsese seu provider LLM tiver dificuldade com o prompt unificado (ex: modelos menores). O sistema cai automaticamente pra extração legada de 4 chamadas + reconciliação
Entity Resolution¶
Parâmetros que controlam como menções de entidades extraídas são resolvidas para registros canônicos.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
fuzzy_threshold |
float |
0.85 |
Threshold de similaridade de cosseno para fuzzy match direto. Score ≥ esse valor resolve diretamente; score entre 0.50 e esse valor encaminha para LLM; score < 0.50 cria nova entidade. Reduzir esse valor expande a faixa de fuzzy-resolve e reduz chamadas LLM |
enable_llm_resolution |
bool |
True |
Se deve usar um LLM para fuzzy matches ambíguos (faixa 0.50 - fuzzy_threshold). Quando False, candidatos ambíguos criam nova entidade |
Dicas:
- Reduza
fuzzy_threshold(ex: 0.75) para ser mais agressivo no matching - isso encolhe a faixa "ambígua" que requer chamadas LLM - Defina
enable_llm_resolution=Falsepara pular o fallback LLM em matches ambíguos (mais rápido, mas pode criar mais entidades duplicadas) - O modelo LLM para entity resolution e reconciliação é determinado pelo
LLMProviderinjetado noMemoryClient
Retrieval¶
Parâmetros que controlam como fatos são recuperados em resposta a queries.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
topk_facts |
int |
20 |
Número máximo de fatos a retornar |
topk_events |
int |
8 |
Número máximo de eventos a considerar para contexto |
event_max_scan |
int |
200 |
Máximo de eventos a escanear durante retrieval |
min_similarity |
float |
0.20 |
Similaridade de cosseno mínima para resultados de busca semântica |
min_confidence |
float |
0.55 |
Confiança mínima do fato para incluir nos resultados de retrieval |
min_confidence é um filtro apenas de read-time
Todos os fatos são persistidos durante o write independente do score de confidence. A filtragem acontece durante memory.retrieve(). Isso é por design: a confidence pode ser ajustada ao longo do tempo via reforço (confirmações NOOP), e descartar fatos no write-time seria irreversível.
| recency_half_life_days | int | 14 | Half-life (em dias) para decay exponencial de recência |
| enable_reranker | bool | True | Se deve usar reranking LLM nos resultados de retrieval |
| reranker_timeout_sec | float | 5.0 | Timeout para chamadas LLM do reranker |
Dicas:
- Aumente
topk_facts(ex: 50) para contexto mais amplo ao custo de mais ruído - Reduza
min_similarity(ex: 0.10) para capturar matches semânticos mais distantes - Aumente
recency_half_life_days(ex: 30) se fatos mais antigos devem permanecer relevantes por mais tempo - Defina
enable_reranker=Falsepara retrieval mais rápido quando precisão é menos crítica
Score Weights¶
Pesos para a fórmula de ranking híbrido que combina múltiplos sinais de retrieval.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
score_weights |
dict |
{"semantic": 0.70, "recency": 0.20, "importance": 0.10} |
Pesos para cada sinal de scoring (devem somar ~1.0) |
config = MemoryConfig(
score_weights={
"semantic": 0.60, # reduzir semântico, aumentar outros sinais
"recency": 0.25,
"importance": 0.15,
},
)
Dicas:
- Aumente o peso de
"recency"para aplicações onde frescor importa mais que relevância semântica - Aumente o peso de
"importance"para favorecer entidades bem estabelecidas e fatos frequentemente mencionados
Confidence¶
Parâmetros que controlam os níveis de confiança atribuídos a fatos extraídos.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
confidence_level_map |
dict |
{"explicit_statement": 0.95, "strong_inference": 0.80, "weak_inference": 0.60, "speculation": 0.40} |
Mapeamento de nomes de nível de confiança para scores numéricos |
confidence_default |
float |
0.60 |
Confiança padrão quando o LLM não especifica um nível |
Spreading Activation¶
Parâmetros que controlam como o contexto se expande a partir de fatos semente ao longo de relacionamentos de entidades.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
spreading_activation_hops |
int |
2 |
Número máximo de hops de relacionamento a partir de fatos semente |
spreading_decay_factor |
float |
0.50 |
Multiplicador de decay de score por hop (0.5 = dividido pela metade a cada hop) |
spreading_max_related_entities |
int |
5 |
Máximo de entidades relacionadas a seguir por semente |
spreading_facts_per_entity |
int |
3 |
Máximo de fatos a puxar de cada entidade relacionada |
Compressão de Contexto¶
Parâmetros que controlam como fatos recuperados são comprimidos na string de contexto final.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
context_max_tokens |
int |
2000 |
Máximo de tokens no output de contexto formatado |
hot_tier_ratio |
float |
0.50 |
Parcela do orçamento de tokens para fatos com scores mais altos |
warm_tier_ratio |
float |
0.30 |
Parcela do orçamento de tokens para fatos de suporte |
O orçamento restante (1 - hot - warm = 0.20) vai para o cold tier (contexto de background).
Tendências Emocionais¶
Parâmetros para detectar padrões emocionais em mensagens do usuário.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
emotional_trend_window_days |
int |
30 |
Janela para análise de tendências emocionais |
emotional_trend_min_events |
int |
5 |
Mínimo de eventos necessários para detectar uma tendência |
Clustering¶
Parâmetros para o background job de fact clustering.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
cluster_max_age_days |
int |
90 |
Idade máxima dos fatos a incluir no clustering |
cluster_min_facts |
int |
2 |
Mínimo de fatos por cluster |
community_similarity_threshold |
float |
0.75 |
Threshold de similaridade de cosseno para agrupar clusters em comunidades |
community_min_clusters |
int |
2 |
Mínimo de clusters para formar uma comunidade |
Consolidation¶
Parâmetros para o background job de consolidation.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
consolidation_min_events |
int |
3 |
Mínimo de eventos antes de rodar consolidation |
consolidation_lookback_days |
int |
7 |
Quantos dias olhar para trás (em dias) em busca de padrões |
Sleep-Time Compute¶
Parâmetros para importance scoring e summary refresh em background.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
importance_recency_halflife_days |
int |
30 |
Half-life para sinal de recência no importance scoring |
summary_refresh_interval_days |
int |
7 |
Dias antes de um resumo de entidade ser considerado obsoleto |
Memify¶
Parâmetros para o background job de memify (conhecimento episódico → procedural).
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
vitality_stale_threshold |
float |
0.2 |
Score de vitalidade abaixo do qual um fato é considerado obsoleto |
memify_merge_similarity_threshold |
float |
0.90 |
Threshold de similaridade para mesclar procedimentos similares |
Memória Procedural¶
Parâmetros para retrieval de memória diretiva/procedural.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
directive_max_tokens |
int |
300 |
Máximo de tokens para diretivas procedurais |
directive_cache_ttl_minutes |
int |
30 |
Cache TTL para lookups de diretivas |
contradiction_similarity_threshold |
float |
0.80 |
Threshold para detectar diretivas contraditórias |
Locale / Deploy¶
| Parametro | Tipo | Default | Descricao |
|---|---|---|---|
timezone |
str |
"UTC" |
Timezone IANA para interpretar referencias temporais relativas |
O parametro timezone afeta como referencias temporais relativas ("ontem", "semana passada", "hoje de manha") sao interpretadas durante a extracao de fatos e retrieval. Todos os timestamps no banco sao armazenados em UTC independente desta configuracao.
Por exemplo: se timezone="Asia/Tokyo" e o usuario diz "ontem", o SDK interpreta "ontem" relativo ao horario de Tokyo (JST), nao UTC.
Parametros de write()¶
Alem do MemoryConfig, o metodo write() aceita parametros por chamada:
| Parametro | Tipo | Default | Descricao |
|---|---|---|---|
occurred_at |
datetime \| None |
None (usa now) |
Timestamp de quando a mensagem foi enviada. Usado para imports historicos -- o LLM resolve referencias temporais relativas ("yesterday", "last week") baseado nessa data, nao na data atual |
dry_run |
bool |
False |
Roda extracao sem persistir nada no banco |
recent_messages |
list[str] \| None |
None |
Contexto de conversa recente para resolver pronomes |
verbose |
bool |
False |
Inclui pipeline trace com dados intermediarios |
config_overrides |
dict \| None |
None |
Sobrescreve campos do MemoryConfig para esta chamada |
Catálogo Aberto (Extensões do Deployer)¶
Parâmetros para estender o catálogo de atributos built-in com entradas customizadas.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
extra_attribute_keys |
set[str] |
set() |
Attribute keys adicionais reconhecidas durante extração |
attribute_aliases |
dict[str, str] |
{} |
Aliases para attribute keys (ex: {"hometown": "city"}) |
extra_namespaces |
set[str] |
set() |
Namespaces de entidade adicionais além dos tipos built-in |
extra_self_references |
frozenset[str] |
frozenset() |
Palavras adicionais tratadas como auto-referências (ex: {"yo"} para espanhol) |
extra_relationship_hints |
frozenset[str] |
frozenset() |
Palavras adicionais de dica de relacionamento para entity resolution |
Limites¶
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
max_facts_per_event |
int |
100 |
Máximo de fatos extraídos de uma única mensagem |
embedding_dimensions |
int |
1536 |
Dimensionalidade dos vetores de embedding (deve corresponder ao seu provider) |