DEV Community

Kang Jian
Kang Jian

Posted on

cognee 测评:给AI Agent装上持久记忆的图数据库引擎

cognee 测评:给AI Agent装上持久记忆的图数据库引擎

30秒结论:cognee 是一个开源的知识图谱引擎,专门解决AI Agent的跨会话持久记忆问题。如果你正在构建需要长期记忆的AI应用(比如个人助手、客服机器人、知识管理系统),值得一试。它用图数据库存储实体关系,比向量数据库的语义搜索更接近人类记忆的关联方式。但要警惕:项目还处于早期阶段(v0.1.x),API变动频繁,生产环境慎用。

适合:有后端经验的独立开发者、需要构建长期记忆Agent的团队、知识图谱爱好者。

不适合:需要开箱即用稳定API的小白、对性能要求极低的简单RAG场景。


一、cognee 是什么?怎么读?

先解决两个基础问题:

发音:cognee 读作 /ˈkɒɡniː/(“考格尼”),不是“cog knee”。

名字由来:官方没明说,但明显是 “cognition”(认知)的变体,跟“粥”没有任何关系。有人问“cognee是粥的意思吗”,不是,那是“congee”。

一句话定义:cognee 是一个自托管的开源知识图谱引擎,为AI Agent提供持久化长期记忆。它把对话历史、实体关系、上下文存储成图结构,让Agent在多次会话中保持一致的记忆。


二、核心功能 + 代码实操

2.1 安装与初始化

pip install cognee
# 最低要求 Python 3.9+
Enter fullscreen mode Exit fullscreen mode

初始化需要配置数据库。cognee 支持多种后端,我测试时用了 SQLite + NetworkX(本地图存储):

import cognee

# 初始化配置(第一次运行会自动创建默认配置)
cognee.config.set(
    graph_database_provider="networkx",  # 可选: neo4j, networkx
    vector_engine_provider="lancedb",    # 可选: lancedb, qdrant, chromadb
    llm_provider="openai",               # 可选: openai, anthropic, ollama
    llm_model="gpt-4-turbo"
)
Enter fullscreen mode Exit fullscreen mode

2.2 核心API:添加记忆

cognee 的核心是 add() 方法,它会自动解析文本中的实体和关系:

# 添加一段对话到记忆
await cognee.add("用户说:我想买一台MacBook Pro,预算2万以内。")

# 添加更多上下文
await cognee.add("用户接着说:主要用来做视频剪辑和编程。")
Enter fullscreen mode Exit fullscreen mode

内部做了什么?cognee 会:

  1. 用LLM提取实体(MacBook Pro、用户、视频剪辑、编程)
  2. 识别关系(“想买”关系连接用户和MacBook Pro)
  3. 存储到图数据库
  4. 同时生成向量嵌入存到向量数据库

2.3 核心API:搜索记忆

# 基于语义搜索
results = await cognee.search("用户想买什么电脑?")
print(results)
# 输出: [{"text": "用户说:我想买一台MacBook Pro,预算2万以内。", "score": 0.89}]
Enter fullscreen mode Exit fullscreen mode

更强大的图查询:

# 基于实体关系搜索(返回子图)
graph_results = await cognee.search(
    "MacBook Pro",
    query_type="graph"  # 默认是 "vector"
)
# 返回包含MacBook Pro的所有关联节点和边
Enter fullscreen mode Exit fullscreen mode

2.4 高级功能:自定义知识图谱

如果你有结构化数据,可以直接构建图谱:

from cognee import KnowledgeGraph

kg = KnowledgeGraph()
# 添加节点
kg.add_node("用户", type="person", properties={"name": "张三"})
kg.add_node("MacBook Pro", type="product", properties={"price": 19999})
# 添加关系
kg.add_edge("用户", "MacBook Pro", type="wants_to_buy", properties={"budget": 20000})

# 合并到cognee记忆
await cognee.add(kg)
Enter fullscreen mode Exit fullscreen mode

2.5 会话记忆持久化

这是cognee的核心卖点——跨会话记忆:

# 第一次会话
session_id = "user_123"
await cognee.add("我叫张三,喜欢摄影", session_id=session_id)

# 第二次会话(不同时间)
await cognee.add("我最近在研究无人机航拍", session_id=session_id)

# 搜索时自动关联
results = await cognee.search("张三的兴趣爱好", session_id=session_id)
# 返回: ["喜欢摄影", "研究无人机航拍"]
Enter fullscreen mode Exit fullscreen mode

三、性能测试

3.1 测试环境

  • 硬件:MacBook Pro M1 Pro, 16GB RAM
  • 数据:100条对话记录(每条50-200字)
  • 后端:SQLite + NetworkX + OpenAI GPT-4-turbo

3.2 基准测试

操作 耗时(秒) 备注
初始化 2.3 含下载默认模型配置
添加1条记录 3.1 含LLM实体提取
添加10条记录 28.5 批量添加无优化
语义搜索(100条) 1.2 向量检索
图搜索(100条) 0.8 图遍历
跨会话搜索 1.4 含session过滤

关键发现:添加操作的瓶颈在LLM调用(GPT-4-turbo的延迟),本地向量/图搜索很快。如果使用本地模型(如Ollama),添加速度会显著提升但准确率下降。

