关于 Yantrikdb
YantrikDB 是面向 AI Agent 的认知记忆 MCP 服务,提供跨会话的持久语义记忆、知识图谱和自适应召回。数据保存在本机 SQLite 中,也可通过 HTTP 集群共享。
主要功能
- 01持久化语义记忆与按需召回
- 02知识图谱与关系记录
- 03矛盾检测与记忆修正
- 04本地 SQLite 存储,无遥测
- 05可选的多种 Embedder 后端
适用场景
- 01让编码 Agent 跨会话保留项目决策与上下文
- 02在多台机器之间共享同一套 Agent 记忆
- 03减少每次对话加载全部记忆文件带来的上下文开销
MCP 相关
该项目是 MCP 服务,向 Claude Code、Cursor、Windsurf 等 MCP 客户端暴露 21 个记忆相关工具,包括 remember、recall、graph、conflict 等。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
21收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | any | 否 | |
| claims | any | 否 | |
| domain | string | 否 | |
| source | string | 否 | |
| summary | any | 否 | |
| valence | number | 否 | |
| memories | any | 否 | |
| metadata | any | 否 | |
| certainty | number | 否 | |
| namespace | string | 否 | |
| created_at | any | 否 | |
| event_time | any | 否 | |
| importance | number | 否 | |
| memory_type | string | 否 | |
| emotional_state | any | 否 | |
| idempotency_key | any | 否 |
详细介绍
YantrikDB MCP 服务
YantrikDB — 面向 AI Agent 的认知记忆。持久语义召回、知识图谱、矛盾检测与程序性学习。以可嵌入引擎、网络数据库或 MCP 服务形式发布。
适用于 Claude Code、Cursor、Windsurf、Hermes Agent、Prime Agent 以及任何兼容 MCP 的客户端。附带一个可移植的 Agent Skills 技能 — skills/persistent-memory — 它向任何兼容的 harness 传授记忆黄金路径。
网站: yantrikdb.com · 文档: yantrikdb.com/guides/mcp · GitHub: yantrikos/yantrikdb-mcp · 论文: Skill as Memory, Not Document

