每日一个开源项目(第155篇):Cognee - 给 AI Agent 跨会话的持久记忆
引言
“AI Agent 在每次新会话开始时都失忆了。昨天你们讨论的架构决策、上周定下的技术选型、三个月前踩的坑——在新会话里它什么都不知道。”
这是"每日一个开源项目"系列的第155篇文章。今天的主角是 Cognee——开源的 AI Agent 记忆平台,给 Agent 提供跨会话的持久记忆层。
用 Claude Code 做一个持续几周的项目,你会发现一个不断重复的成本:每次开新会话都要重新说明上下文——这个模块的设计决策是什么,上次为什么选了 A 方案放弃了 B,当前任务和整体目标的关系是什么。这些背景信息不只浪费 token,更糟的是 Agent 可能在不知情的情况下做出和之前决策矛盾的选择。
Cognee 的定位是记忆基础设施:Agent 在会话中产生的上下文被结构化存进知识图谱,下次会话可以查询和引用这些记忆,跨会话的连续性从"依赖用户手动说明"变成"从记忆库里自动检索"。
你将学到什么
- 为什么 Cognee 的记忆设计比普通 RAG 更进一步:认知科学的基础
- 四个核心操作:remember / recall / forget / improve
- 会话记忆 vs 永久图谱记忆的两层设计
- Auto-routing 搜索:如何自动选择最优检索策略
- 单 Postgres 实例覆盖整个记忆栈的架构选择
- BEAM 基准测试数据
- Claude Code 插件和 MCP 集成
前置知识
- 了解 AI Agent 的基本概念
- 了解向量数据库和知识图谱的基本概念
- Python 基础
项目背景
项目简介
Cognee 是一个开源的 AI Agent 记忆平台,把向量嵌入、图谱推理、本体生成三层能力整合成一套统一的记忆基础设施。
它的论文标题"Optimizing the Interface Between Knowledge Graphs and LLMs for Complex Reasoning"说明了设计方向:不是简单地存文档然后向量检索,而是在 LLM 和知识图谱之间建立更好的接口——让复杂推理成为可能。
作者/团队介绍
- 组织: Topoteretes UG(德国)
- 论文: arXiv:2505.24478(Markovic et al., 2025)
- 官网: cognee.ai
- License: Apache-2.0
项目数据
- ⭐ GitHub Stars: 27,400+
- 🍴 Forks: 2,600+
- 📦 Release: 125 个
- 🔁 SDK 月调用量: 500 万+
- 📄 License: Apache-2.0
核心设计:记忆不是 RAG
在讨论 API 之前,先把设计理念说清楚。
为什么不只是 RAG
普通 RAG 的逻辑:文档 → 向量化 → 存入向量数据库 → 查询时语义检索 → 返回相关文本块。
这个方案有两个根本局限:
-
关系不可见:向量相似度找到"语义相近"的文本,但找不到"逻辑相关"的实体。“Alice 是 Bob 的上级,Bob 负责认证模块”——如果我问"认证模块的决策者是谁",向量检索很难把两条不直接相关的信息串联起来。
-
时间维度缺失:所有文本块平等对待,没有"这个决策是两个月前做的,后来被推翻了"这样的时序语义。
Cognee 用知识图谱补充向量检索:实体和关系显式建模,多跳推理成为可能。
认知科学基础
Cognee 在设计上参考了认知科学对记忆的分类:
- 情节记忆(Episodic memory):具体事件的记忆,有时间戳(“上周三我们讨论了认证方案”)
- 语义记忆(Semantic memory):事实性知识(“JWT 是一种认证机制”)
- 工作记忆(Working memory):当前会话的活跃上下文
Cognee 的会话记忆对应工作记忆(快速读写,不持久),永久图谱对应情节记忆和语义记忆(持久,支持跨会话检索)。
四个核心操作
import cognee, asyncio
async def main():
# 1. 记住:把信息存进记忆
await cognee.remember("认证模块决定使用 JWT,理由是...")
# 2. 回忆:检索相关记忆
results = await cognee.recall("认证模块的技术决策是什么?")
for result in results:
print(result)
# 3. 遗忘:清除特定数据集的记忆
await cognee.forget(dataset="draft_decisions")
# 4. 改进:优化知识图谱结构
await cognee.improve()
asyncio.run(main())
cognee.remember(source)
支持多种输入格式:
# 文本字符串
await cognee.remember("Alice 是 Bob 的技术主管,负责后端架构决策")
# 文档文件
await cognee.remember("path/to/architecture_decision.md")
# URL(网页内容)
await cognee.remember("https://docs.company.com/decisions/auth-module")
# 结构化数据
await cognee.remember({"decision": "JWT", "date": "2026-06-01", "owner": "Alice"})
remember 触发 ECL 流程:
- 提取(Extract):从原始内容里识别实体(人物、概念、技术、时间等)
- 认知化(Cognify):建立实体之间的关系,生成本体结构
- 加载(Load):写入图数据库和向量索引
cognee.recall(query)
Auto-routing 检索:不需要指定用哪种检索策略,Cognee 分析查询类型后自动选择:
# 事实性问题 → 图谱精确查询
results = await cognee.recall("认证模块的负责人是谁?")
# → 直接查图谱中的 (认证模块) -[负责人]-> (?) 关系
# 语义搜索问题 → 向量相似度
results = await cognee.recall("和 OAuth 相关的讨论")
# → 向量检索 "OAuth" 相关文本块
# 复杂推理问题 → 混合检索
results = await cognee.recall("三个月前的架构决策对当前认证方案有什么影响?")
# → 图谱时序遍历 + 向量语义匹配 + 结果融合
cognee.forget(dataset) 和 cognee.improve()
forget 支持细粒度删除:只删除特定数据集的记忆,不影响其他信息。
improve 触发图谱优化:合并重复实体、更新过期关系、清理低置信度节点。
两层记忆架构
新会话开始
↓
工作记忆(会话记忆)
├── 快速读写(Redis 或 Postgres session cache)
├── 存储当前会话的上下文
└── 会话结束时异步同步到永久图谱
永久图谱记忆
├── 知识图谱(实体 + 关系)
├── 向量索引(语义相似度)
└── 跨会话持久,可被所有 Agent 查询
这个设计的实际意义:
- 会话内的高频读写不走图数据库(避免延迟)
- 会话结束后,本次会话的重要信息会沉淀进永久图谱
- 下次会话启动时,
recall能找到之前所有会话的相关记忆
存储后端
Cognee 最吸引人的部署选项是单 Postgres 实例覆盖整个记忆栈:
传统 Agent 记忆需要的组件:
Neo4j(图数据库)
+ Pinecone/Qdrant(向量数据库)
+ Redis(会话缓存)
+ PostgreSQL(业务数据)
= 4 个独立服务需要维护
Cognee on Postgres:
PostgreSQL + pgvector + Apache AGE(图扩展)
= 1 个服务搞定
完整支持的后端:
| 角色 | 选项 |
|---|---|
| 图数据库 | Postgres(默认)、Neo4j、Neptune、Kuzudb |
| 向量数据库 | pgvector、LanceDB、Qdrant、ChromaDB、Weaviate、Milvus |
| 关系数据库 | Postgres、SQLite(本地开发) |
| 会话缓存 | Postgres、Redis |
安装和快速开始
# 基础安装
uv pip install cognee
# 包含 Postgres 后端(生产推荐)
pip install "cognee[postgres]"
本地开发(SQLite):
import cognee, asyncio, os
os.environ["LLM_API_KEY"] = "your_openai_key"
async def main():
await cognee.remember("Alice 负责认证模块,决定采用 JWT 方案,考虑了 OAuth 但因实施复杂度放弃")
await cognee.remember("Bob 负责数据库层,使用 PostgreSQL,正在评估是否需要迁移到分库分表")
results = await cognee.recall("认证相关的技术决策")
for r in results:
print(r)
asyncio.run(main())
Postgres 生产配置:
import cognee
cognee.config.set_databases(
db_url="postgresql://user:pass@localhost:5432/cognee",
vector_db="pgvector",
graph_db="postgres",
)
Claude Code 集成
Cognee 有两种 Claude Code 集成方式:
MCP 服务器
# Docker 启动 MCP 服务器
docker run -p 8765:8765 cognee/cognee-mcp
# 配置到 Claude Code
# ~/.claude/mcp.json
{
"mcpServers": {
"cognee": {
"command": "docker",
"args": ["run", "-p", "8765:8765", "cognee/cognee-mcp"],
"transport": "http",
"url": "http://localhost:8765"
}
}
}
可用的 MCP 工具:存储记忆、检索记忆、搜索图谱。
Claude Code 插件(会话生命周期钩子)
这是更深度的集成:
会话开始
→ 注入相关历史记忆到系统提示
会话进行中
→ 追踪工具调用(bash、read、write 等)
→ 追踪 Agent 的推理过程
会话结束
→ 把本次会话的关键信息同步到永久图谱
→ 提取决策、约束、学到的事实
基准测试
BEAM(Boundary Evaluation of Agents and Models)是专门评测长上下文记忆能力的基准:
| 上下文规模 | Cognee | 此前最优 | RAG 基线 |
|---|---|---|---|
| 100K tokens | 0.79 | 0.735 | ~0.33 |
| 10M tokens | 0.67 | 0.641 | ~0.33 |
两个关键数据点:
- 图谱 + 向量混合方法在长上下文下显著超越纯 RAG 基线(0.79 vs 0.33)
- 在 10M tokens 的极端长上下文下性能仍然保持(0.67),而 RAG 基线基本无法有效工作
多语言 SDK
| 语言 | 包名 | 用途 |
|---|---|---|
| Python | cognee |
主要 SDK |
| Rust | cognee-rs |
高性能嵌入式场景 |
| TypeScript | @cognee/cognee-ts |
Node.js / 前端集成 |
| CLI | cognee-cli |
命令行操作 + 本地 Web UI |
项目地址与资源
- 🌟 GitHub: topoteretes/cognee
- 🌐 官网: cognee.ai
- 📄 论文: arXiv:2505.24478
- 🐳 MCP Docker:
cognee/cognee-mcp
总结
Cognee 的核心贡献是把记忆问题从"每次会话重新喂上下文"转向"从持久图谱里检索相关记忆"。
技术路线上,知识图谱 + 向量检索的组合在 BEAM 基准上的表现说明了这个选择的价值:纯 RAG 在长上下文场景里基本失效,而图谱的关系建模让多跳推理成为可能。Auto-routing 检索隐藏了底层复杂性,用户不需要手动选择检索策略。
单 Postgres 实例覆盖整个记忆栈的部署选项降低了生产落地的门槛——不需要同时维护 Neo4j、Redis、向量数据库等多个基础设施。
27.4k Stars,5M+/月 SDK 调用量,在 Bayer 等企业有生产部署,说明这不只是实验项目。对于正在构建需要跨会话记忆的 AI Agent 系统的团队,Cognee 是目前最完整的开源选项之一。
探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。
欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。
更多推荐


所有评论(0)