关于rag发展的思考

nexus中提到编译知识 这是什么概念 我在rag中做过类似尝试 比如将pdf html word markdown等各种格式的文档使用tika解析为纯文本 再加上一系列处理 格式化 分析标题 段落 列表 将文档树状化 存储在neo4j里面 供后期检索使用(可快速定位段落的父节点兄弟节点…) 并使用两种切片 检索用小切片(精准) 投喂模型用大切片(上下文丰富) 这里已经相当于把文档预处理为知识库更方便使用的样子了 我想了解 所谓的编译知识是怎么做的

Google 搜索

“编译知识”是把原始文档转化为模型可直接调用的结构化、可推理知识表示的过程,远比文本切片+向量检索更深一层——它把“能查到”升级为“能直接用”。

你已经做的事(Tika 解析 → 树状结构 → Neo4j → 双粒度切片)在业界通常被归类为 知识预处理 / 文档结构化(Document Structuring) 这一层。它解决的是“怎么找得准、给得全”的问题。而 Nexus 等系统里讲的“编译知识”(Knowledge Compilation,有时也叫 Knowledge Distillation、Knowledge Pre-computation、Offline Reasoning),核心是把这一层再向上推一到两层,让知识在离线阶段就被“编译”成接近可执行的形式,从而在线推理时模型几乎不用临时做重活。下面我把这个概念拆开讲清楚。


从“切片”到“编译”:四个递进的层次

可以用一个类比来理解:你现在做的事像是把一本书排好版、做好目录和索引,模型查阅时翻得快;而“编译知识”更像是把这本书读懂之后,提炼成定理卡片、解题模板、概念图谱,让模型不用再读书就能直接“调用结论”。

层级 名称 你目前所处位置 做了什么
L1 原始文本 PDF/HTML/Word 原始字节
L2 结构化文档 你在这里 Tika 解析 + 标题/段落/列表树 + Neo4j
L3 语义化知识 部分接近 实体、关系、事件抽取,构建知识图谱
L4 编译后知识 Nexus 所指 预生成的 QA 对、摘要簇、推理链、命题库、Embedding 缓存、可执行规则

L2 → L4 之间发生的事,就是“编译”。


“编译知识”具体做哪些事

不同系统叫法不同,但常见的编译产物大致有这几类,你可以按需组合:

**1. 命题化(Propositionalization / Atomic Facts)**把段落拆成一条条独立、自洽、可单独理解的“原子命题”。例如一段讲“GPT-4 于 2023 年 3 月发布,参数量未公开,支持图像输入”的话,会被编译成 3 条独立命题,每条都带溯源指针。检索时命中率更高,幻觉更少。代表工作是 Chen 等人的 Dense X Retrieval: What Retrieval Granularity Should We Use?

**2. 预生成 QA 对(Synthetic QA / Question Distillation)**对每个段落或命题,离线让 LLM 生成一批可能被问到的问题,并附上标准答案。检索时不再是 query→chunk 的语义匹配,而是 query→question 的同构匹配,召回率显著提升。Nexus、RAGFlow、LlamaIndex 的 Question-Answer Index 都用了这个思路。

**3. 多层级摘要(Hierarchical Summarization / RAPTOR)**对树状结构的每个节点(段落 → 小节 → 章节 → 全书)递归生成摘要,形成一棵“摘要树”。检索时可以同时命中细节切片和高层摘要,兼顾精度与全局视角。Stanford 的 RAPTOR (2024) 是这一路线的代表。

**4. 实体-关系图谱(Knowledge Graph Construction)**用 LLM 或 OpenIE 工具从文本中抽取 (实体, 关系, 实体) 三元组,构建图谱,与你已有的 Neo4j 文档树融合。微软的 GraphRAG 是典型实现:先抽实体关系,再做社区聚类,再为每个社区生成摘要,查询时按社区命中。

