Skip to main content
Glama
thomaskawas

agent-context-substrate

by thomaskawas

agent-context-substrate

基座是资产;模型是可替换的客户端。

git clone https://github.com/thomaskawas/agent-context-substrate.git
cd agent-context-substrate
make setup && make demo

要求:Python 3.12+、Docker、make。make setup 会创建 venv 并安装依赖,约 1.4 GB,因为演示在 CPU 上运行并跳过 CUDA wheels;网络较慢时请留出几分钟。数据库绑定 127.0.0.1:5432,因此请先停止占用该端口的任何程序。

一条查询贯穿四个检索阶段,然后是消融表和基线门禁

为什么存在

我用 AI 智能体构建长期项目,而每次会话开始时重新建立上下文是我付出最频繁的代价。上传同样的文件,重新解释同样的决策,看着窗口中有用的部分被模型已经看过两遍的材料填满。更好的模型发布了,但其中没有任何东西能迁移过去。问题从来不是上下文缺失。问题是上下文不可寻址:无法提出一个问题并只取回回答它的内容,所以你只能发送一切并寄希望于运气。解决办法是停止把上下文当作你带进会话的东西,开始把它当作你查询的东西。

一个模型无关的记忆基座(memory substrate)的参考实现,用于 AI 智能体:项目记忆存在于模型之外,存储在一个可查询、带版本管理的存储中,通过一个 MCP 网关暴露。换模型;保留一切。今天用 Claude,明天用 Gemini 或 GPT,底层是同一个项目记忆。不再把历史粘贴回每个会话,而是由检索选择当前任务实际需要的少量记录。

这个仓库是该模式的洁净室参考实现,针对合成语料从零编写,因此本页上的每个数字都能从干净的克隆加上固定依赖复现。它是模式本身,不是我在自己工作中运行的系统。

无需 API 密钥:make demo 完全在本地组件上运行。固定的本地模型(名称和修订版本)是默认适配器配置 localmake warmup,由 make demo 自动运行,预下载约 180 MB 一次);无下载的封闭式 deterministic 配置支撑测试和常开的 CI 门禁。

Related MCP server: AI Memory MCP Server

布局

src/acs/adapters/base.py 是代码中的核心论点:每个外部能力都位于其后的四个小接口。src/acs/store/ 将记忆视为记录系统(带版本、可审计、真正可删除)。src/acs/retrieval/ 是作为小型、可独立测试的阶段组成的流水线。eval/ 是门禁:变更只有匹配或超越 baseline.lock.json 才能发布,否则不能发布。

设计理由见 docs/adr/:九条决策记录。大多数只有半页;三条较长,因为论证需要更多篇幅。

docs/ 中还有:architecture.md 说明每一层为何存在,threat-model.md 说明对抗边界及每道防线所在,principles.md 说明其余部分遵循的规则,以及 build-your-own.md 说明本仓库遵循的构建顺序。

它展示了什么

  • 摄取 一次写入两种表示:用于相似度的嵌入,以及用于结构的实体/关系图。每份文档都被嵌入;未陈述任何关系的文档不贡献边。

  • 检索 是四阶段流水线:带可调混合权重的混合向量 + 全文搜索、多查询融合(RRF)、交叉编码器重排,以及实体锚定分区——图对重排后的列表重新排序,使主题重排器不再把一个组件与其名称相似的兄弟混淆。每个消费者的检索配置是数据,不是代码。

  • 治理:检索变更通过匹配或超越锁定的评估基线才能发布。记忆采用 SCD2 版本管理,支持时间旅行读取;清除是真正的删除(包括向量);审计日志在数据库层面拒绝修改。

  • 访问:一个 MCP 网关将基座提供给任何 MCP 客户端,并按调用方限定范围。一个隔离的研究循环以强制引用回写的方式填补空白。

  • 可移植性:每个提供者都位于适配器之后;嵌入器是有意固定的。

你想看什么

运行

一条查询贯穿每个检索阶段

make query Q="..."

消融基准(recall@5、每阶段 MRR)

make bench

检索变更在 CI 中针对锁定基线失败

make check

记忆身份,以及一条记忆的完整版本链

make history

记忆被取代,旧版本仍可读取

make supersede LINEAGE=<id> CONTENT="..."

该记忆在过去某个时间点的状态

make asof LINEAGE=<id> TS=<timestamp>

某个主体被清除,包括嵌入

make purge SUBJECT=contributor-03

来自图的取代链 + 实体邻居

make graph ENTITY=CHG-4568

一个基座上的两个限定调用方,一次调用被拒绝

make gateway-client

研究循环填补空白,带引用且被隔离

make research 然后 make vet

谱系 ID 和时间戳都来自 make history:不带参数时列出当前记忆及其 ID;带 LINEAGE=<id> 时遍历一条记忆的版本链并打印每个版本的有效期窗口。这些窗口是 ISO 时间戳,因此你粘贴回去的 TS= 会解析到你实际读取的版本,而不是它前后一秒的版本。ID 按克隆生成,因此你的 ID 不会与本页显示的匹配。

make purge 是真正的删除(包括属于被清除主体的黄金集目标),因此针对已清除语料的基准会以 incomplete 拒绝运行,而不是悄悄报告更低的召回率。make demo 重置为干净语料。

本页上的每个基准数字都来自对种子合成语料corpus/generate.py)的消融,可从干净克隆复现,并在 CI 中(每次推送使用 deterministic 配置,bench-local 标签使用 local 配置)针对同时锁定语料摘要的锁定基线进行门禁。 读增量,不要读绝对值:合成语料上的 recall@5 / mrr@5 展示每个阶段贡献了什么,绝不代表真实世界质量。要看某个阶段在哪里赢得其增量,运行 .venv/bin/python eval/run_benchmark.py --by-family

消融,local 配置

阶段

recall@5

mrr@5

该阶段赢得什么

仅向量

0.6333

0.4340

底线:仅靠相似度

+混合

0.9667

0.5742

召回率。词法通道找回嵌入遗漏的内容

+融合

0.9750

0.6026

排序,几乎不增加召回率(recall +0.0083)

+重排

0.9917

0.9072

排序。在召回率几乎不动的情况下 mrr +0.3046

+图

0.9917

0.9315

身份。实体分区,而非更多检索

每个阶段赢得的是不同的东西,这正是支持流水线而非单个更好检索器的论据。tests/test_readme_table.py 会在本表与 eval/baseline.lock.json 不一致时失败,因此本表不可能偏离门禁所强制执行的数字。门禁是下限,因此改进指标的变化会通过,本页数字保持不变,直到基线被有意地用 make lock-baseline 重新锁定——这会使本表失败,直到它被更新以匹配。local 配置,120 条黄金查询,k=5,阶段 1 合并 rank,语料摘要 ad7bf7ca。用 make demo 复现。

这些数字支持和不支持什么,包括为什么模型通道比较是界限而非曲线,在 docs/limitations.md 中有详细说明。

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides persistent, searchable memory for MCP-compatible agents, enabling recall by meaning, automatic decay, trust scoring, and cross-agent handoffs.
    4
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Durable, inspectable memory for MCP agents. Preserves decisions, preferences, and project knowledge across sessions with full provenance and version history.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides persistent, scoped shared memory for collaborating AI agents, with tools for storing observations, semantic recall, and handoff workflows. Backed by PostgreSQL and exposed through MCP.
    1
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

  • An MCP memory server. One memory your agents share — across models, devices and apps.

View all MCP Connectors

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/thomaskawas/agent-context-substrate'

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