temporal-knowledge
Kenning Continuity
积累而非退化的企业知识。
一个 MCP 服务器,让 LLM 代理跨会话积累组织知识,按领域限定,以 Neo4j 为后端。每个结构不变量都由工具强制执行,而不是在指令中要求,并且不暴露任何原始 Cypher 写入——因此无论模型决定做什么,图都不会自我损坏。
它已在企业规模上投入生产:37 个领域、376 个会话,以及四个月日常使用中积累的 3,000+ 知识实体。
为什么它不会随着填充而退化
大多数累积式记忆系统以两种方式之一失败。它们从第一天起就开始虚构,因为没有任何东西区分被观察到的事物与模型为了帮忙而推断出的事物。或者它们通过了演示,然后在体量下退化,因为每次写入都是不受约束的追加,存储中慢慢充满近似重复、静默覆盖,以及无人能追溯到作者的声明。
四项承诺,全部在结构上强制执行:
没有任何内容被覆盖。 没有 update_knowledge,也没有 retype_knowledge。改变对某个实体的已知信息会创建一个新节点,通过 EVOLVED_FROM 链接到其前身。先前的理解仍然存在、仍然可读、仍然可追溯。早先出错是记录的一个事实,而不是要从记录中抹去的东西。
每项声明都在两跳内到达其作者。 知识实体由 Session 发现;Session 由 Person 指导。两条边都由拒绝在没有真实指导者的情况下运行的工具写入。因此"谁说的、何时说的、出于什么目的"总是可以回答的——不是靠约定,而是因为没有代码路径可以在缺少这些信息的情况下创建知识。
身份从不从字符串推断。 分布在十一个领域中的十七个名为"Alice Example"的节点是十七个指称行为,正确地彼此区分。断言其中两个是同一个人,是某人在会话中做出的声明,记录为可以携带 distinct 值的 REFERENT_CLAIM——因为一个无处记录否这个答案的系统会永远重复问同一个问题。字符串匹配身份是大多数知识图谱悄悄开始撒谎的地方。
结构承载事实;属性不重复它们。 知识实体不持有 domain 属性。它由发现它的会话放入一个领域,并从那里通过遍历到达。此前的属性已经漂移,这正是反规范化会做的事:21 个实体携带了一个 domain 字符串,指向一个真实领域,但与该领域之间根本没有路径。作为文本放在结构旁边、而非由结构承载的事实,最终会与结构产生分歧。
没有 confidence 字段,这是故意的。某人在某个场合的信心是关于其经验的事实,不会传递;后来的读者根据描述对照自己所知来得出自己的信心。信心分数所追求的东西,改由任何读者都能裁决的边来承载:VALIDATION、INVALIDATING,以及没有配对 Solution 的 Challenge。
如果你自己在大规模运行累积式记忆系统时撞上过这些墙,我们想听听你的意见。
Related MCP server: attestor
架构
流程层(不可变)—— Person → Session,在 Domain → Session 之内。NEXT_SESSION 始终指向时间前方,由工具强制执行。该层的成员资格是持有可能的未来并衡量它们走向实现的能力;这里没有任何东西是指称对象。
知识层(仅追加)—— 11 种本体论类型和 7 个子标签,由 13 种连接类型连接,每个节点标记为 :Knowledge。描述变更会创建一个由 EVOLVED_FROM 链接的新链节点。
参见 HOWTO.xml 获取面向操作者的教学,作为给 LLM 的不变量脚手架;参见 docs/design/ 了解每项承诺背后的推理。
先决条件
Python 3.10+
Neo4j 5.x 实例(本地或远程)
uv(用于开发;安装时不需要)
快速开始
pip install kenning-continuity
kenning-continuity --db-url bolt://localhost:7687或者从源码:
uv sync
uv run kenning-continuity --db-url bolt://localhost:7687配置
CLI 标志优先于环境变量,环境变量优先于默认值。
CLI 标志 | 环境变量 | 默认值 | 描述 |
|
|
| Neo4j 连接 URL |
|
|
| Neo4j 用户名 |
|
|
| Neo4j 密码 |
|
|
| Neo4j 数据库名称 |
|
|
|
|
|
| (无) | 工具名称前缀(例如 |
|
|
| 读取查询超时,秒 |
|
|
| HTTP 主机(非 stdio 传输) |
|
|
| HTTP 端口(非 stdio 传输) |
|
|
| HTTP 路径(非 stdio 传输) |
|
| (无) | 逗号分隔的 CORS 来源 |
|
| (无) | 逗号分隔的主机,DNS 重绑定保护 |
MCP 客户端配置
Claude Desktop / Claude Code
{
"mcpServers": {
"temporal-knowledge": {
"command": "kenning-continuity",
"args": ["--db-url", "bolt://localhost:7687"]
}
}
}HTTP 传输
kenning-continuity \
--db-url bolt://localhost:7687 \
--transport streamable-http \
--server-host 0.0.0.0 \
--server-port 8000 \
--allow-origins "http://localhost:3000" \
--allowed-hosts "localhost,127.0.0.1"工具面(23 个工具)
一个会话的运行流程:create_domain(一次)→ begin_session → 创建 / 演化 / 确认 / 连接知识 → end_session。
服务器是无状态的。begin_session 返回一个 session_id,客户端将其传递给每个后续知识工具。从未关闭的会话保持 active 状态——这是设计使然。
流程(4)
工具 | 描述 |
| 所有领域及其会话计数和最近活动 |
| 创建一个知识领域(幂等) |
| 开始一个会话;返回 |
| 以所学内容的摘要关闭会话 |
begin_session 返回按类型的计数,而不是领域状态。在一个生产领域上,内联返回状态是 600,820 个字符——在会话提出任何问题之前就花费了大约 150k 个 token。使用 types 和 limit 调用 get_domain_state 来获取你实际需要的部分。
知识变更(6)
工具 | 描述 |
| 创建实体。遇到冲突时拒绝,拒绝流程类型,并拒绝未知字段而不是丢弃它们 |
| 改变描述的唯一方式。创建一个保留先前节点的新链节点,通过 |
| 记录实体已被审查且未发生变化 |
| 将 |
| 链接实体。接受 |
| 声明两个指称对象是同一个事物,需要 |
查询(5)
工具 | 描述 |
| 跨名称和描述的全文本搜索,仅限链头 |
| 领域的当前实体;可选 |
| 谁在何时、出于什么目的做了什么 |
| 向后遍历 |
| 只读 Cypher 逃生舱;写入被拒绝 |
分类(2)
工具 | 描述 |
| 11 种本体论类型和 7 个子标签,以及格结构 |
| 13 种知识边类型和 5 种流程边类型 |
图分析(6)
工具 | 描述 |
| 创建 GDS 图投影 |
| 删除投影 |
| PageRank 中心性 |
| 介数中心性——桥接节点 |
| Louvain 社区检测 |
| 弱连通分量 |
类型系统
每个知识节点都携带 :Knowledge、恰好一个本体论标签、一个确定性命名该标签的 ont_type 属性,以及通过 Neo4j 多标签实现的零个或多个子标签。
本体类型 | 它是什么 |
| 行动者;具有能动性 |
| 无能动性的排列;持续存在的形态 |
| 产生后持续存在且可被引用的产物 |
| 地点、园区、区域或范围——始终是被指称者,绝非指称者 |
| 在时间上定位的事件 |
| 领悟、发现、突破 |
| 跨实例识别出的重复结构 |
| 当前时态的障碍 |
| 行之有效的解决方案;与 |
| 从经验中推导出的规则 |
| 某事物背后的原因 |
子标签是格结构,而非扁平映射
PersonReferent → Actor System → Structure
Organization → Actor Process → Structure
Team → Organization → Actor Configuration → Structure
Service → Structurecreate_knowledge 接受本体类型(Actor)或子标签(Team),并应用整条链::Knowledge:Actor:Organization:Team。因此,对组织的查询也能找到团队。扁平映射会发出 :Actor:Team,静默丢弃中间层级,且无人会察觉。
连接类型(13 种)
EVOLVED_FROM、ENABLING、REQUIRING、INFORMING、CAUSING、COMPOSING、EXTENDING、RECOGNITION、VALIDATION、INVALIDATING、ASSOCIATED_WITH、SITUATED_AT、REFERENT_CLAIM。
过程边——HAS_SESSION、NEXT_SESSION、DIRECTED、DISCOVERED、CONFIRMED——仅由过程工具写入,无法通过 create_connections 创建。
描述应说明什么
描述说明实体是什么,而非它身上或周围发生了什么。时间性观察属于通过边到达的 Event 节点。
正确,针对
Actor:PersonReferent:"lululemon 创始人。最大个人股东(8.4%)。依据 Schedule 13D 申报——并非被动持有。"错误:"SCHEDULE 13D/A 第 10 号修正案于 2025 年 10 月 8 日提交。WILSON 公开表态……"
申报文件是一个 Event。Wilson 是创始人。申报文件揭示了他的某些信息,这是一条 INFORMING 边。他的描述应能经受未来任意数量的申报文件而不变,除非他的身份本身发生变化。
开发
uv sync --group dev
./.venv/bin/pytest tests/unit # mocked substrate, no database
./.venv/bin/pytest tests/integration # real Neo4j via testcontainers; needs Docker
./.venv/bin/pyright存在于 Cypher 查询中的缺陷对单元测试不可见——它们模拟底层,一个边构造缺陷曾以完全相同的方式通过了所有测试,修复前后皆如此。任何涉及查询的内容都应放在 tests/integration/ 中。
许可与署名
依据 Apache License, Version 2.0 授权。可自由使用、修改、在生产环境中运行,无论商业用途与否。
这里的工作是本体——类型格结构、通过遍历解析、认识论地位置于边中、每个不变量都存在于工具中的原则。这些被无偿赠予,Apache-2.0 仅要求署名随其传播:保留 LICENSE 和 NOTICE,并标注你修改的内容。
Kenning AI 名称不属于该授权范围(Apache-2.0 §6)。参见 TRADEMARKS.md 了解无需询问即可做的事——这几乎涵盖所有事项,包括说明你的软件构建于什么之上。
联系方式
contact@kenningai.com——无表单、无漏斗,直接触达我们。
我们特别希望听到那些大规模运行过累积记忆系统并对其失败原因形成见解的人的意见。这种失败模式是本仓库中几乎所有决策的原因,来自亲身经历过的人的异议,比来自未曾经历之人的赞同对我们更有价值。
Kenning AI · kenningai.com
This server cannot be deployed
Maintenance
Related MCP Connectors
Company brain for AI agents — temporal knowledge graph search, exploration, and durable memory.
Shared memory for AI agents, as a graph in your own Postgres. Writes never call an LLM.
Persistent knowledge graph for AI agents. Remember, recall, and forget facts.
Shared long-term memory for AI agents: save and recall context as a searchable knowledge graph.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI agents to store, retrieve, and connect information in a Neo4j graph database as persistent memory, with semantic relationships, natural language search, and temporal tracking across conversations.9179 npm67MIT
- AlicenseNot gradedqualityCmaintenanceAudit-grade memory backbone for agent teams. Bi-temporal facts (event time + transaction time, with recall(as_of=...) replay), 6-step deterministic retrieval (no LLM in the critical path), conversation ingest with speaker-locked dual-pass extraction, per-tenant Postgres row-level security, and Ed25519-signed provenance. Postgres + pgvector + Neo4j defaults.37 PyPI14MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent knowledge graph memory for AI agents, enabling them to store, recall, and query facts about people, projects, and relationships across sessions.MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that lets LLM agents accumulate organizational knowledge across sessions, scoped by domain, backed by Neo4j with enforced structural invariants.-