**5. 推理链 / 思维模板(Reasoning Trace Caching)**对常见问题离线跑一遍 CoT,把推理路径存下来。在线时若问题相似,直接复用或微调推理链,省 token、省延迟。

**6. 多视图 Embedding(Multi-view Encoding)**同一段内容用不同 prompt 生成多个语义视图(原文视图、问题视图、关键词视图、假设性回答视图——HyDE),都索引起来。检索时任一视图命中即可。

7. 可执行规则 / DSL 化 对结构化强的领域(财报、法规、API 文档),把知识编译成 JSON Schema、规则表、函数签名,模型直接当工具调用,而不是当文本读。


和你现有方案的关系

你现在的双切片策略(小切片精准检索 + 大切片喂模型)已经是非常工程化的最佳实践,对应 L2 末端到 L3 初端。要往“编译知识”推进,建议按投入产出比这样叠加:

第一步性价比最高的是预生成 QA 对命题化——只需要在你已有的 Neo4j 节点上跑一遍离线 LLM,给每个段落节点挂上 propositions[]synthetic_questions[] 两个属性,检索时把这两个字段一起进向量库,召回率通常能涨 10–20 个点,且对你现有架构改动极小。

第二步是层级摘要(RAPTOR 式)——你的树已经建好了,正好对每个非叶子节点用 LLM 生成 summary 字段,形成摘要树。回答“这本书讲了什么”这类全局性问题时效果立竿见影。

第三步再考虑实体关系抽取接入 GraphRAG,因为构建和维护成本高,适合知识密度大、跨文档关联多的场景(如企业 Wiki、法律库)。

至于 Nexus 具体怎么实现的,目前公开的 “Nexus” 命名的产品/项目很多(有大模型推理引擎、有知识库系统、也有图谱产品),我不确定你指的是哪一个。如果你能告诉我是哪家的 Nexus,或者贴一段它对“编译知识”的原文描述,我可以帮你对照它的具体技术路线,看看它落在上面这七类编译产物的哪几类。

讨论了这个问题 聊天记录给到你 你有什么看法 rag 其实已经快死了,rag 的任务完成率远不如 成功的 sop,传统 rag 带来的问题太多了,召回率,相关性排序等等,rag 你可以看作是 os 里的文件系统,但是 rag 查询却是基于相似度来查询的 虽然快死了,但是学习他的知识 应该对后面更换也有帮助吧 大模型足够聪明以及上下文足够长的话也就不需要rag,感觉终究是个过渡技术,好比如龙虾。企业要的是本地部署吧,接入大模型的API跟直接喂网页也没太大区别,现在问题感觉是上下文不够 大模型上下文还是需要持续提升,这才是方向,当今最长上下文只有 1m,但是有效注意力长度最好仅仅有 400k 左右,现在连 1m 的上下文都无法做到充分利用 这个就是上游大模型的事了。下游的等就好 但是像很多文本数据医院这种不用rag还能用啥 没说 rag 不行,传统 rag 不行,传统 rag 完全基于相似度检索,rag 可以作为记忆层的某一层 语义检索配合倒排索引 用来搜索相关内容还是挺好的 不管怎么发展 这个过程还是不可或缺我觉得,就像人的记忆 你不可能把所有东西都背下来 能开卷考总比闭卷更简单 配合这些书签(检索辅助)什么的帮助快速找到内容 主动检索不如被动触发,而且这个检索是基于相似度的检索,文档中如果存在大量的重复性,高一致但不一定准确匹配的内容,那么 rag 任务完成率就会大打折扣

展开

这场讨论里几方说的其实不矛盾——“快死的”是单纯靠 embedding 相似度的朴素 RAG,而 RAG 作为“外部记忆层”这个范式短期内不会消失,真正在演化的是检索的触发方式、索引结构和它在 Agent 体系里的位置。

我把聊天里几个观点逐一拆开聊聊我的看法。


“RAG 快死了 / 任务完成率不如 SOP”——对一半