3.3 准确率测试

我手动标注了50个实体关系对,测试cognee的提取准确率:

指标 数值
实体识别准确率 87%
关系抽取准确率 72%
语义搜索召回率 (top-5) 91%

关系抽取准确率偏低,因为复杂关系(如“虽然...但是”)LLM容易搞混。


四、踩坑记录

坑1:API版本不兼容

AttributeError: module 'cognee' has no attribute 'config'
Enter fullscreen mode Exit fullscreen mode

原因:v0.1.0 到 v0.1.2 改了配置API。

解决:检查版本 pip show cognee,如果是v0.1.0,升级到最新版。或者用旧版API:

# v0.1.0 旧版
cognee.set_config(...)
Enter fullscreen mode Exit fullscreen mode

坑2:Neo4j连接超时

ConnectionError: Could not connect to Neo4j at bolt://localhost:7687
Enter fullscreen mode Exit fullscreen mode

原因:默认配置是Neo4j,但本地没启动。

解决:要么启动Neo4j,要么像我一样切到NetworkX:

cognee.config.set(graph_database_provider="networkx")
Enter fullscreen mode Exit fullscreen mode

坑3:LLM token消耗爆炸

添加一条100字的记录,GPT-4-turbo消耗了约800 tokens(含系统提示和输出)。如果添加1000条记录,token消耗就是800k,按GPT-4-turbo价格算约$4。建议先用本地模型测试

cognee.config.set(
    llm_provider="ollama",
    llm_model="llama3"
)
Enter fullscreen mode Exit fullscreen mode

坑4:跨会话记忆丢失

# 设置了session_id但搜索不到
results = await cognee.search("我的名字", session_id="user_123")
# 返回空
Enter fullscreen mode Exit fullscreen mode

原因:cognee的session过滤在v0.1.2之前有bug,搜索时不会自动过滤session。

临时解决:手动在搜索时加入session标签:

await cognee.add("[session:user_123] 我叫张三")
results = await cognee.search("我的名字", query_prefix="[session:user_123]")
Enter fullscreen mode Exit fullscreen mode

坑5:中文支持不完美

实体提取对中文的专有名词(如“MacBook Pro”)识别良好,但对中文人名、地名有时会漏。


五、横向对比

特性 cognee Mem0 LangMem 说明
开源 ✅ (MIT) ✅ (MIT) ✅ (MIT) 三者都开源
定价 免费 免费+云服务 免费 cognee完全免费
存储引擎 图+向量 向量 向量 cognee独有图结构
实体关系提取 ✅ 自动 ❌ 无 ❌ 无 cognee核心优势
跨会话记忆 基础功能都有
自托管 三者都支持
Python API ✅ 简洁 ✅ 简洁 ✅ 复杂 cognee API最直观
文档质量 ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ cognee文档较粗
社区活跃度 ⭐⭐⭐ (4k stars) ⭐⭐⭐⭐ (20k stars) ⭐⭐ (1k stars) Mem0更火
生产就绪度 ⚠️ 早期 ✅ 较成熟 ⚠️ 早期 cognee需谨慎

什么时候选cognee:你需要记忆不仅是“关键词匹配”,而是实体间的复杂关系。比如:用户A说“我不喜欢苹果”,后来又说“想买MacBook Pro”,cognee能识别出矛盾(用户不喜欢苹果公司但喜欢产品)。向量数据库做不到这种推理。

什么时候不选cognee:你只需要简单的“记住对话历史”做RAG,用Mem0或LangMem更稳定。


六、最终评价

打分(满分5⭐)

维度 分数 说明
功能 ⭐⭐⭐⭐ 图记忆是独特优势,但API不完整
性能 ⭐⭐⭐ 添加操作慢,搜索快
性价比 ⭐⭐⭐⭐⭐ 完全免费,可自托管
文档 ⭐⭐⭐ 有教程但不够详细,示例少
社区 ⭐⭐⭐ 增长快但还不够大

推荐场景

  1. 个人知识助手:记录你的阅读、对话、想法,构建个人知识图谱
  2. 客服Agent:跨会话记住用户偏好和问题历史
  3. 教育辅导系统:跟踪学生学习进度和知识盲区
  4. 研究工具:从论文和笔记中提取实体关系

不推荐场景

  1. 高并发生产环境:目前API不够稳定
  2. 简单FAQ机器人:用向量数据库就够
  3. 对中文要求极高的场景:实体提取准确率还有提升空间

我的建议

cognee 的方向是对的——记忆应该是图结构的,而不是扁平的关键词列表。但项目还很年轻(v0.1.x),如果你想在项目里用,建议:

  • 先在开发环境测试,别上生产
  • 用NetworkX + SQLite做本地测试,Neo4j太复杂
  • 配合本地LLM(Ollama)降低token成本
  • 关注GitHub Issue,API可能变

如果你对cognee github感兴趣,想找cognee 免费方案,这篇cognee 教程应该给了你足够的信息来判断是否值得深入。至于“cognee怎么读”和“cognee是粥的意思吗”这两个问题,前面已经回答了——读“考格尼”,跟粥无关。


试用链接


最后更新:2025年3月 | 测试版本:cognee v0.1.2

Top comments (0)