引言

“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 的逻辑:文档 → 向量化 → 存入向量数据库 → 查询时语义检索 → 返回相关文本块。

这个方案有两个根本局限:

  1. 关系不可见:向量相似度找到"语义相近"的文本,但找不到"逻辑相关"的实体。“Alice 是 Bob 的上级,Bob 负责认证模块”——如果我问"认证模块的决策者是谁",向量检索很难把两条不直接相关的信息串联起来。

  2. 时间维度缺失:所有文本块平等对待,没有"这个决策是两个月前做的,后来被推翻了"这样的时序语义。

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

两个关键数据点:

  1. 图谱 + 向量混合方法在长上下文下显著超越纯 RAG 基线(0.79 vs 0.33)
  2. 在 10M tokens 的极端长上下文下性能仍然保持(0.67),而 RAG 基线基本无法有效工作

多语言 SDK

语言 包名 用途
Python cognee 主要 SDK
Rust cognee-rs 高性能嵌入式场景
TypeScript @cognee/cognee-ts Node.js / 前端集成
CLI cognee-cli 命令行操作 + 本地 Web UI

项目地址与资源


总结

Cognee 的核心贡献是把记忆问题从"每次会话重新喂上下文"转向"从持久图谱里检索相关记忆"。

技术路线上,知识图谱 + 向量检索的组合在 BEAM 基准上的表现说明了这个选择的价值:纯 RAG 在长上下文场景里基本失效,而图谱的关系建模让多跳推理成为可能。Auto-routing 检索隐藏了底层复杂性,用户不需要手动选择检索策略。

单 Postgres 实例覆盖整个记忆栈的部署选项降低了生产落地的门槛——不需要同时维护 Neo4j、Redis、向量数据库等多个基础设施。

27.4k Stars,5M+/月 SDK 调用量,在 Bayer 等企业有生产部署,说明这不只是实验项目。对于正在构建需要跨会话记忆的 AI Agent 系统的团队,Cognee 是目前最完整的开源选项之一。


探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