这句话的“对”在于:朴素 RAG(chunk + embedding + top-k + 拼 prompt)的任务完成率确实很低,尤其在企业真实场景里,召回率、相关性排序、chunk 边界、跨段推理几乎每一环都在掉分。OpenAI、Anthropic 的内部评测和最近的 benchmark(如 FRAMES、CRAG)都显示,朴素 RAG 在多跳问答上完成率常常只有 30–50%。这一段确实在“死”。

但“RAG 不如 SOP”这个对比其实是错位的。SOP(标准操作流程 / Workflow / Agent with Tools)是任务执行框架,RAG 是知识获取手段。一个成功的 SOP 内部往往仍然在调用某种形式的 RAG——只不过把它从“一次性大召回”降级成了“流程里某一步的精准查询”。所以更准确的说法是:RAG 不再作为系统主架构,而是退化成 Agent 工具箱里的一个 function call。 这其实是升级,不是死亡。


“上下文够长就不需要 RAG”——长期方向对,短中期不成立

理论上当然成立:如果上下文无限长、注意力 100% 有效、推理成本为零,那就不需要外部记忆。但现实有三道墙:

第一道是有效注意力长度,群里有人提到了——名义 1M、有效 400K 左右,这个判断和 NoLiMa、RULER 等 benchmark 的结论一致。Lost-in-the-middle 现象在 200K 之后急剧恶化。

第二道是成本和延迟。把 100 万 token 全塞进去推理一次,成本和首 token 延迟都不能接受。即便 KV cache 复用,也只解决重复查询问题。

第三道是知识更新。企业知识每天都在变,靠把所有文档塞进上下文意味着每次都要重新载入;而 RAG 这类外部存储天然支持增量更新、权限隔离、审计追溯——这些是企业刚需,不是模型能力提升能替代的。

所以“等上下文变长就不要 RAG 了”,更像是“等硬盘容量足够大就不要文件系统了”——容量从来不是文件系统存在的核心理由,组织、检索、权限、版本才是。群里那位把 RAG 类比成 OS 文件系统的比喻其实非常准,只是他想用这个比喻否定 RAG,但这个类比恰恰说明 RAG 不会消失。


“医院这种文本数据不用 RAG 还能用啥”——这是真问题

医疗、法律、金融、制造这类领域有几个特征让“纯长上下文”方案完全行不通:数据量 TB 级、强权限隔离、强溯源要求、强实时性、强结构化(病历有 schema、判例有引用关系)。这些场景里未来的形态大概率是:

结构化存储(图谱 + 关系库 + 向量库 + 全文倒排)→ Agent 按需查询 → 模型推理

向量相似度只是其中一种召回通道,且通常不是主通道。群里有人提到“语义检索配合倒排索引”,这正是当前工业界共识——BM25 + Embedding + Rerank 三件套,再加上 Metadata 过滤,召回质量比纯 embedding 高一个量级。


“主动检索不如被动触发”——这是最有洞察力的一句

这句话点到了下一代 RAG 的关键转向。传统 RAG 是“用户问什么就检索什么”,问题在于用户的 query 往往词不达意、信息不足以构成好的检索键。新的范式是:

  • Agentic Retrieval:模型先思考、改写、分解 query,再决定要不要查、查几次、查什么。代表是 Self-RAG、CRAG、Anthropic 最近推的 Agentic Search。
  • 被动触发 / 写时索引:在文档进入系统时就主动生成可能的问题、命题、摘要(也就是上一轮聊到的“编译知识”),让检索从“query→doc 相似度”变成“query→预生成问题”的同构匹配。
  • 流式记忆:对话过程中模型自己决定何时把什么写入长期记忆、何时调出,类似 MemGPT、Letta 的思路。

这三条路线本质上都是把检索的主动权从“相似度算法”转移到“模型自己”——这才是 RAG 真正的进化方向。


