Cognee 深度解析:AI Agent 记忆平台的架构、机制与取舍
Cognee 深度解析:AI Agent 记忆平台的架构、机制与取舍
用 AI 编程 Agent 超过一周的人都会碰到同一个瓶颈:Agent 不记得你上周让它改过什么。每次新会话都是一张白纸,你得重新解释项目结构、代码规范、上次做到哪了。更糟的是,即使同一个会话里,当上下文窗口被对话历史填满后,Agent 也会「忘记」最早讨论过的内容。
这就是 AI Agent 的记忆问题。而 Cognee(截至 2026 年 6 月,GitHub 24,626 Star、2,291 Fork、Apache-2.0 许可证)是目前最活跃的开源解决方案之一。它不是又一个向量数据库包装器——它用知识图谱做结构化推理,用向量做语义搜索,用本体论做概念对齐,用技能系统做工具编排,试图给 Agent 一个真正「记得住、想得起、能推理」的记忆层。
Cognee 究竟是什么
Cognee 的定位很清晰:开源 AI Agent 记忆平台。它的核心 API 只有四个动词:
await cognee.remember("Cognee turns documents into AI memory.")
results = await cognee.recall("What does Cognee do?")
await cognee.forget(dataset="main_dataset")
await cognee.improve() # 基于反馈优化知识图谱
但四个动词背后是一整套认知架构。Cognee 不是简单的「存文本→向量化→相似度搜索」流水线。它的设计哲学是:记忆不只是存储,更是理解、连接和推理。
| 层级 | 组件 | 职责 |
|---|---|---|
| 接入层 | Python SDK / CLI / MCP Server / REST API | 统一入口,支持本地和云端部署 |
| 摄入层 | Ingestion 模块 | 多格式数据摄入(文本、文档、代码、数据库) |
| 认知层 | Cognify 管线 | 分类→分块→摘要→实体提取→图谱构建 |
| 存储层 | 向量引擎 + 图引擎 + 关系数据库 | 混合存储:语义向量 + 结构化图谱 + 元数据 |
| 检索层 | 14 种 Retriever | 自适应路由:从简单向量搜索到 Agentic ReAct 循环 |
| 对齐层 | Truth Subspace | 基于质心的真值对齐,对检索结果加权排序 |
| 技能层 | Skill + Tool 系统 | 数据集级的过程性知识,Agentic Retriever 按需加载 |
| 会话层 | Session Memory | 快速缓存 + 后台同步到永久图谱 |
核心机制逐层拆解
1. 摄入与 Cognify:从原始数据到结构化知识
Cognee 的数据处理管线叫 Cognify,它不是一个固定的流水线,而是一个可配置的任务图(Task Pipeline)。每个任务是一个异步函数,通过 @task 装饰器注册,由 run_tasks 调度执行。
# Cognee 的任务定义方式
@task(batch_size=20)
async def classify_documents(chunks, classification_model=None):
# 用 LLM 对文档分块做分类
...
@task()
async def extract_graph(chunks, graph_model=None):
# 从文本中提取实体和关系,构建知识图谱
...
Cognify 的标准流程包括:
- 分类(Classification):用 LLM 判断每个文本块的类型(事实陈述、代码、对话、元数据等)
- 分块(Chunking):按语义边界切分文本,支持可配置的分块策略
- 摘要(Summarization):为每个块生成结构化摘要
- 实体提取(Entity Extraction):从文本中识别实体及其属性
- 图谱构建(Graph Construction):提取实体间的关系,构建三元组(主体-关系-客体)
- 嵌入(Embedding):将文本块和三元组向量化,存入向量引擎
关键设计决策:Cognee 的图谱构建不是纯 NLP 管线——它重度依赖 LLM 来做实体识别和关系提取。这意味着图谱的质量直接取决于底层 LLM 的能力,但也意味着它能处理非结构化文本中的隐含关系,这是传统 NER+RE 管线做不到的。
2. 知识图谱:CogneeGraph 的设计
Cognee 的图引擎叫 CogneeGraph,是一个自研的图抽象层,支持多种后端:
- NetworkX(默认,内存图)
- Neo4j(生产级图数据库)
- PostgreSQL + Apache AGE(PG 图扩展)
CogneeGraph 的核心元素:
# CogneeGraph 的核心数据结构
class Node:
id: UUID
type: str # 实体类型
attributes: dict # 属性键值对
embedding: list # 向量嵌入
class Edge:
source: Node
target: Node
relationship: str # 关系类型
attributes: dict
图谱的构建过程是增量式的:新数据摄入时,Cognee 会尝试将新实体与已有实体合并(通过 Dedup 注解标记的字段做去重),新关系与已有关系连接。这意味着图谱会随着数据增长而自我演化——这是 Cognee 区别于「每次重新构建索引」类方案的关键特征。
3. 检索层:14 种 Retriever 的自适应路由
Cognee 的检索层是整个系统最复杂的部分。它提供了 14 种 Retriever,覆盖从简单到复杂的各种检索策略:
| Retriever | 策略 | 适用场景 |
|---|---|---|
CompletionRetriever |
纯向量相似度搜索 | 简单语义匹配 |
SummariesRetriever |
摘要向量搜索 | 快速概览 |
ChunksRetriever |
文本块向量搜索 | 精确内容定位 |
BM25Retriever |
关键词稀疏检索 | 精确术语匹配 |
LexicalRetriever |
词汇级检索 | 代码/标识符搜索 |
HybridRetriever |
块+实体+全局上下文混合 | 通用多通道检索 |
GraphCompletionRetriever |
图谱三元组搜索+LLM 补全 | 关系推理 |
GraphCompletionDecompositionRetriever |
查询分解+子查询图谱搜索 | 复杂多跳问题 |
GraphCompletionCoTRetriever |
图谱+思维链推理 | 需要推理链的问题 |
CypherSearchRetriever |
自然语言→Cypher 查询 | 结构化图查询 |
NaturalLanguageRetriever |
NL→Cypher(带重试) | 图数据库自然语言接口 |
TemporalRetriever |
时间感知图谱搜索 | 时间敏感查询 |
CodingRulesRetriever |
编码规范检索 | 代码 Agent 场景 |
AgenticRetriever |
ReAct 循环+工具调用+技能 | 复杂自主检索 |
HybridRetriever 是通用场景的主力。它同时从三个通道检索:
| 通道 | 内容 | 检索方式 |
|---|---|---|
| Chunk 通道 | 原始文本块 | 向量相似度 |
| Entity 通道 | 知识图谱实体及其关联边 | 实体向量搜索 + 边排序 |
| Global Context 通道 | 全局上下文摘要索引 | 摘要向量搜索 |
三个通道的结果合并后,经过 Truth Subspace 对齐加权,再送入 LLM 生成最终回答。
GraphCompletionDecompositionRetriever 是处理复杂查询的关键。它先将用户问题分解为 2-5 个子问题:
用户问题: "Cognee 和 mem0 在架构上有什么本质区别?"
↓ 分解
子问题 1: "Cognee 的核心架构是什么?"
子问题 2: "mem0 的核心架构是什么?"
子问题 3: "两者在存储层和检索层的设计差异是什么?"
↓ 并行检索
每个子问题独立走 GraphCompletion 流程
↓ 合并
去重边 → 构建联合上下文 → LLM 生成
AgenticRetriever 是最强大的检索器。它实现了一个 ReAct 循环:LLM 在每一步决定是调用工具(搜索图谱、加载技能、执行代码)还是给出最终答案。技能(Skill)的过程体不预先加载到系统提示中——只有名称和描述在目录中可见,LLM 通过 load_skill 工具按需获取(渐进式披露)。
4. Truth Subspace:让检索结果「更真实」
Truth Subspace 是 Cognee 最独特的设计之一。它的核心思想是:在嵌入空间中定义一个「真值子空间」,用一组基向量(centroids)来表示「真实信息」的方向,然后将检索到的节点投影到这个子空间上,计算真值分数。
# Truth Subspace 的核心计算(简化)
def truth_score(node_vec, basis_vecs):
coords = [cosine(node_vec, basis) for basis in basis_vecs]
# 坐标越接近基向量,分数越高
return sigmoid(sum(coords) / len(coords))
这个机制的设计动机很明确:在知识图谱中,不是所有节点都同等可靠。有些信息是事实,有些是推测,有些是过时的。Truth Subspace 试图给检索结果一个「可信度」维度,让 LLM 在生成回答时能区分「确定知道的」和「不太确定的」。
但这里有一个重要的诚实问题:Truth Subspace 的基向量是如何确定的?从代码来看,centroids 是通过 load_centroids() 加载的,这意味着它们需要被预先计算和配置。如果基向量的选择有偏差,整个真值对齐就会系统性偏向某些类型的信息。这是一个强大但需要谨慎使用的机制。
5. 技能系统:Agent 的过程性记忆
Cognee 的技能系统(Skill)是另一个值得关注的设计。Skill 不是简单的提示词模板——它是一个完整的数据模型:
class Skill(DataPoint):
name: str # 唯一标识
description: str # 功能描述
procedure: str # 执行过程(Markdown)
declared_tools: list # 声明的工具列表
dataset_scope: list # 数据集作用域
is_active: bool # 是否激活
maintainer: str # 维护者
skill_version: str # 版本
tags: list # 标签
技能存储在知识图谱中,与数据集关联。Agentic Retriever 在运行时可以看到当前数据集范围内的所有技能目录,但技能的过程体(procedure)只在 LLM 调用 load_skill 工具时才加载——这是渐进式披露(progressive disclosure)模式,避免了上下文窗口被大量技能描述占满。
这个设计让 Cognee 不仅能存储「事实性知识」(知识图谱),还能存储「过程性知识」(技能),使 Agent 真正具备「知道怎么做」的能力。
与同类项目的对比
| 维度 | Cognee | mem0 | Zep | LangChain Memory |
|---|---|---|---|---|
| Star(截至 2026.06) | 24.6K | ~25K | ~3K | 内嵌模块 |
| 存储模型 | 知识图谱 + 向量 | 向量 + 图(有限) | 知识图谱 + 向量 | 向量为主 |
| 检索策略 | 14 种 Retriever 自适应 | 语义搜索 + 少量过滤 | GraphRAG | 基础向量搜索 |
| 图谱构建 | LLM 驱动的自动构建 | 有限图支持 | 自动构建 | 无 |
| 本体论 | RDF/XML + 可配置本体 | 无 | 无 | 无 |
| 技能系统 | 完整 Skill 模型 | 无 | 无 | 无 |
| Truth 对齐 | Truth Subspace | 无 | 无 | 无 |
| 会话记忆 | Session + 后台同步 | Session 级 | Session 级 | Session 级 |
| 部署模式 | 本地 / Docker / Cloud | 本地 / Cloud | 本地 / Cloud | 内嵌 |
| MCP 支持 | 原生 MCP Server | 无 | 无 | 无 |
| Claude Code 插件 | 官方插件 | 无 | 无 | 无 |
| 许可证 | Apache-2.0 | Apache-2.0 | Apache-2.0 | MIT |
Cognee 在架构深度上明显领先:14 种检索器、Truth Subspace、技能系统、本体论支持——这些是 mem0 和 Zep 目前不具备的。但 mem0 在易用性上更胜一筹:它的 API 更简洁,文档更友好,上手更快。
多维度评分
| 维度 | 评分 | 说明 |
|---|---|---|
| 架构设计 | 9/10 | 分层清晰,模块化好,扩展性强。Pipeline 任务系统设计优雅 |
| 检索能力 | 9/10 | 14 种 Retriever 覆盖几乎所有场景,自适应路由是亮点 |
| 图谱质量 | 7/10 | LLM 驱动的构建灵活但质量不稳定,缺乏确定性规则层 |
| 易用性 | 6/10 | API 简洁但配置复杂,文档有改进空间,334 个 Open Issue |
| 生产就绪 | 7/10 | Docker/MCP/Cloud 部署完善,但图数据库依赖和配置复杂度是门槛 |
| 社区生态 | 8/10 | 24K+ Star,活跃社区,Claude Code 插件,多语言客户端 |
| 创新性 | 8/10 | Truth Subspace、技能系统、渐进式披露是差异化创新 |
总评:8/10。Cognee 是目前开源 AI Agent 记忆领域架构最完整的方案。如果你的 Agent 需要的不只是「相似度搜索」,而是真正的结构化推理和跨会话知识积累,Cognee 是首选。但要做好投入一定工程时间做配置和调试的准备。
局限与风险
-
LLM 依赖过重:图谱构建、实体提取、查询分解都依赖 LLM。如果底层模型能力不足,整个系统的输出质量会连锁下降。论文(arXiv:2505.24478)也指出超参数优化对性能影响显著——默认配置不一定是最优的。
-
Truth Subspace 的黑箱性:基向量的来源和更新机制不透明。如果基向量不能反映真实的信息分布,真值对齐可能引入系统性偏差。
-
复杂度税:14 种 Retriever 意味着选择困难。虽然 Cognee 有自适应路由,但理解每种 Retriever 的适用场景仍然需要学习成本。
-
图谱演化的一致性:增量式图谱构建虽然优雅,但在大规模、高频更新场景下,实体合并和关系去重的准确性需要持续关注。
结论
Cognee 不是又一个「套壳向量数据库」——它是一套完整的认知架构。从摄入到 Cognify、从图谱构建到多策略检索、从 Truth Subspace 到技能系统,每一层都有明确的设计意图和工程取舍。
我们的建议:如果你的 AI Agent 项目需要跨会话的长期记忆,并且你愿意投入时间理解其架构,Cognee 是目前最好的开源选择。从 HybridRetriever 开始,逐步引入 GraphCompletionDecompositionRetriever 处理复杂查询,最后用 AgenticRetriever + 技能系统实现完全自主的记忆管理。
对于快速原型或简单场景,mem0 的轻量级方案可能更合适。但如果你在构建一个需要「真正理解上下文」的 Agent 系统,Cognee 的架构深度会在项目中期带来显著回报。
参考资料
- Cognee GitHub 仓库 — 24.6K Star,Apache-2.0
- Cognee 官方文档
- Cognee 研究论文:Optimizing the Interface Between Knowledge Graphs and LLMs for Complex Reasoning(Markovic et al., 2025)
- Cognee Claude Code 插件
- Cognee MCP Server
- Cognee Docker 镜像
- mem0 GitHub 仓库
- Zep GitHub 仓库