你有没有遇到过这种情况:上午让大模型读过一份合同,下午再问"乙方违约要赔多少",它却像从没见过那份文件。这不是模型笨,而是它生来没有持久记忆——每次请求都是独立的,上下文窗口一关,前面发生的事全归零。Cognee 的出发点很朴素:给模型外挂一层能跨会话保留、并且能表达"谁和谁有关系"的记忆。
这一节站在全册体系的最前端。它要解决的不是"模型怎么推理",而是更底层的问题——推理所需的素材,怎么在组织好的结构里随时可取。理解了这一点,后面第五章的部署、第六章的集成才有锚点。
Cognee 不把自己定位成"又一个向量库"。它的愿景是构建一套会生长的记忆:新信息进来时,不是简单追加,而是和既有知识做去重、冲突检测、版本串联。类比到生物学,向量库像是把标本平铺在抽屉里,而 Cognee 更像一个会不断长出新突触的神经网——节点之间因关系而连接,连接又因新证据而加强或修正。

愿景落地成使命,就是一条工程链路:摄入原始文本 → 用 LLM 抽三元组 → 写入图数据库 → 在检索时让图参与排序。下面这段伪代码表达的就是这条链路的思想,Cognee 把每一步都封装成了可调用的函数。
# 思想示意:一条最简的记忆写入链路 import cognee # 1. 摄入:把一篇文档交给 Cognee 管理 cognee.add("季度营收说明.pdf") # 原文进入待处理队列 # 2. 建图:抽取实体关系并写入图数据库 await cognee.cognify() # 这一步产出知识图谱 # 3. 检索:让图参与回答 results = await cognee.search("哪款产品贡献了最多营收") print(results) # 'source': '季度营收说明.pdf#p3'}]
注意 cognify 这个名字——它借用了"认知化"的意思,强调建图不是机械解析,而是让文本变成模型可推理的知识。运行后你拿到的不是一坨相似片段,而是一条带出处的三元组,这点对审计和溯源很关键。
我们也可以用图查询直接验证图谱里"关系"是否真的建出来了,而不必等搜索。下面这段代码在 cognify 之后查看某个实体的邻居,确认记忆确实成形。
# 验证图谱是否建出关系(建图后直接查图) import cognee await cognee.add("李明创立了云图科技,总部在杭州。") await cognee.cognify() # 直接拉取实体的出边,确认关系已落图 edges = await cognee.get_edges("李明") for subj, pred, obj in edges: print(f"{subj} --{pred}--> {obj}") # 云图科技 --总部--> 杭州
能看到这两条边,就说明文本已经被 Cognee 记成了可遍历的关系,而不是躺在向量库里的一段文字。这也是"使命落地"最直接的证据。
我们主张用 Cognee,是因为它在这三件事上比裸向量库实在:
背景:某法务团队每月要处理上百份供应商合同,律师常要回答"如果供应商延迟交货,违约金怎么算"。传统做法是全文检索关键词"违约金",再人工翻。
操作:把全部合同 cognee.add 进系统,跑一次 cognify。图谱里会出现"供应商A —延迟交货→ 触发— 违约金条款B"这样的关系链。
结果:提问"供应商A延迟交货要赔多少",检索直接返回条款B的具体金额与合同页码,而不再返回二十个含"违约金"字样的无关段落。
解读:价值不在"更快",而在"更准且可解释"。律师能点开来源核对,避免模型幻觉编出金额。
变式:若合同后续修订,把新版本再 add 一次,图谱会保留两版关系并标注生效时间,律师可对比新旧条款差异。这正是"可演化"的体现。
团队引入 Cognee 时,常陷入"先追最新模型、先上最花哨的检索"的陷阱。但记忆层的核心价值是稳定与可溯,不是推理花样。类比到建筑:地基的承载力比外立面装饰重要得多——你把幕墙做得再漂亮,地基沉降了整栋楼都危险。先把"关系记得准、出处找得回"这套地基打牢,再谈上层优化。
我们建议用一张优先级表想清楚资源投放:
| 能力 | 早期价值 | 后期价值 | 建议时机 |
|---|---|---|---|
| 关系抽取准确 | 高 | 高 | 立刻做 |
| 出处可追溯 | 高 | 高 | 立刻做 |
| 多跳深度 | 中 | 高 | 跑通后加 |
| 混合检索调权 | 低 | 中 | 规模上来再做 |
这张表和本册第六章的成熟度判断一脉相承:先拿稳的,再碰远的。
# 用最小闭环验证"记忆层"是否真生效(先地基后炫技) import asyncio, cognee async def sanity(): await cognee.add("总部在北京的公司有:云图科技、星河数据。") await cognee.cognify() # 不问花哨的多跳,先验证最基础的关系可查 r = await cognee.search("哪些公司总部在北京") assert any("云图科技" in str(x) for x in r), "记忆层没生效" print("地基通过:关系已结构化且可检索")
⚠️ 别把"模型越强记忆越好"当真理。模型只决定抽取质量上限,图谱干不干净取决于去重与本体设计——这块不归模型管。
💡 判断记忆层成不成功,看"同一事实换种问法还能答出且出处一致",而不是看它能答多冷门的问题。
⚠️ 不要把 Cognee 当成"更聪明的搜索引擎"——它产出的是结构而非排名,排序仍要结合检索策略。
💡 如果你的需求只是"在单篇文档里找关键词",直接用全文检索就够了,上 Cognee 是杀鸡用牛刀。