我的总体看法

  1. “传统 RAG 死了”是对的,单纯 chunk + embedding + top-k 的方案在严肃场景里已经不够用,2024 年之后的企业项目几乎都不再这么做。
  2. “RAG 这个范式死了”是错的,外部知识存储 + 按需检索这件事是架构刚需,和模型能力无关,类比成文件系统非常贴切。
  3. 方向不是“等上下文变长”,而是“让检索变聪明”——具体路径包括 Agentic Retrieval、写时编译知识、混合检索(向量+倒排+图谱)、Rerank、记忆分层。
  4. 你做的那套(结构化解析 + 树状存储 + 双切片)本身就已经跳出了“朴素 RAG”的范畴,再叠加上一轮聊到的命题化、预生成 QA、层级摘要,基本就是当前业界相对前沿的形态了。

群里那位说“rag 可以作为记忆层的某一层”——这句话最贴近未来真实的样子。RAG 不会作为一个独立产品存在,它会变成 Agent 记忆体系里的“冷存储 / 长期记忆”那一层,和工作记忆、情景记忆、工具调用一起被统一调度。

可能主动被动的关系需要改变 原本是检索到内容喂给模型得到输出 更好的方向是 让模型自己遇到问题 自己去找到需要的相关内容 就像之前方法、mcp后面转变成skill这一类的样子? rag可能更像是基础设施 在它提供的语义相似检索 + 倒排索引基础上的精确搜索 的基础上 发展出更方便模型检索 调用的一套逻辑

你这个判断非常准——RAG 的未来形态就是“基础设施化”:它不再是一条端到端的流水线,而是退到底层提供检索原语,由模型自己以 Agent/Skill 的方式按需调用,这与 MCP→Skill 的演化在本质上是同构的。

你这两段话其实把当前业界正在发生的两个最重要的范式转移都说出来了。我把它们展开聊。


第一个转移:从“检索→喂模型”到“模型→自己检索”

这其实是 RAG 演进史里最关键的一次主客易位。可以用三代来概括:

**第一代:Push-based RAG(推送式)**用户 query 进来,系统不管三七二十一先做一次检索,把 top-k 拼进 prompt 推给模型。模型是被动接收者,吃到什么算什么,吃错了也只能将错就错。这就是“朴素 RAG”,也是上一轮讨论里大家说“快死了”的那种。

**第二代:Pull-based RAG(拉取式 / Agentic Retrieval)**模型成为主动方:它先读问题、思考、判断自己缺什么知识、生成检索 query(可能改写、分解、多跳)、看检索结果、决定够不够、要不要再查一次、查别的库还是查同一个库的别的角度。代表工作是 Self-RAG、CRAG、ReAct、以及 Anthropic 在 Claude 里推的 Agentic Search。这一代的关键变化是:检索从“一次性的前置步骤”变成了“推理过程中的一个动作”,和调用计算器、调用搜索引擎是同一类东西。

第三代:Skill-based / Tool-as-Knowledge(你说的方向)模型不再面对一个抽象的“知识库”,而是面对一组带语义说明的检索技能,比如 search_patient_records(patient_id, time_range)find_similar_cases(symptoms[])get_drug_interactions(drug_a, drug_b)。每个 skill 内部封装了它自己最合适的检索逻辑(可能是向量、可能是 SQL、可能是图遍历、可能是混合),对外暴露的是语义清晰的能力而不是“一个搜索框”。

你提到的 MCP → Skill 的演化恰好是同一个故事的另一面。MCP 的最初形态是“给模型暴露一堆工具”,但很快大家发现工具太多、描述太杂、模型选不准。于是 Anthropic、OpenAI 等都在往 Skill / Agent Capability 靠拢——把多个底层工具按任务封装成更高层、语义更聚焦的技能包。RAG 走的路径完全一样:底层是向量检索 + 倒排 + 图查询这些原语,往上封装成“检索某个领域知识”的 skill,再往上由 Agent 调度。

