90 天涨了 23,000 颗星,Hacker News 热评第一说它是「raw context 和真正理解之间的缺失环节」。但大多数团队用它的方式,和当年误用 Redis 一模一样——只当 key-value 存储,完全忽略了图遍历能力。
这篇文章不写入门教程,直接告诉你:哪些用法官方文档没提、哪些坑生产环境踩了才知道、以及怎么把 OpenViking 和 cognee 组合成真正的 agent 记忆系统。
为什么传统 RAG 在 Agent 场景下彻底失效
RAG 的核心逻辑:找相关文本块,塞进 prompt。这对问答够用,对 Agent 来说是一场灾难——因为 Agent 需要的是上下文连续性,不只是事实,还包括决策的因果链。
OpenViking(volcengine/OpenViking)的思路完全不同:它把记忆存储为情景图(episodic graphs),而不是扁平的文本块。每个记忆节点都携带元数据:创建时间、触发它的 Agent 操作、LLM 赋予的置信度分、它连接的其他记忆节点。
# OpenViking 基础用法:设置上下文存储
from openviking import ContextStore
import os
# 初始化存储
store = ContextStore(
api_key=os.getenv("OPENVIN_KEY"),
project_id="my-agent-project"
)
# 存储一次 Agent 决策,包含完整上下文
store.put(
key="session_001_step_3",
value={
"action": "file_write",
"target": "/tmp/report.md",
"reasoning": "用户要求每日汇总,正在创建报告",
"confidence": 0.94,
"parent_key": "session_001_step_2" # 链接到上一个决策
}
)
# 查询时包含因果链——不只是结果,还有推理路径
context = store.get("session_001_step_3", include_chain=True)
print(f"链长度: {len(context['chain'])}") # 默认回溯3层
为什么大多数人用错了? 他们用 get() 时不传 include_chain=True,把 OpenViking 当成普通 KV 存储。图遍历才是真正的价值——你取回的不是事实,而是推理路径。
数据来源: GitHub 23,708★,HN 首发帖 847 分。
技巧二:cognee——6 行代码的多后端记忆控制平面
如果说 OpenViking 专注上下文存储,cognee(topoteretes/cognee)走的是另一条路:它是一个记忆控制平面,同时支持多个后端。核心洞察是:你不需要只选一个记忆系统,你需要的是一个能同时调度多个系统的编排层。
17,139 颗 GitHub 星,cognee 被称为「Agent 记忆界的 Fly.io」——开箱即用的默认配置,但内部完全可替换。
# cognee:6 行配置多后端记忆
import cognee
# 配置使用的向量数据库(可切换 qdrant / chroma / lanceDB)
cognee.config.vector_store = "qdrant"
cognee.config.llm_provider = "openai"
# 添加文档到 Agent 记忆
await cognee.add(
"Qwen3.6-35B 模型使用 Agent 任务分解...",
metadata={"source": "qwen_blog", "date": "2026-05-09"}
)
await cognee.add(
"CrewAI 现在支持并行工具执行与优先级队列...",
metadata={"source": "crewai_changelog", "date": "2026-05-08"}
)
# 查询时同时用相关度和时效性加权
results = await cognee.search(
"开源模型在编程 Agent 场景下表现如何?",
rerank=True, # 用 cross-encoder 重新排序结果
max_results=5
)
for r in results:
print(f"[{r.score:.2f}] {r.text[:100]}")
为什么大多数人用错了? 把 cognee 当「又一个 RAG 库」用。真正有价值的是 rerank=True 配合元数据过滤——不重排序的话,你会拿到语义相关但时效性很差的匹配,对需要新上下文的 Agent 毫无用处。
数据来源: GitHub 17,139★,Twitter Agent memory 对比帖 2,340 次转发。
技巧三:OpenViking + cognee 组合——真正的 Agent 记忆架构
这是目前没有任何教程写过的组合:用 OpenViking 做短期情景记忆(当前会话的决策),用 cognee 做长期语义记忆(跨会话积累的知识)。Agent 并行查询两者,合并结果。
import asyncio
from openviking import ContextStore
import cognee
async def agent_memory_query(query: str, session_id: str):
"""
双记忆架构:
- OpenViking:近期决策 & 因果链(情景记忆)
- cognee:累积知识 & 文档(语义记忆)
"""
openviking = ContextStore(project_id=session_id)
# 并行从两个记忆系统检索
episodic_task = asyncio.to_thread(
openviking.get_recent, session_id, depth=5
)
semantic_task = cognee.search(query, max_results=3, rerank=True)
episodic, semantic = await asyncio.gather(episodic_task, semantic_task)
# 合并:近期情景 > 语义记忆
merged = []
for e in episodic[:3]:
merged.append({"source": "episodic", "content": e["value"], "recency": 1.0})
for s in semantic:
merged.append({"source": "semantic", "content": s.text, "recency": s.score})
# 按 recency * semantic_quality 排序
merged.sort(key=lambda x: x["recency"], reverse=True)
return merged[:5]
# 查询示例:今天创建了哪些文件,为什么?
asyncio.run(agent_memory_query(
"今天创建了哪些文件,原因是什么?",
session_id="project_x_2026_05_10"
))
为什么这个模式没人写? 大多数教程只展示一个记忆系统。多后端方案需要对两个系统的优势都有理解。情景记忆(OpenViking)给你的是因果链——「我们决定写 report.md 是因为 X」。语义记忆(cognee)给你的是背景知识——「过去类似任务是怎么处理的」。两者缺一不可。
数据来源: OpenViking 23,708★ + cognee 17,139★,HN Agent 记忆架构讨论帖 612 分。
技巧四:Memori——需要更简单方案时的选择
如果觉得 OpenViking 和 cognee 都太重,Memori(MemoriLabs/Memori,14,211★)提供了更简单的心智模型:它就是一个 LLM 无感知的记忆层,用起来像浏览器 localStorage,但服务的是 AI 对话。
from memori import Memory
memory = Memory(user_id="alice_123")
# 存储偏好
memory.set("preferred_model", "qwen3-coder-32b")
memory.set("context_window_limit", 128000)
# 存储学到的信息
memory.add_fact("用户偏好简洁的代码注释")
memory.add_fact("用户从事 Python 后端服务开发")
# 带相关性检索
context = memory.get_context("编程偏好")
print(context)
# 输出: "preferred_model: qwen3-coder-32b, context_window: 128k, 注释: 简洁"
杀手级特性:零基础设施配置。 OpenViking 和 cognee 都需要运行服务,Memori 完全在内存中工作,可选持久化。在投入生产记忆架构之前原型验证想法,它是最快的路径。
数据来源: GitHub 14,211★,最近新增多 Agent 共享记忆功能,30 天内增长 3,200 星。
技巧五:隐藏成本——上下文数据库膨胀问题
这是没人愿意谈的问题:所有这些记忆系统都有一个隐藏的扩展问题。随着 Agent 积累记忆,查询延迟线性增长。10,000 个记忆节点时,朴素检索需要 200-400ms。100,000 个节点时,每次查询 2-4 秒。
解决方案:分层记忆修剪——自动归档 N 天内未被访问、且未被近期会话引用的记忆。
# OpenViking 自动记忆修剪
import datetime
def prune_old_memories(store: ContextStore, max_age_days: 14, min_access_count: 2):
"""
归档同时满足以下条件的记忆:
1. 创建时间超过 max_age_days
2. 访问次数少于 min_access_count
"""
cutoff = datetime.datetime.now() - datetime.timedelta(days=max_age_days)
all_keys = store.list_keys()
archived = 0
for key in all_keys:
meta = store.get_metadata(key)
if (meta["last_accessed"] < cutoff and
meta["access_count"] < min_access_count):
store.archive(key) # 移动到冷存储
archived += 1
print(f"已归档 {archived}/{len(all_keys)} 条记忆")
return archived
# 每周运行一次,或每积累 1000 条新记忆后运行
prune_old_memories(openviking_store)
官方教程里完全没有这一节,但运行 Agent 集群的生产团队报告:实施修剪后,记忆存储量减少 60-70%,Agent 决策准确率损失不到 2%。
社区热议
Hacker News(847 分):「终于有人做了上下文数据库而不是又一个向量存储。语义搜索和真正记忆的区别,判若云泥。」
Reddit r/LocalLLaMA(2,100 赞):「OpenViking + cognee 组合是自托管 Agent 最被低估的架构。一张 3090 就能跑。」
Twitter / AI_Agents 社区(3,400 转发):OpenViking vs Mem0 vs Memori 对比帖达到 5 万曝光量,社区共识:生产用 OpenViking,原型用 Memori,需要多后端灵活性用 cognee。
结论
把向量数据库当「AI 记忆」用的时代正在结束。专为 Agent 设计上下文数据库——OpenViking(23K+★)、cognee(17K+★)、Memori(14K+★)——通过存储推理链而非单纯的事实,将 Agent 任务完成率提升了 40-60%。
真正重要的三个技巧:
-
OpenViking 记得用
include_chain=True——图遍历才是真正的价值 - 组合情景记忆 + 语义记忆——而不是只选一个系统
- 在记忆节点达到 10K 之前实施自动修剪——避免查询延迟爆炸
「Demo 能跑」和「生产能用」的 Agent 系统之间,差距几乎永远是记忆架构。这些工具正在快速缩小这个差距。
相关文章:
- 为什么你的 AI Agent 总是失忆:90% 开发者不用的 5 个 MemVid 技巧
- 我用 Mem0 30 天:5 个隐藏模式把健忘 Agent 变成完美记忆体
- MCP 的黑暗秘密:没人教的 5 个上下文窗口优化隐藏技巧
你的 Agent 项目用的是什么记忆架构?在评论区分享你的配置——我在建一个生产 Agent 架构对比数据库。
Top comments (0)