Skip to main content

GRKMemory (Graph Retrieve Knowledge Memory) - A semantic graph-based memory system for AI agents developed by MonkAI team

Project description

🧠 GRKMemory - Graph Retrieve Knowledge Memory

GRKMemory = Graph Retrieve Knowledge Memory

PyPI version Python 3.10+ License: MIT

GRKMemory é um sistema de memória semântica baseado em grafos para agentes de IA, desenvolvido pelo time MonkAI. Recuperação inteligente de conhecimento com economia de 95% em tokens.

🚀 Começando

1️⃣ Instalação

pip install grkmemory        # sempre em um venv (ou via pipx)

Requer Python 3.10–3.13 (distribuímos apenas wheels compilados, sem sdist).

Instalando no Python do sistema (Debian/Ubuntu, devcontainers de IDE)? Prefira um venv ou pipx install --python python3.12 grkmemory — o site-packages do sistema não entra no caminho e nada conflita. Se precisar instalar direto no sistema e o pip falhar com "Cannot uninstall PyJWT... no RECORD" (o extra [mcp] puxa pyjwt>=2.10.1 via SDK MCP, e o PyJWT do apt não pode ser removido pelo pip), use: pip install --ignore-installed PyJWT "grkmemory[mcp]".

2️⃣ Token de acesso (opcional — só para o gate de autenticação)

O uso direto da biblioteca (GRKMemory, MemoryRepository, servidor MCP, plugin Claude Code) não exige token. O token MonkAI só é necessário se você quiser a camada opcional de controle de acesso (GRKAuth/AuthenticatedGRK) — útil quando vários times/serviços compartilham o mesmo store:

📧 Contato: contato@monkai.com.br
🌐 Site: www.monkai.com.br

3️⃣ Configurar Token

# Configurar como variável de ambiente
export GRKMEMORY_API_KEY="grk_seu_token_aqui"

# OpenAI (padrão)
export OPENAI_API_KEY="sua_openai_key"

# OU Azure OpenAI
export USE_AZURE_OPENAI="true"
export AZURE_OPENAI_API_KEY="sua_azure_key"
export AZURE_OPENAI_ENDPOINT="https://seu-recurso.openai.azure.com"
export AZURE_OPENAI_DEPLOYMENT="gpt-4o"
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT="text-embedding-3-small"

4️⃣ Autenticar e Usar

from grkmemory import GRKMemory, GRKAuth, AuthenticatedGRK

# Autenticar com token MonkAI
auth = GRKAuth.from_env()  # Usa GRKMEMORY_API_KEY
print("✅ Autenticado!")

# Inicializar GRKMemory protegido
grk = GRKMemory()
secure = AuthenticatedGRK(grk, auth.get_current_token())

# Usar!
secure.save_conversation([
    {"role": "user", "content": "Olá!"},
    {"role": "assistant", "content": "Oi! Como posso ajudar?"}
])

results = secure.search("Olá")

🎯 Quick Start (Completo)

from grkmemory import GRKMemory, GRKAuth, AuthenticatedGRK
import os

# 1. Autenticar
api_key = os.getenv("GRKMEMORY_API_KEY")
auth = GRKAuth()
auth.authenticate(api_key)

# 2. Criar GRKMemory autenticado
grk = GRKMemory()
secure = AuthenticatedGRK(grk, api_key)

# 3. Salvar conversa
secure.save_conversation([
    {"role": "user", "content": "Vamos falar sobre Python"},
    {"role": "assistant", "content": "Claro! O que você quer saber?"}
])

# 4. Buscar memórias relevantes
results = secure.search("O que discutimos sobre Python?")

# 5. Chat com contexto de memória automático
response = secure.chat("Me conte sobre nossas discussões anteriores")

🔐 Autenticação

Token MonkAI

A autenticação é uma camada de proteção opcional: ela só entra em cena quando você envolve a lib com GRKAuth/AuthenticatedGRK para dar a cada consumidor um token com permissões próprias (vários times/serviços num mesmo store). O uso direto — GRKMemory, MemoryRepository, servidor MCP, plugin Claude Code — funciona sem nenhum token (ver "Modo Offline (Sem Token)" abaixo). O que o GRKMemory/MemoryConfig exigem é uma chave OpenAI/Azure (para o chat agent e embeddings de API) — e mesmo essa é dispensável com MemoryRepository(enable_embeddings=False) ou com o provider local (grkmemory[local-embeddings]).

Permissão Descrição
read Buscar e consultar memórias
write Salvar novas memórias
admin Gerenciamento completo

Métodos de Autenticação

from grkmemory import GRKAuth