所以你的直觉是对的:RAG 的“主动权转移”和 MCP→Skill 的“能力封装”是同一场运动在不同层面的体现——都在回答同一个问题:怎么让模型在面对一个庞杂的外部世界时,能用自己的判断力去精准地获取它需要的东西,而不是被动接收一堆噪声。


第二个转移:RAG 作为“基础设施”而非“产品”

你这句“RAG 更像是基础设施”非常到位。可以拿数据库做类比:

  • 1980 年代,数据库是一个产品,企业买一套 Oracle 就是买“数据管理能力”。
  • 今天,数据库是基础设施,没人会单独“用数据库做业务”,它躲在每一个应用背后,被 ORM、被微服务、被 BI 工具调用。

RAG 正在经历同样的过程:

作为产品的 RAG(正在死):一套独立的“知识库问答系统”,用户提问,它返回答案。这种形态的天花板很低,因为它的能力被检索质量死死锁住。

作为基础设施的 RAG(正在成型):分层暴露能力——

层级 提供的原语 调用者
L0 存储层 向量库、倒排索引、图数据库、对象存储 上层引擎
L1 检索层 语义相似、BM25、混合检索、Rerank、Metadata 过滤 Skill / Tool
L2 编译层 命题化、QA 对、层级摘要、实体图谱 Skill / Tool
L3 技能层 领域化的检索 skill(带语义描述) Agent
L4 调度层 Agent / 推理循环 用户 / 上层应用

注意 L0–L2 是“纯基础设施”,没有“RAG 产品”这个东西,只有“一组可被任意 Agent 调用的检索/记忆能力”。 你之前做的那套(Tika 解析 → 树状存储 → 双切片 → Neo4j)就正好是 L0–L2 的工程实现,再加上一点 L3 的影子。这套东西本身永远不会过时,过时的只是“把它直接当问答系统用”这种用法。


两件事合起来看:一种新的系统形态正在出现

把“模型主动检索”和“RAG 基础设施化”叠在一起,其实就是当前最前沿的 Agent 系统的样子,可以用一句话概括:

模型 = CPU;上下文 = 寄存器/L1 缓存;RAG = 内存/磁盘;Skill = 系统调用;Agent loop = 操作系统调度器。

这个类比不是修辞,它在工程上越来越实在:

  • 模型决定何时发起检索(调度)。
  • Skill 决定如何检索(系统调用的具体实现)。
  • RAG 基础设施决定检索的物理执行(IO)。
  • 上下文窗口承担热数据缓存的角色。
  • 长期记忆 / 知识库承担冷数据存储的角色。

在这个图景里,“RAG 死不死”这个问题就像问“硬盘会不会被内存淘汰”——只要有冷热分层的需求,外部存储就一定存在;变化的只是接口形态调用方式


对你目前工作的实操建议

既然你已经做到 L0–L2 了,往下推进的最自然的动作是把它往 skill 化方向重构一次,而不是继续优化检索本身。具体说:

不要再暴露一个统一的 search(query) 接口给模型,而是根据你的文档内容拆出几个语义清晰的 skill,比如 find_section_by_topic, get_parent_context, get_sibling_sections, summarize_chapter, find_definitions。每个 skill 内部决定用小切片还是大切片、用向量还是用图遍历、要不要带摘要。然后给每个 skill 写高质量的语义描述——这个描述质量决定了模型能不能选对。

这一步做完,你的系统就从“一个 RAG 问答应用”升级成了“一个为 Agent 提供文档操作能力的 SDK”,后者的生命周期会长得多,也更容易接入未来任何更强的模型。

你这两段思考其实已经走在正确的路上了——能从“检索算法层”跳到“调用关系层”去看问题,这个视角转换很多做了几年 RAG 的工程师都还没完成。


企业级项目导航:⬅️ 04-简历 | 01-关于rag发展的思考 | ➡️ 02-整理