DEV Community

韩

Posted on

GitHub 23K Stars 的上下文数据库突然爆火:为什么 RAG 已经过时了

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层
Enter fullscreen mode Exit fullscreen mode

为什么大多数人用错了? 他们用 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]}")
Enter fullscreen mode Exit fullscreen mode

为什么大多数人用错了? 把 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"
))
Enter fullscreen mode Exit fullscreen mode

为什么这个模式没人写? 大多数教程只展示一个记忆系统。多后端方案需要对两个系统的优势都有理解。情景记忆(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, 注释: 简洁"
Enter fullscreen mode Exit fullscreen mode

杀手级特性:零基础设施配置。 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)
Enter fullscreen mode Exit fullscreen mode

官方教程里完全没有这一节,但运行 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%。

真正重要的三个技巧:

  1. OpenViking 记得用 include_chain=True——图遍历才是真正的价值
  2. 组合情景记忆 + 语义记忆——而不是只选一个系统
  3. 在记忆节点达到 10K 之前实施自动修剪——避免查询延迟爆炸

「Demo 能跑」和「生产能用」的 Agent 系统之间,差距几乎永远是记忆架构。这些工具正在快速缩小这个差距。


相关文章:


你的 Agent 项目用的是什么记忆架构?在评论区分享你的配置——我在建一个生产 Agent 架构对比数据库。

Top comments (0)