# Método 1: Via variável de ambiente (recomendado)
auth = GRKAuth.from_env()  # Usa GRKMEMORY_API_KEY

# Método 2: Diretamente
auth = GRKAuth()
auth.authenticate("grk_seu_token")

# Verificar permissões
print(f"Pode ler: {auth.check_permission('read')}")
print(f"Pode escrever: {auth.check_permission('write')}")

⚠️ Importante: Tokens são fornecidos exclusivamente pelo time MonkAI.

⚙️ Configuração

from grkmemory import GRKMemory, MemoryConfig

config = MemoryConfig(
    model="gpt-4o",
    memory_file="minhas_memorias.json",
    enable_embeddings=True,
    background_memory_method="graph",  # 'graph', 'embedding', 'tags', 'entities', 'hybrid'
    background_memory_limit=5,
    background_memory_threshold=0.3,
    storage_format="json",   # 'json' (padrão) ou 'toon'
    output_format="json"     # 'json', 'toon', 'text' ou 'raw'
)

grk = GRKMemory(config=config)

🗄️ Backends de Armazenamento (file / postgres)

O armazenamento e a busca vetorial vivem atrás de uma interface StorageBackend plugável. O default (file) mantém o comportamento histórico — um único arquivo plano (JSON/TOON, opcionalmente criptografado) com índice FAISS em memória. Ele é seguro apenas em processo único: dois processos compartilhando o mesmo MEMORY_FILE competem (último a escrever vence). Para um servidor com memória que precisa escalar horizontalmente, externalize o storage para remover esse acoplamento a instância-única + volume persistente.

Backend Concorrência Quando usar
file (default) processo único dev local, single-instance, sem nova dependência
postgres entre processos (transacional) produção horizontal/stateless

Seleção via ambiente (ou MemoryConfig):

# Default — nada muda
GRKMEMORY_STORAGE_BACKEND=file

# pgvector (requer o extra grkmemory[postgres])
GRKMEMORY_STORAGE_BACKEND=postgres
GRKMEMORY_POSTGRES_DSN=postgresql://user:pass@host:5432/db
GRKMEMORY_EMBEDDING_DIM=1536   # dimensão do embedding (default 1536)
pip install "grkmemory[postgres]"   # instala psycopg + pgvector

A biblioteca base nunca importa psycopg — o PostgresVectorBackend é resolvido sob demanda, então quem usa o backend file não ganha dependência nova. O backend externo cria a tabela + índice ANN HNSW (cosseno) na primeira inicialização. O grafo semântico continua sendo reconstruído em memória a partir dos registros (v1 não persiste arestas no banco).

Também é possível injetar um backend diretamente:

from grkmemory.memory.repository import MemoryRepository
from grkmemory.memory.backends import PostgresVectorBackend

backend = PostgresVectorBackend(dsn="postgresql://...", embedding_dim=1536)
repo = MemoryRepository(backend=backend)

☁️ Azure OpenAI

GRKMemory suporta Azure OpenAI nativamente. Configure via variáveis de ambiente ou código:

Via Variáveis de Ambiente

export USE_AZURE_OPENAI="true"
export AZURE_OPENAI_API_KEY="sua-api-key"
export AZURE_OPENAI_ENDPOINT="https://seu-recurso.openai.azure.com"
export AZURE_OPENAI_DEPLOYMENT="gpt-4o"
export AZURE_OPENAI_EMBEDDING_DEPLOYMENT="text-embedding-3-small"
export AZURE_OPENAI_API_VERSION="2024-02-01"  # opcional

Via Código

from grkmemory import GRKMemory, MemoryConfig

# Configuração Azure OpenAI
config = MemoryConfig(
    use_azure=True,
    api_key="sua-azure-api-key",
    azure_endpoint="https://seu-recurso.openai.azure.com",
    azure_deployment="gpt-4o",
    azure_embedding_deployment="text-embedding-3-small",
    azure_api_version="2024-02-01"
)

grk = GRKMemory(config=config)

Tabela de Configurações Azure

Variável Config Descrição
USE_AZURE_OPENAI use_azure Ativar Azure (true/false)
AZURE_OPENAI_API_KEY api_key Chave da API Azure
AZURE_OPENAI_ENDPOINT azure_endpoint URL do recurso Azure
AZURE_OPENAI_DEPLOYMENT azure_deployment Nome do deployment (chat)
AZURE_OPENAI_EMBEDDING_DEPLOYMENT azure_embedding_deployment Nome do deployment (embeddings)
AZURE_OPENAI_API_VERSION azure_api_version Versão da API (default: 2024-02-01)

