使用说明
记忆痕迹
用于AI代理的事件源存储系统。写路径中没有LLM——只有具有语义搜索的可靠剧集存储。
为什么选择Engram?
大多数AI存储系统通过在写入时执行实体提取来将写入可靠性与LLM可用性结合起来。Engram采用了一种不同的方法:首先可靠地存储事件,在语义上搜索它们,并将任何昂贵的派生结构(知识图、实体提取)推迟到可选的第二层。
结果: 写入永远不会失败,搜索速度很快,并且您可以获得一个没有运行时依赖关系的可移植二进制文件。
特性
- 三种搜索模式 --按意义(向量)、按精确单词(关键字)或同时按两者(混合)查找记忆
- 优雅的回退 --即使嵌入服务不可用,关键字搜索也能工作;混合动力车性能良好
- 快速查询 --DuckDB HNSW索引用于低于100ms的矢量搜索
- 带上你自己的嵌入物 --适用于任何与OpenAI兼容的端点:LM Studio、Ollama、llama.cpp或托管提供商
- 单个二进制 --可跨Linux、macOS和Windows移植
- MCP本地 --直接与Claude Desktop、Claude Code和Cursor集成
快速开始
先决条件
安装
选项A:下载预构建的二进制文件
从下载 发布页面 对于您的平台:
| 平台 | 二进制 |
|---|---|
| macOS(苹果硅) | engram-darwin-arm64 |
| macOS(英特尔) | engram-darwin-amd64 |
| Linux(x86_64) | engram-linux-amd64 |
| Linux(ARM64) | engram-linux-arm64 |
| 窗户 | engram-windows-amd64.exe |
# macOS/Linux: make it executable
chmod +x engram-*
mv engram-* engram
选项B:从源代码构建
git clone https://github.com/OscillateLabsLLC/engram
cd engram
# Using just (recommended — install from https://github.com/casey/just)
just setup # install deps, pull embedding model, build
# Or manually
go build -o engram ./cmd/engram/main.go
获取嵌入模型
# LM Studio
lms get text-embedding-nomic-embed-text-v1.5
# Ollama
ollama pull nomic-embed-text
跑
启动服务器:
engram serve
Engram在端口3490上启动并打印SSE端点URL。所有MCP客户端都连接到这个服务器——没有数据库锁定冲突。看 docs/mcp-integration.md 有关在macOS、Linux和Windows上作为后台服务运行的说明。
配置
通过环境变量进行配置:
| 变量 | 描述 | 默认值 |
|---|---|---|
DUCKDB_PATH |
DuckDB数据库文件的路径 | ./engram.duckdb |
EMBEDDING_URL |
OpenAI兼容的嵌入端点 | http://localhost:11434 |
EMBEDDING_MODEL |
嵌入模型名称 | nomic-embed-text |
EMBEDDING_API_KEY |
嵌入端点的承载令牌(如果需要) | (无) |
ENGRAM_PORT |
服务器端口 | 3490 |
ENGRAM_SERVER_URL |
服务器URL(由stdio代理使用) | http://localhost:3490 |
EMBEDDING_URL 接受裸主机(http://localhost:11434一 /v1 基地(http://localhost:1234/v1),或一个完整的 /v1/embeddings endpoint——Engram将其标准化。 OLLAMA_URL 仍然被视为已弃用的别名 EMBEDDING_URL.
示例:
# LM Studio
EMBEDDING_URL=http://localhost:1234/v1 EMBEDDING_MODEL=text-embedding-nomic-embed-text-v1.5 engram serve
# Ollama (the default)
EMBEDDING_URL=http://localhost:11434 EMBEDDING_MODEL=nomic-embed-text engram serve
注: Engram的模式存储768维向量,因此选择768维的嵌入模型(Nomic家族适合)。
看 .env.example 对于模板。
切换嵌入模型
来自不同模型的嵌入存在于不同的向量空间中——混合它们会悄悄地降低相似性得分。Engram记录哪个模型生成了每个存储的向量,当存储的嵌入与配置的模型不匹配时,在启动时发出警告,并可以在适当的位置重新生成它们:
# Refresh stale embeddings (missing, or produced by a different model)
curl -X POST http://localhost:3490/api/v1/admin/reembed
# Re-embed everything regardless of provenance
curl -X POST http://localhost:3490/api/v1/admin/reembed -d '{"force": true}'
# Check progress and staleness counts
curl http://localhost:3490/api/v1/admin/reembed
该作业在服务器内异步运行,只接触派生数据(剧集内容永远不会被修改),并且可以安全地重新运行——任何失败的都会在下一次重试。这也是您在嵌入服务器关闭时回填所写剧集的方式。
MCP客户端集成
Engram通过模型上下文协议(MCP)与Claude Desktop、Claude Code和Cursor集成。
快速设置
-
启动服务器 (参见 后台服务文档 用于持久设置):
engram serve -
连接您的客户。 大多数客户直接支持SSE:
光标 (
.cursor/mcp.json):{ "mcpServers": { "engram-memory": { "url": "http://localhost:3490/mcp/sse" } } }克劳德桌面版 (stdio代理,适用于需要stdio的客户端):
{ "mcpServers": { "engram-memory": { "command": "/absolute/path/to/engram", "args": ["stdio"], "env": { "ENGRAM_SERVER_URL": "http://localhost:3490" } } } }
有关详细的集成说明、可用的MCP工具和故障排除,请参阅 docs/mcp-integration.md.
Docker和部署
快速启动(开发)
# macOS/Windows
just docker-up
# Linux
just docker-up-linux
有关包括Docker Compose、Kubernetes和生产配置在内的详细部署说明,请参阅 docs/deployment.md.
清理模式
特工们通过以下方式清理陈旧的记忆 update_episode --印痕故意不暴露 delete_episode MCP工具,因为永久删除是一种故意的人类行为,而不是代理应该自主完成的事情。
软删除(可逆)
集 expired_at 到过去的时间戳。该事件在默认搜索中隐藏,但仍保留在存储中——稍后通过清除将其恢复 expired_at.
{"tool": "update_episode", "id": "...", "expired_at": "2020-01-01T00:00:00Z"}
降级(可见但已过滤)
替换剧集的标签,以包含类似的标记 deprecated 或 low-confidence。该事件会保留在搜索结果中,因此不会丢失任何内容,但调用者可以在查询时进行筛选。
{"tool": "update_episode", "id": "...", "tags": ["deprecated", "original-topic"]}
计划到期
集 expired_at 转换为未来的时间戳——在此时间之后,该事件将从默认搜索中消失,无需进一步操作。
建筑
engram/
├── cmd/engram/ # Entry point (serve / stdio subcommands)
├── internal/
│ ├── api/ # HTTP + MCP SSE server
│ ├── db/ # DuckDB operations + VSS
│ ├── embedding/ # OpenAI-compatible embeddings client
│ ├── mcp/ # MCP tool definitions
│ ├── models/ # Data models
│ └── proxy/ # stdio-to-SSE proxy
├── scripts/ # Build and test scripts
├── .github/workflows/ # CI/CD (build + release)
└── Dockerfile # Container image
- 服务器优先:
engram serve独家拥有DuckDB,通过SSE+REST API公开MCP - 精简stdio代理:
engram stdio为需要stdio的客户端(例如Claude Desktop)将stdin/stdout连接到服务器 - 鸭数据库 VSS扩展用于向量相似性搜索(HNSW索引)
- OpenAI兼容嵌入 --LM Studio、Ollama、llama.cpp或托管提供商(768维,例如。
nomic-embed-text)
如需更深入地了解架构,请参阅 docs/architecture.md.
设计原则
- 写作永不失败 (如果数据库已启动)
- 写入路径中没有LLM --仅嵌入,这些是可重试的
- 事件日志是真相的来源 --其他一切都是派生的
- 简单多于聪明 --矢量搜索覆盖了80%的用例
- 便携的 --单个二进制、单个数据库文件
文档
测试
该项目包括单元和集成测试:
# Run all tests
just test
# Run with coverage
just test-coverage
贡献
看 贡献.md 关于开发设置、代码风格以及如何提交pull请求。
许可证
麻省理工学院
