Skip to main content
Glama

面向 AI 智能体的持久化内存 —— 时序知识图谱、混合检索、支持 SQLite 或 PostgreSQL。

crates.io Docker MCP Registry License

java-ai-memory.dev · 源代码 · JamJet 文档 · Discord


Engram 是一个面向 AI 智能体的持久化内存层。它从对话中提取事实,将其存储在时序知识图谱中,并通过混合语义+关键词搜索进行检索 —— 支持单个 SQLite 文件或 PostgreSQL 数据库。

此仓库托管 Glama 注册表列表。源代码位于 JamJet 主仓库

快速入门 —— 30 秒

# Docker — uses local Ollama by default
docker run --rm -i \
  -v engram-data:/data \
  ghcr.io/jamjet-labs/engram-server:0.5.0

或者从 crates.io 安装:

cargo install jamjet-engram-server
engram serve

Claude Desktop 配置

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "engram": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-v", "engram-data:/data",
        "ghcr.io/jamjet-labs/engram-server:0.5.0"
      ]
    }
  }
}

重启后,模型即可使用 11 个 MCP 工具。

MCP 工具 (11)

内存工具 (7)

工具

描述

memory_add

使用 LLM 驱动的事实提取功能从对话消息中提取并存储事实。副作用:调用配置的 LLM 来解析事实,然后将其写入知识图谱。返回提取的事实 ID。需要 messages 数组和 user_id

memory_recall

使用向量相似度对存储的事实进行语义搜索。只读,无副作用。返回匹配查询的排名事实,作用域限定为 user_id 和可选的 org_id。在生成响应前使用此工具检索相关上下文。

memory_context

为 LLM 提示词组装一个带有 Token 预算的上下文块,并进行分层事实选择。只读。返回格式化的最相关事实字符串,并限制在指定的 Token 预算内。当你需要现成的提示词片段时,请使用此工具代替 memory_recall。

memory_search

使用全文搜索(SQLite FTS5 / Postgres)对事实进行关键词搜索。只读,无副作用。返回匹配精确关键词的事实。当你需要精确术语匹配而非 memory_recall 提供的语义相似度时,请使用此工具。

memory_forget

通过 ID 软删除事实,并可选择提供原因。副作用:在知识图谱中将事实标记为已删除(不会物理移除)。此工具的操作不可逆。当用户要求删除特定信息时使用。

memory_stats

获取聚合统计信息:总事实数、有效(未删除)事实数、实体数量和关系数量。只读,无副作用。使用此工具了解内存存储的大小和健康状况。

memory_consolidate

对知识图谱运行维护周期 —— 衰减陈旧事实、提升高置信度事实、去重近乎重复的内容并汇总集群。副作用:修改事实评分,并可能合并或归档事实。定期运行以保持内存准确性。

消息存储工具 (4)

工具

描述

messages_save

按 ID 保存对话的聊天消息。副作用:将消息写入存储,并可选择触发事实提取(由 --extract-on-save 控制)。使用此工具在提取的事实之外持久化完整的对话历史。

messages_get

按 ID 检索对话的所有消息。只读,无副作用。返回有序的消息数组。使用此工具重放或检查过去的对话。

messages_list

列出消息存储中的所有对话 ID。只读,无副作用。返回对话 ID 字符串数组。在通过 messages_get 检索之前,使用此工具发现已存储的对话。

messages_delete

按 ID 删除对话的所有消息。副作用:从存储中永久移除对话消息。不可逆。不会影响已提取的事实 —— 请使用 memory_forget 来处理事实。

所有内存工具的作用域均为 (org_id, user_id, session_id) —— org 为最粗粒度,session 为最细粒度。

LLM 提供商

与提供商无关。 单个二进制文件,设置 ENGRAM_LLM_PROVIDER=... 即可使用:

提供商

环境变量值

备注

Ollama

ollama (默认)

本地、免费、无需 API 密钥

OpenAI 兼容

openai-compatible

OpenAI, Azure, Groq, Together, Mistral, DeepSeek, vLLM, LM Studio 等

Anthropic

anthropic

通过 Messages API 使用 Claude

Google

google

通过 generateContent 使用 Gemini

Shell 命令

command

管道传输至任何外部脚本

模拟

mock

确定性,仅用于测试

# Example: use Groq instead of Ollama
docker run --rm -i \
  -e ENGRAM_LLM_PROVIDER=openai-compatible \
  -e ENGRAM_OPENAI_BASE_URL=https://api.groq.com/openai/v1 \
  -e OPENAI_API_KEY=gsk_... \
  -v engram-data:/data \
  ghcr.io/jamjet-labs/engram-server:0.5.0

为什么选择 Engram?

问题

Engram 的解决方案

每个智能体内存库都是 Python 优先

Rust 核心,提供原生 Python、Java 和 MCP 客户端

尝试时需要 Postgres + Qdrant + Neo4j

单个 SQLite 文件(零基础设施)或按需使用 Postgres

对话历史不是知识内存

事实提取流水线 —— 从消息中提取结构化事实

旧事实会漂移并产生冲突

冲突检测 + 整合 —— 衰减、提升、去重、汇总

内存检索要么是语义的,要么是关键词的

混合检索 —— 单次查询中结合向量搜索 + FTS5

MCP 支持是事后添加的

MCP 原生 —— 单个二进制文件暴露 11 个工具

无法按用户或租户隔离内存

一流的作用域 —— 每个查询内置 org / user / session

客户端 SDK

语言

安装

Python

jamjet (包含 EngramClient)

pip install jamjet

Java

dev.jamjet:jamjet-sdk (包含 EngramClient)

Maven Central

Spring Boot

dev.jamjet:engram-spring-boot-starter

Maven Central

Rust

jamjet-engram (直接嵌入)

cargo add jamjet-engram

相关项目

许可证

Apache 2.0 —— 参见 LICENSE


-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jamjet-labs/engram-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server