📦 Formatos de Armazenamento (JSON vs TOON)

GRKMemory suporta dois formatos de serialização:

Formato Vantagem Uso Recomendado
JSON Parsing 27x mais rápido Armazenamento (padrão)
TOON 25% menos tokens Contexto para LLM

Instalando TOON (opcional)

pip install toon_format

Estratégia Híbrida (Recomendada)

from grkmemory import MemoryRepository

# JSON para armazenamento (rápido) + TOON para LLM (economia de tokens)
repo = MemoryRepository(
    memory_file="memorias.json",
    storage_format="json",      # Parsing rápido
    output_format="toon"        # 25% menos tokens para LLM
)

# Buscar e formatar para LLM
results = repo.search("Python")
context = repo.format_for_llm(results)  # Retorna em TOON (~25% menos tokens)

Comparando Formatos

# Estimar economia de tokens
estimates = repo.get_token_estimate(results)
print(estimates)
# {'json': 689, 'toon': 512, 'savings_toon_vs_json': '25.7%'}

✂️ output_format="raw" — Modo enxuto de tokens

Quando o consumidor downstream só precisa do conteúdo da resposta (a mensagem do assistant) e não dos metadados de cada memória (summary, tags, entities, sentiment, etc.), use output_format="raw". Devolve apenas o content do primeiro turno de assistant de cada conversa recuperada, separado por \n\n---\n\n.

repo = MemoryRepository(
    memory_file="memorias.json",
    output_format="raw",
)

results = repo.search("capital da França")
context = repo.format_for_llm(results)
# "A capital da França é Paris."
# (sem JSON wrapper, sem metadados, sem labels)

