前阵子在改造基于 RooCode 的本地知识库查询时,我曾做过一个尝试:把文件的路径、所属项目以及代码块的方法名等元数据,显式地写入到向量存储中。当时的目的很简单------在代码知识库这种场景里,纯粹依靠向量做相似度检索时,召回内容的相关度太低了。
直到最近读到了 OpenViking 的上下文数据库架构介绍,我才有一种被深刻"击中"的感觉。原来我之前在应用层做的小改造,正好切中了当前 Agent 工程落地中最核心的痛点,也在朝着"上下文数据库"方向努力,当时改了一个小点,看了OpenViking之后,发现了新大陆,也能够理解为什么豆包能够在模型没那么出色的情况下,AI APP的用户量却在国内独占鳌头,原来人家在工程侧这么努力,多管齐下,让用户觉得好用。
结合最近的思考与实践,我想谈谈"上下文数据库"又或者就叫"上下文工程"这一技术演进趋势的几点体会。
一、 从"单纯语义检索"到"逻辑寻址"的必然
在 RAG 刚兴起时,大家普遍认为 Embedding + Top-K 就足够了。但在真实的工程落地场景中,纯向量检索的"误召回"极其严重。例如:在Coding场景中,函数命名相似、或者不同模块间类似的架构模式,都会导致模型接收到大量无关上下文,白白浪费 Token 窗口,甚至干扰 Agent 的推理与规划。
OpenViking 提出了一个非常硬核的观点:对于 Agent 来说,路径(Path)是比复杂的 SQL 谓词低得多的控制原语。
这与我的实践不谋而合。当时我在向量库中引入 path、project 和 method_name,本质上就是为向量检索增加了一层"结构化寻址"。Agent 先通过树状目录或范围约束将庞大的搜索空间迅速缩小,再在极小的子树下进行向量语义匹配。用结构化的逻辑空间来约束非结构化的语义检索,是解决复杂上下文调度、降低噪点和提升 Agent 准确率的必由之路。
二、 RAG 的下一程:向量组织与检索方法的工程演进
如今,简单的 RAG 已经演变成了基础设施,真正的技术壁垒正在转向"怎么组织向量"和"怎么创新检索方法"。
在向量组织层面,行业正在从平铺式的向量库,向结构化、分层化的上下文数据库演进。例如通过 L0(短摘要)、L1(结构/元数据)、L2(详细源内容)的渐进式披露(Progressive Disclosure),让 Agent 能以极低成本规划查询,按需加载。
在检索方法层面,单一的相似度计算正在被"混合控制"取代:
- BM25 / TF-IDF + AST 权重:在代码场景下处理精准语法与标识符匹配;
- 局部向量检索(Local RAG):在限定范围内(如当前项目、近期打开的 Tabs)提供高精度的语义理解;
- 图与符号增强:沿着依赖链条进行深入追踪。
三、 落地场景的切面思考:自动补全与 Agent 任务的区别
在深入研讨上下文检索架构时,我也重新审视了具体场景下的技术选型------比如自动补全(Inline Completion)与全局代码 Agent 的差异。
很多开发者在规划代码知识库时,会急于构建完整的"代码依赖图(Dependency Graph)"。但在自动补全场景下,这种做法性价比极低:
- 极致的延迟要求:自动补全需要在 100ms~300ms 内响应,图遍历开销过大;
- 代码残缺性:用户打字时代码处于未编译或不完整状态,符号依赖图容易断裂;
- 局部局限性:补全大多是局部语义填充,核心上下文基本存在于当前文件、同目录文件或最近编辑的标签页(Open Tabs)中。
因此在补全场景下,工程核心必然要回归到 FIM(Fill-in-the-Middle)结构 + AST 高精切片 + 局部快速检索 上。
我目前在本地知识库中已经实现了基于 Jaccard 的高敏匹配,将来继续加入 AST 加权的重合度/词频优化算法 与 局部向量检索(Local Vector RAG):
- 第 0 毫秒:AST 快速解析光标前后文,提取局部作用域与当前 Symbol,组装 FIM 结构;
- 极短时间内:用加权词频算法在打开的 Tabs 中搜寻精确重合片段,同时用局部向量检索捕捉同目录下语义相似的代码块;
- 流式生成:将高质量的局部上下文精准塞入 Prompt,驱动大模型极速响应。
至于复杂的代码依赖图,它真正的舞台是跨文件重构、全库 Review、Bug 诊断这类全局 Agent 任务,他将在对话控制AI编程的场景提供优质的参考语料。
写在最后
从 RooCode 的本地改造,到读完 OpenViking 的架构设计,最大的感触是:上下文绝对不是一个简单的 Blob,它天然具备路径、范围、身份与结构。
RAG 的上半场是让模型"看得见"外部知识,而下半场则是构建一套成熟的上下文数据库,让 Agent 能够"高效、精准、低成本地寻址与调度"知识。厘清场景需求,用合适的结构化索引去驱动语义检索,才是工程化演进的核心解法。