屏幕上的每个值都是服务端通过 MCP 给出的自身回答 — 驱动脚本:docs/demo/demo.py,使用 docs/demo/demo.tape 录制。
一览
| 是什么 | 一个 MCP 服务,为任何兼容 MCP 的 AI Agent 提供跨会话的持久、结构化、可查询记忆 |
| 安装 | pip install yantrikdb-mcp |
| 适用于 | Claude Code、Cursor、Windsurf、Continue、Claude Desktop、Hermes Agent、Prime Agent、任何 MCP 客户端 |
| 存储 | 本地 SQLite,位于 ~/.yantrikdb/memory.db(或任意路径;或 HTTP 集群) |
| 嵌入器 | 内置 64 维 Rust 嵌入器(默认)、384 维 ONNX MiniLM([onnx] extra)、256 维多语言(101 种语言) |
| 工具 | 21 个 — remember、recall、forget、correct、think、memory、graph、conflict、trigger、session、temporal、procedure、category、personality、stats、skill、gaps、conversation、task、pack、atlas |
| 许可证 | MIT(引擎:Apache-2.0) |
| 隐私 | 所有数据都在你的机器上。无遥测。无外部服务。 |
安装
# Default — uses the engine's bundled 64-dim embedder. ~10 MB install,
# ~80 ms cold start, no native ML deps.
pip install yantrikdb-mcp
# Optional: higher-quality 384-dim ONNX MiniLM-L6-v2 embedder (~150 MB install).
# Auto-used when an existing pre-v0.6 database is detected.
pip install 'yantrikdb-mcp[onnx]'
使用 Claude Code? 跳过 pip 步骤:/plugin marketplace add yantrikos/yantrikdb-mcp 然后 /plugin install yantrikdb — 直接从本仓库安装,无需经 PyPI 往返。
从 v0.5.x 升级? 你现有的数据库保持 384 维 — 安装
[onnx]extra 即可透明地继续使用它。全新安装默认使用 精简的内置嵌入器。v0.7.0+ 会自动锁定引擎迁移修复。 参见下方的 嵌入器后端。
配置
MCP 服务有三种部署模式。选择适合你环境的那一种。
模式 1 — 本地(默认,推荐单用户使用)
MCP 服务在进程内运行引擎,使用本地 SQLite 数据库。快速、私密、零依赖。
{
"mcpServers": {
"yantrikdb": {
"command": "uvx",
"args": ["yantrikdb-mcp"]
}
}
}
uvx 会按需获取并运行该服务,因此无需安装步骤即可使用
(它需要在 PATH 中有 uv)。如果你自行
用 pip 或 pipx 安装了该包,则 "command": "yantrikdb-mcp" 且不带
args 是等效的。
就这样。Agent 会自动召回上下文、自动记住决策,并自动检测矛盾 — 无需提示。
模式 2 — HTTP 集群(推荐用于共享/多机部署)
将所有工具调用转发到 YantrikDB HTTP 集群,而不是使用嵌入式引擎。MCP 服务是一个无状态的轻量客户端 —— 所有记忆都存放在集群上,可从任意机器访问。
优势:跨机器共享记忆、高可用性、无需本地下载嵌入器、无需本地数据库。
{
"mcpServers": {
"yantrikdb": {
"command": "uvx",
"args": ["yantrikdb-mcp"],
"env": {
"YANTRIKDB_SERVER_URL": "http://node1:7438,http://node2:7438",
"YANTRIKDB_TOKEN": "ydb_your_database_token"
}
}
}
}
- 多个节点用逗号分隔,以支持 Raft 集群自动发现
- 故障转移时自动跟随 leader
- 请求超时 15s
- 从集群获取 token:
yantrikdb token create --db your_database
模式 3 — SSE 服务(旧版,单个远程实例)
将 MCP 服务本身作为长期运行的 SSE 服务运行,并使用其自带的嵌入式数据库。客户端通过 HTTP 流式连接。
# Generate a secure API key
export YANTRIKDB_API_KEY=$(python -c "import secrets; print(secrets.token_urlsafe(32))")
# Start SSE server
yantrikdb-mcp --transport sse --port 8420
{
"mcpServers": {
"yantrikdb": {
"type": "sse",
"url": "http://your-server:8420/sse",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
支持 sse 和 streamable-http 传输方式。注意:SSE 连接在空闲时可能断开 —— 对于共享部署,模式 2(HTTP 集群)更可靠。
环境变量
| 变量 | 用于模式 | 默认值 | 描述 |
|---|---|---|---|
YANTRIKDB_SERVER_URL | 集群 | (未设置 → 本地模式) | 逗号分隔的集群节点 URL |
YANTRIKDB_TOKEN | 集群 | (无) | 集群数据库的 Bearer token |
YANTRIKDB_DB_PATH | 本地 | ~/.yantrikdb/memory.db | 数据库文件路径 |
YANTRIKDB_EMBEDDER | 本地 | auto | 后端选择器:auto | bundled | onnx | multilingual |
YANTRIKDB_EMBEDDING_MODEL | 本地 | all-MiniLM-L6-v2 | ONNX 模型名称(仅在 YANTRIKDB_EMBEDDER=onnx 时使用) |
YANTRIKDB_SKILLS_WRITE_ENABLED | 全部 | false | 设为 true 以允许 Agent 通过 skill(action="define") 编写技能(见下方 技能基底) |
YANTRIKDB_OUTCOMES_WRITE_ENABLED | 全部 | true | 通过 skill(action="outcome") 进行结果跟踪。默认开启,使反馈闭环开箱即用;设为 false 可锁定结果基底。于 v0.8.1 根据 #8 添加 |
YANTRIKDB_API_KEY | SSE 服务 | (无) | 提供 SSE/HTTP 服务时使用的 Bearer token |
嵌入器后端
本地模式内置三种嵌入器。MCP 会自动选择一种;可通过 YANTRIKDB_EMBEDDER 覆盖。
| 后端 | 维度 | 冷启动 | 安装大小 | 语言覆盖 | 使用场景 |
|---|---|---|---|---|---|
bundled(引擎默认) | 64 | ~80 ms | ~10 MB | 仅英语 | 新建/空数据库(自动选择) |
onnx(MiniLM-L6-v2) | 384 | ~2 s | ~150 MB | 英语(更高召回) | 已有的 v0.6 之前数据库(自动选择),或显式设置时 |
multilingual(potion-multilingual-128M) | 256 | ~2 s + 首次使用时 ~460 MB 下载 | ~10 MB pip + ~500 MB 模型缓存 | 101 种语言(BGE-M3 分词器) | 仅通过 YANTRIKDB_EMBEDDER=multilingual 主动启用 |
auto(默认)会读取 YANTRIKDB_DB_PATH 处的 SQLite 文件,如果其中已包含记忆则选择 onnx —— 在升级时保持召回质量 —— 否则选择 bundled。multilingual 永远不会被自动选中,因为其 256 维向量与已有的 bundled(64 维)或 ONNX(384 维)数据库不兼容;仅可在全新数据库上主动启用。
设置 YANTRIKDB_EMBEDDER=bundled|onnx|multilingual 进行覆盖。如果你设置 YANTRIKDB_EMBEDDER=onnx(或自动检测选中了它)但未安装相应扩展,服务会快速失败并给出安装提示:
RuntimeError: Existing DB has memories embedded with the 384-dim ONNX
model, but ONNX deps are missing.
Install with: pip install 'yantrikdb-mcp[onnx]'
对于 multilingual 后端,引擎会在首次使用时从 github.com/yantrikos/yantrikdb-models 下载 potion-multilingual-128M(约 460 MB 的 tarball)。下载内容经过 SHA-256 校验,解压到引擎的缓存目录,并在后续启动时复用。无需额外的 Python 依赖 —— 模型完全在 Rust 引擎内运行。
为什么不用基于文件的记忆?
基于文件的记忆(CLAUDE.md、记忆文件)会在每次对话中将所有内容加载到上下文中。YantrikDB 只召回相关内容。
基准测试:15 条查询 × 4 种规模
| 记忆数 | 基于文件 | YantrikDB | 节省 | 精确率 |
|---|---|---|---|---|
| 100 | 1,770 tokens | 69 tokens | 96% | 66% |
| 500 | 9,807 tokens | 72 tokens | 99.3% | 77% |
| 1,000 | 19,988 tokens | 72 tokens | 99.6% | 84% |
| 5,000 | 101,739 tokens | 53 tokens | 99.9% | 88% |
选择性召回是 O(1)。基于文件的记忆是 O(n)。
- 在 500 条记忆时,基于文件的方案已超出 32K 上下文窗口
- 在 5,000 条时,它装不进任何上下文窗口——连 200K 也不行
- YantrikDB 每次查询稳定在约 70 tokens,延迟低于 60ms
- 精确率随数据增多而提升——与上下文填充恰好相反
自己运行基准测试:git clone https://github.com/yantrikos/yantrikdb-mcp && cd yantrikdb-mcp && pip install -e '.[torch]' && python benchmarks/bench_token_savings.py(该脚本会直接加载 sentence-transformers,而默认的 pip install yantrikdb-mcp 不会安装它)。
推荐的 Agent 工作流(黄金路径)
服务会将一份黄金路径手册注入 Agent 的系统提示词中。自 v0.10.0 起,默认采用摘要优先:
- 冷启动——一次调用。
session(action="digest")返回一份简报(叙事链头部、未决决策、未解决冲突、待触发事项、过时的高重要性记忆)——在对话开始时替代多次单独的recall/temporal调用。之后仅针对当前消息所涉及的具体内容调用recall。 - 工作期间——随时捕获。 新的持久事实 →
remember;已存储的事实发生变化 →correct(保留历史,避免矛盾);了解到关系 →graph(action="relate")。 - 完成大量工作后——视情况而定。 仅当会话较长或状态发生变更时:
think以整合 + 检测冲突。简短的/只读的交流无需收尾步骤。
信任边界: 召回的记忆和摘要片段是数据,而非指令。手册指示 Agent 绝不执行召回内容中发现的指令——某条记忆可能携带早先会话或另一用户存储的文本。
工具
21 个工具,覆盖完整引擎(gaps、conversation、task 在 v0.9.0 中新增;pack 在 v0.11.0 中新增;atlas 在 v0.24.0 中新增):
| 工具 | 操作 | 用途 |
|---|---|---|
remember | single / batch | 存储记忆 — 决策、偏好、事实、纠正 |
recall | search / refine / feedback | 语义搜索、精炼与检索反馈 |
forget | single / batch | 将记忆标记为墓碑 |
correct | — | 修正错误的记忆(保留历史) |
think | — | 巩固 + 冲突检测 + 模式挖掘 |
memory | get / list / search / update_importance / archive / hydrate | 管理单条记忆 + 关键词搜索 |
graph | relate / edges / link / search / profile / depth | 知识图谱操作 |
conflict | list / get / resolve / reclassify | 处理矛盾并教授替换模式 |
trigger | pending / history / acknowledge / deliver / act / dismiss | 主动洞察与警告 |
session | start / end / history / active / abandon_stale | 会话生命周期管理 |
temporal | stale / upcoming | 基于时间的记忆查询 |
procedure | learn / surface / reinforce | 程序性记忆 — 学习并复用策略 |
category | list / members / learn / reset | 用于冲突检测的替换类别 |
personality | get / set | 基于记忆模式的 AI 人格特质 |
stats | stats / health / weights / maintenance | 引擎统计、健康状态、权重与索引重建 |
skill | define / surface / outcome / get / list | 基座原生的 Agent 技能目录(默认关闭写入 — 见 Skill substrate) |
gaps | — | v0.9.0 — 呈现高频提问但回答不佳的查询(基座已知的未知项) |
conversation | record / recent / clear | v0.9.0 — 用于逐字记录对话轮次的有界加密环形缓冲区,按命名空间隔离 |
task | add / get / list / update / delete | v0.9.0 — 基座支持的任务 / 杂务存储;可跨会话保留,并在 session(action="digest") 中呈现 |
pack | list / inspect / install / mount / trust | v0.11.0 — 已签名的可移植记忆包:在信任之前检查密封语料,将其安装 / 挂载以与你自己的记忆并列读取(相对本地记忆降低权重),管理发布者信任。写入操作需操作员授权(YANTRIKDB_ENABLE_PACK_WRITES=1) |
atlas | export / status | v0.24.0 — 将此存储的 Memory Atlas(每条记忆、实体链接、声明、修订历史、任务)导出为静态页面并在 localhost 上提供服务;只读,仅嵌入式模式 |
此外,v0.9.0 中在现有工具上新增了以下操作:
session(action="digest")— 一次调用即可完成启动时简报(叙事链头 + 未决决策 + 冲突 + 触发器)think(maintenance_cycle=True)— 自主卫生休眠周期think(last_cycle_only=True)— 在不运行的情况下读取上一周期摘要stats(action="audit_leak")— 隐私 / 泄露候选审计stats(action="skill_outcomes")— 持久化技能结果计数graph(action="auto_relate" / "record_link" / "record_unlink" / "linked_records" / "recall_with_links")— 共现边 + 记录间链接 + 链接扩展召回conflict(action="auto_resolve")— 一次性清除无歧义的冲突memory(action="chain_head" / "history")— 链命名空间头 + 修订历史trigger(action="prune")— 限制待处理触发器的积压remember(summary=...)— 草稿模式:引擎将长摘要原子化为相互关联的语义事实(会话结束自动捕获)
完整文档见 yantrikdb.com/guides/mcp。
技能基底(v0.8.0+)
YantrikDB 提供结构化的 Agent 技能目录 —— 独立于松散的 procedure 记忆。技能具有 schema(skill_id、applies_to、triggers、body、type),并存储在专用的 skill_substrate 命名空间中,因此多个使用方(本 MCP、yantrikdb-hermes-plugin、Lane B SDK、WisePick、yantrikdb-server 的 /v1/skills/* 端点)都读写同一基底。背景:Sarkar 2026 — Skill as Memory, Not Document。
安全模型
技能写入会跨会话塑造 Agent 的未来行为,因此 MCP 服务实现了纵深防御。每项控制都有对应的环境变量开关(启动时即锁定 —— C2),完整状态通过 stats(action="stats") 和审计日志暴露。
分层控制(除另有说明外,每项默认开启):
| 层级 | 控制项 | 环境变量 | 备注 |
|---|---|---|---|
| Schema | skill_id 正则,正文 50–5000 字符,applies_to 1–10 个条目,skill_type 枚举 | (始终开启) | 与 yantrikdb-server /v1/skills/define 相同的正则集合 |
| A1 提示词注入标记 | 拒绝包含角色混淆 / "ignore previous instructions" 模式的正文 | YANTRIKDB_SKILLS_DISABLE_SCANNERS=A1 可禁用(已审计) | OWASP LLM01 |
| A2 凭据扫描器 | AWS/GitHub/Slack/Stripe/Google/Anthropic/OpenAI 密钥、SSH/PGP 私钥、JWT、密码赋值 | =A2 可禁用 | GitHub 秘密扫描的子集 |
| A3 URL/IP 拦截 | 拒绝正文中的 http(s)、ftp、IPv4 字面量 | YANTRIKDB_SKILLS_ALLOW_URLS=true 可允许 | 下游 Agent 的数据外泄路径 |
| A4 Unicode 规避 | 拒绝非打印字符(Cf/Cs/Cn,白名单除外) | =A4 可禁用 | 双向文本覆盖(U+202E)、零宽空格 |
| A5 编码载荷 | 拒绝 ≥200 字符的 base64/hex 连续串 | =A5 可禁用 | 启发式 — 对大哈希易产生误报 |
| B1 命名空间允许列表 | skill_id 第一段必须在操作员列表中 | YANTRIKDB_SKILLS_ALLOWED_NAMESPACES=workflow,review | 未设置 = 全部允许 |
| B2 作者归属 | 记录 session_id、os_user、hostname、wall_clock、audit_nonce | (始终开启) | 取证追踪 |
| B3 跨源替换 | 拒绝覆盖由其他消费者写入的技能 | YANTRIKDB_SKILLS_ALLOW_CROSS_ORIGIN_REPLACE=true 可允许 | 防御 MCP↔hermes-plugin 冲突 |
| B4 Supersedes 完整性 | supersedes 必须引用同一命名空间中已存在的技能 | (始终开启) | 阻止恶意注销合法技能 |
| C1 时限门控 | 门控在时间戳自动关闭(适用于 define + outcome) | YANTRIKDB_SKILLS_WRITE_EXPIRES_AT=2026-12-31T00:00:00Z | 未设置 = 无过期 |
| C1.5 分离 outcome 门控 | outcome 操作使用自己的门控,默认开启 | YANTRIKDB_OUTCOMES_WRITE_ENABLED=false 可同时锁定 outcome | v0.8.1+:define 和 outcome 具有不同的威胁模型 — outcome 无法引入新指令,只能针对已有技能追加 {succeeded, note≤500}。反馈循环默认工作;如有需要可显式锁定 |
| C2 锁定配置 | 所有 YANTRIKDB_SKILLS_* / YANTRIKDB_OUTCOMES_* 环境变量在启动时读取一次 | (始终开启) | 在子进程中修改环境变量无法绕过门控 |
| D1 审计日志 | 以 JSONL 追加每个接受/拒绝/篡改事件 | YANTRIKDB_SKILLS_AUDIT_LOG=/var/log/yantrikdb/skills.jsonl | 未设置 = 无审计(启动时警告) |
| D2 速率限制 | 按 session-id 的滑动窗口写入上限 | YANTRIKDB_SKILLS_WRITE_RATE=30(默认写入次数/分钟) | 抵御洪泛攻击 |
| D3 Outcome.note 防护 | Note ≤500 字符 + 经 A1/A2/A4 扫描 | (始终开启) | 关闭 outcome 侧信道 |
D4 stats 中的计数器 | 按原因统计接受/拒绝次数,通过 stats(action="stats")["skill_substrate"] 暴露 | (始终开启) | 操作员仪表板 |
| E1 正文 SHA-256 | 写入时存储,每次读取时重新验证 | (始终开启) | 检测带外数据库篡改 — surface/get 会省略不匹配项并记录到审计 |
| E2 作者来源 | metadata.author_origin 标签 — 默认为 yantrikdb-mcp | YANTRIKDB_SKILLS_AUTHOR_ORIGIN=... 可覆盖 | 跨消费者追踪基板来源 |
| F 启动安全检查 | 启动时对危险配置发出警告 | (始终开启) | 将 [F.1]–[F.5] 记录到 stderr + 审计 |
G rule 的审核队列 | rule 类型技能路由到 skill_pending_review(不被 surface/get/list 暴露) | YANTRIKDB_SKILLS_RULE_REQUIRES_REVIEW=false 可禁用(不推荐) | 规则影响 Agent 策略 — 需要人工批准 |
| 多租户防护 | 如果数据库显示多个 actor ID 且未确认,则发出 [F.1] 警告 | YANTRIKDB_SKILLS_MULTITENANT_ACK=true | 一个数据库 = 一个租户是安全默认值 |
企业检查清单:
# Minimum production config when you turn the gate ON:
YANTRIKDB_SKILLS_WRITE_ENABLED=true
YANTRIKDB_SKILLS_WRITE_EXPIRES_AT=2026-12-31T00:00:00Z
YANTRIKDB_SKILLS_ALLOWED_NAMESPACES=workflow,review,onboarding
YANTRIKDB_SKILLS_AUDIT_LOG=/var/log/yantrikdb/skills.audit.jsonl
YANTRIKDB_SKILLS_AUTHOR_ORIGIN=acme-corp-claude-prod
# Defaults are already correct: writes off, scanners on, rate-limit 30/min,
# rule-type routed to review, body-hash verified on read, locked at startup.
审计日志是权威记录。每一次接受、每一次拒绝(附带标记的扫描器)、每一次读取时的篡改检测、每一次因过期而关闭的关卡——全部以 JSONL 形式记录在案。把它接入你的 SIEM。
stats(action="stats") 示例输出(skill_substrate 切片)
"skill_substrate": {
"counters": {
"skill_defines_accepted": 12,
"skill_defines_rejected": {"content_scan:A2": 1, "namespace_not_allowed": 3},
"skill_outcomes_recorded": 47,
"skill_pending_review": 2
},
"config": {
"writes_enabled": true,
"write_expires_at": "2026-12-31T00:00:00+00:00",
"allowed_namespaces": ["workflow", "review"],
"audit_log_path": "/var/log/yantrikdb/skills.audit.jsonl",
"rule_requires_review": true,
"author_origin": "acme-corp-claude-prod"
}
}
Schema(写入时校验)
| 字段 | 约束 |
|---|---|
skill_id | 小写点分隔的段,长度 4–200,例如 workflow.git.commit_clean |
body | 50–5000 个字符 |
applies_to | 1–10 个小写下划线标识符(不允许连字符——对 substrate 一致性至关重要) |
skill_type | procedure、reference、lesson、pattern、rule 之一 |
on_conflict | reject(默认)或 replace |
示例会话
# Define (requires gate enabled)
skill(action="define",
skill_id="workflow.git.commit_clean",
body="Before commit: run pytest, run lint, write a clear subject + body.",
skill_type="procedure",
applies_to=["git", "release"])
# Surface relevant skills for the current task
skill(action="surface", query="how to commit cleanly", top_k=5)
# Record an outcome after using the skill (gated, append-only)
skill(action="outcome", skill_id="workflow.git.commit_clean",
succeeded=True, note="caught a flake8 issue pre-push")
结果是以追加方式写入 outcome_substrate 命名空间的事件——不会在父技能上自动汇总,这与 yantrikdb-server 的“schema 而非语义”设计原则一致。Agent(或操作员)可以自行聚合结果来计算成功率。
FAQ
什么是 YantrikDB MCP?
YantrikDB MCP 是一个 Model Context Protocol (MCP) 服务,为 AI Agent 提供跨会话的持久认知记忆。它暴露 21 个工具(remember、recall、forget、correct、think、graph、conflict、trigger、session、temporal、procedure、category、personality、stats、memory、skill、gaps、conversation、task、pack、atlas),任何兼容 MCP 的客户端——Claude Code、Cursor、Windsurf、Continue、Claude Desktop——都可以自动调用,无需提示。
这与 CLAUDE.md 等基于文件的记忆有何不同?
基于文件的记忆会在每次对话时把所有内容加载进上下文,其 token 成本随规模呈 O(n) 增长。YantrikDB 采用选择性语义召回——在 5,000 条记忆时,基于文件的方案每次对话约花费 101K token,而 YantrikDB 仅约 53 token。随着数据增多,精度会提升,而不是随着上下文窗口被填满而下降。基准测试脚本:python benchmarks/bench_token_savings.py。
它与 mem0 / Letta / Zep / 原生 MCP 记忆相比如何?
见下方对比表。简而言之:YantrikDB 是唯一同时以可嵌入的 Rust 引擎和 MCP 服务和具备相同 substrate 语义的网络数据库形式发布的方案。它是唯一具备一等公民式程序性记忆 + 写入时由 schema 校验的技能 substrate + 自主整合/冲突检测的方案。它也是唯一其底层引擎以同行评审论文形式发表的方案(Sarkar 2026, Zenodo DOI 10.5281/zenodo.20128887)。
我可以自托管吗?
可以——有三种方式。(1) 本地:只需 pip install yantrikdb-mcp 并将你的 MCP 客户端指向它。SQLite 位于 ~/.yantrikdb/memory.db。(2) 网络:将 yantrikdb-server 作为多租户 HTTP 集群运行,通过 YANTRIKDB_SERVER_URL 将 MCP 指向它。(3) 混合:SSE 服务模式(yantrikdb-mcp --transport sse),用于共享部署。
我的数据会被发送到任何地方吗?
不会。所有数据都保留在你的机器(或你的集群)上。没有遥测,没有第三方服务。默认嵌入器通过静态查找完全在 Rust 引擎内运行——无需下载模型或调用 API。可选的 [onnx] 和多语言嵌入器会从 HuggingFace 的 CDN 获取一次模型权重,之后在本地运行。
procedure 和 skill 有什么区别?
procedure 用于存储宽泛的操作指南记忆(按有效性排序,无架构)。skill 用于存储结构化目录条目(skill_id、applies_to、triggers、body、type),这些条目位于专用的 skill_substrate 命名空间中,并与 yantrikdb-hermes-plugin、Lane B SDK、WisePick 和 yantrikdb-server /v1/skills/* endpoints 共享。个人操作指南笔记请使用 procedure;需要让其他使用方也能呈现的结构化 Agent 能力请使用 skill。
启用 skill 编写功能安全吗?
默认关闭 skill 写入功能,正是因为它们可能影响 Agent 未来的行为。启用此开关后,将应用七层纵深防御:提示词注入扫描器、凭据扫描器、URL 屏蔽、Unicode 规避扫描器、命名空间允许列表、作者归属、审计日志、速率限制、正文哈希篡改检测,以及针对 rule 类型 skill 的审核队列。请参阅上文的安全模型。
它能用于生产环境吗?
可以——yantrikdb-mcp 已在 YantrikDB 家用实验室集群的生产环境中运行(1973+ 条记忆、SSE 传输,每个发布周期运行 2 周),也是引擎发布决策所依据的参考部署。v0.8.x 将引擎的当日修复节奏引入 MCP 服务本身:迄今社区提交的 3 个问题分别在约 4 小时、5 小时和 4 天内修复——中位时间约为 5 小时,其中 3 个问题有 2 个在当天修复。
引擎是用什么语言编写的?
YantrikDB 引擎使用 Rust 编写(crates.io: yantrikdb),并通过 pyo3 提供 Python 绑定(PyPI: yantrikdb)。MCP 服务本身使用 Python 编写,是围绕引擎的 Python 绑定构建的轻量封装,并包含 stdio/SSE/HTTP 传输层的连接代码。
与其他 Agent 记忆系统的比较
| 能力 | YantrikDB MCP | mem0 | Letta (MemGPT) | Zep | 原生 MCP 文件系统记忆 |
|---|---|---|---|---|---|
| 原生支持 MCP | ✅ 一等支持 | 通过自定义集成 | 通过自定义集成 | 通过自定义集成 | ✅ 文件系统形态 |
| 可嵌入(无需服务) | ✅ Rust + Python | ❌ 需要服务 | ❌ 需要服务 | ❌ 需要服务 | ✅ 文件系统 |
| 网络数据库模式 | ✅ Raft HA 集群 | ✅ Pro / Enterprise | ✅ 可自托管 | ✅ 托管 + 可自托管 | ❌ |
| 语义回忆(向量) | ✅ HNSW | ✅ | ✅ | ✅ | ❌(仅文件 grep) |
| 知识图谱 | ✅ 类型化节点 + 边 | ✅(近期新增) | 部分支持 | ✅ | ❌ |
| 矛盾检测 | ✅ 自主执行 | ❌ | ❌ | ❌ | ❌ |
| 程序性记忆 | ✅ 按有效性排序 | ❌ | 部分支持 | ❌ | ❌ |
| Skill 基底(经过架构验证) | ✅ 具备 7 层防御 | ❌ | ❌ | ❌ | ❌ |
自主整合(think) | ✅ | ❌ | 部分支持 | ✅ | ❌ |
| 时间衰减 + 半衰期 | ✅ 生物学模型 | ❌ | ❌ | ❌ | ❌ |
| 主动触发器 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 个性特征推导 | ✅ 基于记忆模式 | ❌ | ❌ | ❌ | ❌ |
| 存储 | 本地 SQLite + WAL | 托管 | 本地 | 本地 + 托管 | 文件系统 |
| 许可证 | MIT(引擎为 Apache-2.0) | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
| 同行评审论文 | ✅ Zenodo | ❌ | ✅ MemGPT 论文 | ❌ | ❌ |
| 问题当日修复节奏 | ✅(v0.8.x 的 2 个问题均在 4–5 小时内修复) | 不定 | 不定 | 不定 | 不适用 |
比较内容反映截至 2026 年 5 月面向公众的功能。如有需要更正的行,欢迎提交 PR。
引用本文
如果你在学术或研究场景中使用 YantrikDB,请引用这篇基底论文:
@misc{sarkar2026skill,
author = {Sarkar, Pranab},
title = {Skill as Memory, Not Document: A Database-Native Substrate for Agent Skill Catalogs},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.20128887},
url = {https://doi.org/10.5281/zenodo.20128887},
orcid = {0009-0009-8683-1481}
}
纯文本引用:
Sarkar, P. (2026). Skill as Memory, Not Document: A Database-Native Substrate for Agent Skill Catalogs. Zenodo. https://doi.org/10.5281/zenodo.20128887
示例
1. 在对话开始时自动召回
用户:“我们对数据库迁移做了什么决定?”
Agent 会自动调用 recall("database migration decision"),并在回复前检索相关记忆——无需手动提示。
2. 记住决策并构建知识图谱
用户:“新服务将使用 PostgreSQL。Alice 负责迁移。”
Agent 会调用:
remember(text="Decided to use PostgreSQL for the new service", domain="architecture", importance=0.8)remember(text="Alice owns the PostgreSQL migration", domain="people", importance=0.7)graph(action="relate", entity="Alice", target="PostgreSQL Migration", relationship="owns")
3. 检测矛盾
存储“我们使用 Python 3.11”后,之后又存储“我们已升级到 Python 3.12”,调用 think() 就会检测到冲突。Agent 会指出:
“我发现一处矛盾:你之前说使用 Python 3.11,但最近提到了 Python 3.12。当前使用的是哪个版本?”
然后通过 conflict(action="resolve", conflict_id="...", strategy="keep_b") 解决。
隐私政策
YantrikDB MCP 服务会将所有数据存储在你的本地计算机上(默认路径:~/.yantrikdb/memory.db)。不会向外部服务发送数据,不会收集遥测数据,运行期间也不会联系第三方服务。
- **数据收集:**仅包括你通过
remember工具明确存储的内容,或 AI Agent 代表你存储的内容。 - **数据存储:**存储在文件系统中的本地 SQLite 数据库。你可以通过
YANTRIKDB_DB_PATH指定路径。 - **第三方共享:**无。在本地(stdio)模式下,数据绝不会离开你的计算机。
- **网络模式:**使用 SSE/HTTP 传输时,数据会在客户端与自托管服务之间传输。不会涉及 Anthropic 或第三方服务。
- **嵌入模型:**使用本地 ONNX 模型(
all-MiniLM-L6-v2)。模型文件首次使用时会从 Hugging Face Hub 下载一次,之后缓存在本地。 - **保留期限:**数据会一直保留,直到你将其删除(使用
forget工具)或删除数据库文件。 - **联系邮箱:**[email protected]
贡献
请参阅 CONTRIBUTING.md,了解 venv 环境设置、运行 pytest 和提交 PR 的方法。
支持
- 问题反馈:github.com/yantrikos/yantrikdb-mcp/issues
- **电子邮箱:**[email protected]
- 文档:yantrikdb.com/guides/mcp
相关项目
相同的记忆基础,不同的接入方式:
- yantrikdb — 本服务所基于的可嵌入 Rust/Python 引擎(
pip install yantrikdb)。 - yantrikdb-server — HTTP 网关和 HA 集群,适用于上述网络部署模式。
- yantrikdb-client — 面向该服务的类型化 Python 客户端。
- langchain-yantrikdb — 将 YantrikDB 用作 LangChain 的
VectorStore和ChatMessageHistory。 - yantrikdb-hermes-plugin — NousResearch/hermes-agent 的记忆提供程序,共享相同的技能基础。
- yantrik-memory — 与框架无关的记忆层,包含 traits 和 bond 演化机制。
- openclaw-memory-yantrikdb — 由 YantrikDB 提供支持的 OpenClaw 记忆槽插件,已发布到 ClawHub。
许可证
此 MCP 服务采用 MIT 许可证——可在任何项目中自由使用。
注意:此软件包依赖 yantrikdb(认知记忆引擎),该引擎自 2026-08-18 起采用 Apache-2.0 许可证(此前为 AGPL-3.0)。现在,此服务和引擎均采用宽松许可证——你的代码、修改或托管服务均不受 copyleft 义务约束。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。