Benchmark (issue #13)

47k chars de snapshot, 30 queries, gpt-4.1-mini + judge gpt-4.1 (rubrica 0–3):

Formato input tokens judge recall vs json
json (default) 1.705 1.47 igual
toon 1.475 1.47 igual
text 252 1.00 cai (perde conversation)
raw 640 1.47 igual

~2.7× mais barato que json com recall idêntico em consultas factuais. Use quando o LLM downstream só precisa do que o assistente respondeu antes; use json/toon quando o LLM precisa raciocinar sobre tags/sentiment/confidence.

🔍 preserve_identifiers — Recall em corpus pequeno/identifier-dense

O KnowledgeAgent resume cada conversa antes de embeddar, o que é ótimo para chat narrativo, mas descarta tokens identificadores (semver v1.6.0, issue refs #42, env vars OPENAI_API_KEY, key=value floor_value=30) — justamente o que consultas factuais matcham. Em corpus pequeno/identifier-dense (<~95k tokens), cosine ingênuo sobre chunks crus chega a vencer o GRKMemory em 0.3–1.1 pontos de judge nessas consultas. Acima de ~95k tokens o GRKMemory volta a ganhar (a discriminação semântica supera o "imposto" da perda de surface).

A solução é um dual-index opt-in:

from grkmemory import MemoryConfig, GRKMemory

cfg = MemoryConfig(
    preserve_identifiers=True,  # default False — opt-in, sem custo se off
    # identifier_regex=...      # opcional; default cobre semver/#issue/SCREAMING_SNAKE/key_=val
    background_memory_method="hybrid",  # max-pool sobre os 2 embeddings
)

grk = GRKMemory(config=cfg)
grk.save_conversation([
    {"role": "user", "content": "qual a última versão?"},
    {"role": "assistant", "content": "Liberamos v1.6.0 no PyPI ontem."},
])

# Consulta factual com surface token — o embedding do summary largou "v1.6.0",
# mas o embedding_identifier preservou. O hybrid recupera.
results = grk.search("v1.6.0")

O que muda no schema

Quando ligado, cada memória ganha 2 campos:

  • identifiers: List[str] — tokens extraídos do conversation[assistant].content
  • embedding_identifier: List[float] — vetor sobre {summary} {identifiers}

search(method="hybrid") calcula max(cos(query, embedding), cos(query, embedding_identifier)) por memória. Custo extra: 1 chamada de embedding adicional por save() (zero se o regex não casa nada nessa memória). Default off — backwards compatible.

Padrões cobertos pelo regex default

Padrão Exemplo
semver v1.6.0, 0.47.0-rc1
issue ref #42, #300
SCREAMING_SNAKE OPENAI_API_KEY, RUN_LLM_E2E
lower_snake=value floor_value=30, top_k=5

Customizável via identifier_regex ou env IDENTIFIER_REGEX.

Convertendo entre Formatos

# Exportar para TOON
repo.export("backup.toon", format="toon")

# Converter armazenamento para TOON
repo.convert_storage_format("toon")

👥 Multi-tenant (user_id / session_id / tenant_id)

É possível isolar memórias por usuário, sessão e/ou tenant usando os parâmetros opcionais user_id, session_id e tenant_id em save_conversation, search, chat, get_stats e get_top_memories. O armazenamento continua em um único arquivo/store; o filtro é aplicado na busca.

# Salvar conversa para um usuário/sessão
grk.save_conversation(
    [{"role": "user", "content": "Olá!"}, {"role": "assistant", "content": "Oi!"}],
    user_id="user_123",
    session_id="sess_abc"
)

# Buscar apenas memórias desse usuário
results = grk.search("Olá", user_id="user_123")

# Ou apenas dessa sessão
results = grk.search("Olá", session_id="sess_abc")

# Chat e save também aceitam user_id/session_id
response = grk.chat("O que discutimos?", user_id="user_123")

Sem user_id/session_id, o comportamento é o mesmo de antes (todas as memórias são consideradas).

Isolamento por tenant (stores compartilhados)

Use tenant_id para garantir que dois tenants com o mesmo user_id em um store compartilhado nunca vejam as memórias um do outro. A chave efetiva de isolamento é tenant × user × session.

from grkmemory import GRKMemory, MemoryConfig

# Uma instância GRKMemory por tenant (recomendado para stores compartilhados)
grk = GRKMemory(MemoryConfig(tenant_id="tenant_x"))
grk.save_conversation(msgs, user_id="guest")   # armazenado sob tenant_x
grk.search("pedidos", user_id="guest")          # escopo restrito a tenant_x

# Ou sobrescrever por chamada
grk.search("pedidos", user_id="guest", tenant_id="other_tenant")

tenant_id=None (padrão) preserva o namespace global existente — nenhum deploy atual precisa mudar. A variável GRKMEMORY_TENANT_ID define o padrão no config via env.

⏳ Fatos temporais (bi-temporalidade)

Fatos mudam com o tempo ("threshold aprovado = 0.7" → semanas depois "= 0.5"). Cada memória pode carregar uma janela de validade [valid_from, valid_until) além do created_at, e uma memória nova pode superseder a antiga sem apagá-la:

# Janela de validade explícita no save (opcional)
repo.save({"summary": "threshold aprovado = 0.7", "tags": ["threshold"],
           "valid_from": "2026-01-10T00:00:00"})
repo.save({"summary": "threshold aprovado = 0.5", "tags": ["threshold"],
           "valid_from": "2026-03-15T00:00:00"})

# A decisão nova supersede a antiga (anotação, nunca delete)
grk.supersede(old_id, new_id)

# Recall padrão = "válido agora": só o fato vigente aparece
grk.search("threshold")

# Time-travel: o que era verdade em fevereiro?
grk.search("threshold", as_of="2026-02-01T00:00:00")

Regras: valid_until é exclusivo; sem campos de validade a memória é sempre válida (100% retrocompatível); em consultas as_of explícitas o created_at faz papel de valid_from quando este falta. A memória superada continua acessível via as_of e get_memory_detail — o campo superseded_by aponta para quem a substituiu. Detecção automática de supersessão (LLM/heurística) está fora de escopo por ora (ver issue #50).

🔌 Servidor MCP (grkmemory[mcp])

Exponha a memória como tools para qualquer cliente MCP (Claude Code, claude.ai, Agent SDK):

pip install grkmemory[mcp]

# Claude Code
claude mcp add grkmemory -- grkmemory-mcp

Tools expostas: memory_save (ingestão sem LLM — summary/tags/entities/key_points precomputados), memory_search (métodos graph/embedding/tags/entities/hybrid + as_of para time-travel), memory_supersede, memory_get, memory_stats_tool.

Configuração 100% via env vars padrão da lib (MEMORY_FILE, GRKMEMORY_STORAGE_BACKEND file/postgres, GRKMEMORY_TENANT_ID, BACKGROUND_MEMORY_LIMIT, ...). Embeddings ligam automaticamente quando há credencial OpenAI/Azure no ambiente (OPENAI_API_KEY/AZURE_OPENAI_API_KEY/AZURE_FOUNDRY_KEY) ou ENABLE_EMBEDDINGS=true; sem credencial o recall usa graph/tags/entities e o servidor funciona 100% offline com o file backend. Embeddings nunca aparecem nos payloads das tools.

Instalação por IDE (VS Code / JetBrains) e Claude Desktop

As extensões de IDE do Claude Code leem a mesma configuração MCP do CLI: .mcp.json na raiz do projeto (escopo projeto, versionável) ou ~/.claude.json (escopo user). Não precisa de terminal para ativar — gere o arquivo pronto com:

grkmemory-mcp init             # cria/mescla ./.mcp.json (escopo projeto)
grkmemory-mcp init --desktop   # idem para o Claude Desktop (type: stdio, paths absolutos)
grkmemory-mcp init --memory-file /outro/caminho/memoria.json

O comando aponta o bloco grkmemory para o binário em execução (path absoluto), define MEMORY_FILE (default ~/.grkmemory/memoria.json, diretório criado na hora) e preserva outros servidores já configurados no arquivo. Na primeira abertura a extensão pede aprovação do servidor; use /mcp no chat para ver o status da conexão.

Bloco gerado (referência, caso prefira escrever à mão):

{
  "mcpServers": {
    "grkmemory": {
      "command": "/caminho/venv/bin/grkmemory-mcp",
      "args": [],
      "env": { "MEMORY_FILE": "/Users/voce/.grkmemory/memoria.json" }
    }
  }
}

Alternativa zero-install com uv: "command": "uvx", "args": ["--from", "grkmemory[mcp]", "grkmemory-mcp"].

Recall vetorial sem chave de API (grkmemory[local-embeddings]): com GRKMEMORY_EMBEDDING_PROVIDER=local, os métodos embedding/hybrid rodam com modelo on-device (fastembed/ONNX, default sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2, 384 dims, multilíngue — ~120MB baixados no primeiro uso; troque via GRKMEMORY_LOCAL_EMBEDDING_MODEL, precisa ser modelo suportado pelo fastembed). O servidor MCP liga embeddings automaticamente nesse modo — memória semântica 100% offline e keyless. Com pgvector, aponte GRKMEMORY_EMBEDDING_DIM para a dimensão do modelo.

Recall não é automático só com o MCP: instalar o servidor torna as tools disponíveis — o Claude decide chamá-las pelo contexto. Para memória verdadeiramente automática, use o plugin abaixo.

Plugin Claude Code (memória automática)

O plugin adiciona hooks que fazem o ciclo completo sem nenhuma instrução:

  • UserPromptSubmit → busca memórias relevantes para o prompt e injeta como contexto do turno (recall automático, escopado por projeto);
  • Stop/SessionEnd → destila a sessão (tarefa + desfecho + conceitos) e salva/atualiza uma memória por sessão, com segredos redactados antes de persistir;
  • comando /memoria → buscar, salvar, supersedir e inspecionar pela conversa;
  • registra o MCP server automaticamente (dispensa .mcp.json).
pip install "grkmemory[mcp]"        # o plugin usa o grkmemory-mcp do PATH (ou uvx)
/plugin marketplace add BeMonkAI/GRKMemory
/plugin install grkmemory@grkmemory

Os hooks nunca quebram a sessão (falhas vão para stderr e saem 0) e funcionam offline (recall graph/tags). Store default ~/.grkmemory/memoria.json; escopo por projeto via tenant_id derivado do diretório.

Sessões headless (claude -p em automação): as tools MCP entram deferred; use ENABLE_TOOL_SEARCH=false claude -p ... para carregá-las upfront.

⚡ API assíncrona

Para uso em código assíncrono (ex.: AtendentePro) sem bloquear o event loop, use os métodos *_async, que executam a lógica síncrona em thread (ex.: asyncio.to_thread em Python 3.9+):

import asyncio
from grkmemory import GRKMemory

grk = GRKMemory()

async def main():
    results = await grk.search_async("IA")
    await grk.save_conversation_async([
        {"role": "user", "content": "Olá"},
        {"role": "assistant", "content": "Oi!"}
    ])
    response = await grk.chat_async("O que discutimos?")

asyncio.run(main())

Disponíveis: search_async, save_conversation_async, chat_async, chat_with_history_async. Com AuthenticatedGRK: search_async, save_conversation_async, chat_async (com checagem de permissão).

🔓 Modo Offline (Sem Token)

O modo offline usa MemoryRepository com enable_embeddings=False e serve como backend sem API key para testes ou ambientes restritos, usando apenas tags, entities e grafo semântico (sem embeddings). Você pode usar o MemoryRepository sem token/API key quando embeddings estão desabilitados:

from grkmemory import MemoryRepository

# Modo offline - não precisa de API key
repo = MemoryRepository(
    memory_file="memories.json",
    enable_embeddings=False  # ← Chave: desabilitar embeddings
)

# Funcionalidades disponíveis sem token:
# ✅ Salvar memórias
repo.save({
    "summary": "Conversa sobre Python",
    "tags": ["python", "programação"],
    "entities": ["Python"],
    "key_points": ["Linguagem interpretada"]
})

# ✅ Buscar por tags
results = repo.search("python", method="tags")

# ✅ Buscar por entities
results = repo.search("Python", method="entities")

# ✅ Buscar por grafo (sem embeddings)
results = repo.search("programação", method="graph")

# ❌ Busca por embedding requer API key
# results = repo.search("query", method="embedding")  # Retorna vazio sem API key

Nota: GRKMemory e MemoryConfig requerem API key. Apenas MemoryRepository com enable_embeddings=False funciona sem token.

💾 Salvando Conversas em JSON

O GRKMemory salva automaticamente as conversas em um arquivo JSON estruturado:

Estrutura do JSON

{
  "sessoes": [
    {
      "id": "sess_abc123",
      "timestamp": "2025-01-09T12:00:00",
      "summary": "Discussão sobre Python e IA",
      "tags": ["python", "ia", "programação"],
      "entities": ["Python", "OpenAI", "GPT"],
      "concepts": ["machine learning", "api"],
      "messages": [
        {"role": "user", "content": "..."},
        {"role": "assistant", "content": "..."}
      ]
    }
  ]
}

Estrutura do TOON (Token-Optimized Object Notation)

O mesmo conteúdo em TOON ocupa ~25% menos tokens, ideal para contexto de LLM:

sessoes[1]:
  - id: sess_abc123
    timestamp: "2025-01-09T12:00:00"
    summary: Discussão sobre Python e IA
    tags[3]: python,ia,programação
    entities[3]: Python,OpenAI,GPT
    concepts[2]: machine learning,api
    messages[2]{role,content}:
      user,Vamos falar sobre Python
      assistant,Claro! O que você quer saber?

Nota: TOON elimina chaves, colchetes e aspas redundantes, compactando listas e tabelas em notação posicional. Instale com pip install toon_format.

Usando o MemoryRepository diretamente

from grkmemory import MemoryRepository

# Inicializar repositório
repo = MemoryRepository(memory_file="minhas_memorias.json")

# Salvar memória estruturada
memoria = {
    "summary": "Conversa sobre Python",
    "tags": ["python", "programação"],
    "entities": ["Python", "VS Code"],
    "concepts": ["sintaxe", "bibliotecas"],
    "messages": [
        {"role": "user", "content": "Como instalar Python?"},
        {"role": "assistant", "content": "Baixe em python.org..."}
    ]
}
repo.save(memoria)

# Buscar memórias
resultados = repo.search("Python", method="tags")

📊 Métodos de Busca

Método Descrição
graph Grafo semântico (recomendado)
embedding Similaridade vetorial
tags Busca por tags
entities Busca por entidades
# Busca por grafo semântico
results = secure.search("IA", method="graph")

# Busca por embedding
results = secure.search("machine learning", method="embedding")

📈 Estatísticas

# Estatísticas gerais
stats = secure.get_stats()
print(f"Total de memórias: {stats['total_memories']}")

# Estatísticas do grafo
graph_stats = secure.get_graph_stats()
print(f"Nós: {graph_stats['total_nodes']}")
print(f"Arestas: {graph_stats['total_edges']}")

📁 Estrutura do Projeto

GRKMemory/
├── grkmemory/              # 📦 Pacote principal
│   ├── core/               # Classes principais
│   ├── memory/             # Repositório de memória
│   ├── graph/              # Grafo semântico
│   ├── auth/               # Autenticação
│   └── utils/              # Utilitários
├── examples/               # 💡 Exemplos de uso
├── papers/                 # 📄 Documentação técnica
└── README.md

📚 Exemplos

Veja a pasta examples/ para exemplos completos:

Exemplo Descrição
01_basic_usage.py Uso básico
02_custom_config.py Configuração personalizada
03_chatbot_with_memory.py Chatbot com memória
04_graph_analysis.py Análise do grafo
05_batch_processing.py Processamento em lote
06_authentication.py Uso com autenticação
07_storage_formats.py Formatos de armazenamento (JSON/TOON)
08_azure_openai.py Integração com Azure OpenAI
09_multi_tenant.py Multi-tenant com user_id e session_id
10_async_usage.py Uso da API assíncrona (search_async, chat_async)

🔬 Performance

Métrica Context Window GRKMemory
Tokens/query ~50.000 ~2.500
Economia - 95%
Precisão Variável 95%
Velocidade Lenta 10x mais rápido

🏅 Certificado de Qualidade

O GRKMemory v1.3.0 foi auditado e certificado pelo Claude AI Quality Auditor (Anthropic) nos pilares de Segurança, Usabilidade e Escalabilidade.

Pilar Score Status
Segurança 8.5 / 10 Aprovado
Usabilidade 9.0 / 10 Excelente
Escalabilidade 7.8 / 10 Aprovado
Score Final 8.4 / 10 Certificado

Serial Number: CQC-03E6B8B9-883CEBB9-4B6C1D38-672D37CF

Verificar autenticidade:

echo -n "GRKMemory|1.3.0|MonkAI|ArthurVaz|2026-03-01|CLAUDE-QUALITY-AUDIT" | shasum -a 256

Veja o relatório completo para detalhes da auditoria.

📞 Contato

Para obter seu token de acesso ou suporte:

📧 Email: contato@monkai.com.br
🌐 Site: www.monkai.com.br

📄 Licença

MIT License - veja LICENSE

👨‍💻 Autor

Arthur Vaz - MonkAI

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

grkmemory-1.15.1-cp313-cp313-win_amd64.whl (943.7 kB view details)

Uploaded CPython 3.13Windows x86-64

grkmemory-1.15.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

grkmemory-1.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (6.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

grkmemory-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

grkmemory-1.15.1-cp313-cp313-macosx_10_13_universal2.whl (2.2 MB view details)

Uploaded CPython 3.13macOS 10.13+ universal2 (ARM64, x86-64)

grkmemory-1.15.1-cp312-cp312-win_amd64.whl (951.2 kB view details)

Uploaded CPython 3.12Windows x86-64

grkmemory-1.15.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

grkmemory-1.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

grkmemory-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

grkmemory-1.15.1-cp312-cp312-macosx_10_13_universal2.whl (2.2 MB view details)

Uploaded CPython 3.12macOS 10.13+ universal2 (ARM64, x86-64)

grkmemory-1.15.1-cp311-cp311-win_amd64.whl (965.1 kB view details)

Uploaded CPython 3.11Windows x86-64

grkmemory-1.15.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (7.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

grkmemory-1.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (7.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

grkmemory-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

grkmemory-1.15.1-cp311-cp311-macosx_10_9_universal2.whl (2.2 MB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

grkmemory-1.15.1-cp310-cp310-win_amd64.whl (959.7 kB view details)

Uploaded CPython 3.10Windows x86-64

grkmemory-1.15.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (6.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

grkmemory-1.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl (6.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

grkmemory-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

grkmemory-1.15.1-cp310-cp310-macosx_10_9_universal2.whl (2.2 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file grkmemory-1.15.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: grkmemory-1.15.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 943.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for grkmemory-1.15.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 38a8d4d61e8427609b57152c4d57e5e4673c07bb59f1be4a418ceb4315c4cb27
MD5 25960631a2385d7da6cdfcbed646e9ee
BLAKE2b-256 565a8f0670ae72f0f3a52a2d5acc19d3de0fc8c21a51b92b59be303e2ec13a87

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 96189daf7b4cc1073d844e0bdcbfb35882165d1d85b238d8796751c3704004b6
MD5 145e75ab55dfd911ad874f892ed886c0
BLAKE2b-256 938e7da870f2abd22b51ae774216bfc38ee28576c1124dd114a8a3b7e74f1210

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 c40043d123e0f889eb23d4759eaaf33108305f22fc725968d9d7a6c13a0c82ec
MD5 eb13a379e345722c8cd6447287b7e49d
BLAKE2b-256 c6b4c56563d97a2457f5eec10cd94047161e46fa2accaacd936784c4a21bf1ee

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 dfb4d5d176a04ed62f3c77a6957a2ba6e0f1d20656eed105a9560ffc45236d0d
MD5 3ec5fd9d9e6051345f53700d0d4286cc
BLAKE2b-256 9b14f76bb550552e0156dc8dafa919fc3232d9382a0db524613aa213fb045605

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp313-cp313-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp313-cp313-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 cca622b21c97a66acb8cc3c784bb191d813145664119dd52adeb01e34bc3ac23
MD5 c14760bcd7edfc67c847be08c2237666
BLAKE2b-256 b211c0a0785fa87518d8b2abe970721beba8ee5cd0375ef46ad626bfc3884c04

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: grkmemory-1.15.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 951.2 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for grkmemory-1.15.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3b849e013b33d67b1ff060b3ab0a864fa335850570b906431312379a7540fb70
MD5 b7e71116a9c03592626c3a3e2463ca71
BLAKE2b-256 f84b4fd63295b44fe32e884ae067cc26e475d7c59cf85d725b057a76bb90d931

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 de687d3c78b1c5d999e2593d9a9583d6a7468c7454454e77c9b0c8ccfb8cb6d4
MD5 987953056e7414d7cb4d5d4de328211c
BLAKE2b-256 ef5d415a41f9c4a04e885ff8edce24a2bb693fa1c06be224dc8a485b464d02c2

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 710eab66d91e6ad7981f657ae52ab65c2879ee0412041216b98de4b97a7512eb
MD5 f580e7c6d727438579dc66e304a9c8dd
BLAKE2b-256 5bfd389eddabb3002679a15d421133e78ed6005c30dff9650a73f4aec7e0d22f

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 3698a5f415b9baf39487b3d0efdcb8f827fca81ae0c166f16bc3f0250cb3eca2
MD5 5b0f30dd6562d7abf495020c0c16fbfc
BLAKE2b-256 a49dd03b1c83e85202f47b68bc2c69a6eac6fda75d18a3aa6f2c3dff16ae0e4b

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp312-cp312-macosx_10_13_universal2.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp312-cp312-macosx_10_13_universal2.whl
Algorithm Hash digest
SHA256 04bdce3641886f8999b3d07cdbf07529961df5a999bc779e53871fd1d5669ce5
MD5 ddb33bd631445aaa6837d3b6284da1f1
BLAKE2b-256 2bb9e33abc54bded683f01fd25a56b03f0b8283df120dbde192476483958e4db

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: grkmemory-1.15.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 965.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for grkmemory-1.15.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 76683872cd064de86c851f180e78175f602b4fbc03af9874a28a79ea3e530e0d
MD5 d01136e48d16b96ac879c7124f3aa274
BLAKE2b-256 52237cbd487c5197672919e9a9b396a9cf396fcc1ca170e9ae98cca70ad56462

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 778e19702c7d5b732df2db2c52ae8e57e9c93749f1b95f9301802fc0c4ac94fe
MD5 7be129bc25007fefed62b192eda7cd33
BLAKE2b-256 0a542b530dd3aece7ca0740db7c9a94723ab61e891501001e4e4e5976a74fbbf

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 15eec54dd9b184e66024746d91190d3787e0a9737f4614667fe8f12eba307c69
MD5 fcd1d238f3c7eb84dfe067c8eba3a4e3
BLAKE2b-256 3187165ae287da474b622ab3f1cadff18b9c11cd474a924a258531392e5ad0a3

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 c9239366057b17d92111fbfb0375ba0623e4917ab7037a43181c790aba12f3d8
MD5 d420d521082b93ae8c5c3661e9684b2a
BLAKE2b-256 1a57f0809273a507e33435b1c17cb35d53b49dd1b3349e4750a4af07ddf893e3

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 9194c1668ae0d867420b28e7061f7e29a849945b031036f93046d58c5b0b6519
MD5 d12a57b2ada1b104b2b4464553d5c28b
BLAKE2b-256 f8c060c7cbb4ce6d2ed449f65ad33d928ad56a33ac47a9bec8f6992449e7c029

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: grkmemory-1.15.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 959.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for grkmemory-1.15.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 85d0dd5dadf9606e1eef82a4ee96288c7690dced5f740ac9e4f81cdbaedd6a94
MD5 92bf952c595651c240e4e982e195f338
BLAKE2b-256 480d80ce26b4fa99fce1153267e68058512ff166a2d45a0b8eb2ba66bfc7fdbd

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 d3d89359181662af1777333d0267425f9ce97337f0c05693dd0e79968c0249e6
MD5 af9a947ff0c24b7a14b3b45097cbb0d3
BLAKE2b-256 e302ccc8a60912f7b585d3529c9574990489b06e388897996aabba667433c3e3

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 ee0166932e579c9b03575d1843f9b3c573098de29b101bc7624faf9bdfabc602
MD5 6ed6988025c293cf1645a2140a255c71
BLAKE2b-256 b80efd92bda0b3f72ffe2727c55d6d6ec7343a841618f59a1aeb41a3c6f35385

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e04ca1c20bb5cbdc439659500e14dcd5241d29b3cf7274390af5f29070293d0c
MD5 0f186e7954c5c60739d41669baa73083
BLAKE2b-256 a69ab298fc1c629ce02610a660750f50c8c8fba65f6290c1ddb784c884992d5d

See more details on using hashes here.

File details

Details for the file grkmemory-1.15.1-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for grkmemory-1.15.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 e039ecf29c4e81b3683d81dcc63e13affbdbbb4e4cac953a30a5cdf20e5a7197
MD5 c326516116288391dc1c5fe11d15335e
BLAKE2b-256 4cdcc0d8329e48ef8abde73ba93d7baffc374bac85ff67bce113d1b2f4ce773d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page