跳到主要内容

喂给模型它记不住的 — 记忆 / 检索 / 深研

这条分支在货架里的位置: 总纲把这 189 个库的共性讲成一句话——「把一个只会吐文本的 LLM,包成能在循环里感知-动作、能被放心运营的程序」。围绕这条共性分出几条分支:一支教它改代码(coding-agents),一支给它装手脚去动世界;本章是第三样——给它一本「记事本」。因为模型本身有个硬伤:权重是冻结的、上下文窗口是有限且一次性的。它记不住上次会话说过什么、读不到你私有文档里的事实、也没法把散在几十个网页里的证据攒成一份有引用的报告。这一支的全部库,都在从模型外面把「它记不住的东西」喂进去

30 秒导读: 这一档库都在解同一个根本问题——LLM 的知识边界之外的东西,怎么可靠地放进它的上下文。这个「之外」有三块,恰好是本章的三条流派:① 跨会话长期记忆(记住「你是谁、上次聊到哪」)、② 你自己文档的知识(RAG:把文档切块-嵌入-检索,带引用作答)、③ 深度研究(网上没有现成答案时,循环「搜索→阅读→推理」直到写出一份有引用的报告)。本章把这 40 个库横过来切,讲清每条流派对准哪个环节、代表库怎么做,以及一条把三者串起来的暗线:它们本质都是「检索 + 把命中塞进 prompt」,区别只在检索什么、从哪检索、检索几轮。

怎么读本章: 正文是给人读的白话综述,不出现路径行号。每个论断后面挂一个脚注 [^x],精确的 仓库/路径:行 + 符号名都在脚注里;对比矩阵则单开一列「代码锚点」放引用。人读正文,agent 读脚注 / 锚点列。


1. 这条分支要解决什么(第一性原理)

承上:整个货架的共性是「给只会说话的 LLM 装上脚手架,让它变成可信程序」。前几支把脚手架用在动作上(改代码、控浏览器)。本分支把脚手架用在知识上——补的是模型天生的三个缺口。

先把这三个缺口讲透,它们直接决定了后面分出哪三条流派:

模型缺什么白话为什么模型自己给不了
跨会话记忆记住「你是谁、我们上次聊到哪、你偏好什么」权重冻结,窗口一关就忘;硬塞进 prompt 会越滚越长、越贵
你的私有知识「按我这份 PDF / 这个代码库回答」训练数据里没有你的文档;文档太大装不进窗口
网上没现成答案「把散在几十个网页里的证据攒成一份报告」单次检索给不全;要多轮搜、读、想才能拼齐

关键区分——「记忆 vs 检索」,这是本章最容易混的一对:

  • 检索(RAG) 面向一批相对静态的文档:你先把它们切块、嵌入、建索引,查询时按相似度捞回最相关的几块。知识是「别人写好的、你只读不改」。
  • 记忆(Memory) 面向一条随时间增长的对话/事件流:每轮交互都可能写入新事实,而且要处理「新事实和旧事实冲突了怎么办」——是覆盖、是失效、还是保留历史。知识是「你自己边用边攒的、要写也要读」。

一句话直觉: RAG 是「查一本印好的书」,记忆是「记一本自己写的日记」。查书是只读的相似度检索;记日记要处理写入、去重、更新、遗忘、时效——所以记忆比 RAG 多一整套写路径的治理逻辑(见 §2.3)。深研则是「查书查不到,派人出去调研」——把检索从「一次」拉成「多轮循环」。

于是这一支自然分成三条流派,难度和「循环深度」递增:

一次检索静态文档 ──────────────────────────────► 多轮循环边查边想

┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
│ 流派二 RAG │ │ 流派一 记忆 │ │ 流派三 深度研究 │
│ 切块→嵌入→ │ │ 抽取→写入→ │ │ 搜索→阅读→推理 │
│ 检索→带引用 │ │ 治理→检索 │ │ →反思→报告(循环)│
│ (只读) │ │ (读+写) │ │ (多轮 agentic) │
└──────────────┘ └──────────────┘ └──────────────────┘
静态文档 增长的事件流 开放网络 + 长任务

后面三章依次展开。贯穿全章的暗线:无论哪一支,内核都是「把最相关的知识片段找出来,塞进 prompt 的上下文里」——区别只在(a)知识从哪来(你的文档 / 对话历史 / 开放网络)、(b)检索几轮(一次 / 增量写读 / 多轮循环)、(c)命中怎么带引用防止模型瞎编。


2. 流派一:跨会话长期记忆(记事本)

第一支补的是「模型窗口一关就忘」。记忆库 = 一个在模型外面、随时间增长、既能写又能读的事实存储。它比 RAG 多的,全在写路径——所以这一节按「写入→治理→检索」三段讲。

2.1 记什么:从「原始对话」抽成「结构化事实」

没人把整段聊天记录原样存下来——太长、太冗、没法检索。主流做法是用一个 LLM 把对话抽取成更小、更结构化的单元:

  • memori / simplemem:把对话压成结构化的「原子记忆」(atomic memories),一条一事,便于后续精确检索与去重。1
  • memobase:更进一步,只抽取并维护一份结构化用户画像(profile),随时间累积「这个用户是谁、偏好什么」,而非存流水。2
  • claude-mem:抓 Claude Code 的工具调用轨迹,用 Agent SDK 压缩成 observations 再回注,靠内容哈希在时间窗内去重。3

2.2 存成什么形状:三种主流骨架

抽出来的事实,存进哪种数据结构,决定了能怎么查、能不能处理时效与矛盾。三种骨架:

(a) 时序知识图谱(temporal knowledge graph)——处理「时效 + 矛盾」的强解:

  • zep:记忆层建在一个时序知识图谱上(底层引擎 Graphiti),做向量 + 图的混合检索,并带事实溯源(fact provenance)——每条事实知道从哪来、何时有效。4
  • cognee:把文档/对话 cognify 成一张知识图谱,节点是带确定性 ID 的 DataPoint,默认检索器是「向量种子 + 图投影 + 三元组打分」。5
  • core-redplanethq:最讲究的时序 KG 实现——世界事实拆成具体化(reified)的 SPO 三元组(Statement 节点带四条关系),矛盾发生时让旧陈述失效而非删除,完整保留历史;而「偏好/目标」这类主观事实整存不拆(拆了就丢义)。6

(b) 混合检索存储(hybrid store)——不建图,用多路检索凑准:

  • agentmemory:BM25 / 向量 / 图三路检索,用 RRF(倒数排名融合) 合并,权重可动态归一化(某路缺失就把权重清零、其余重新归一)。7
  • supermemory / openmemory-caviraoss:定位为「记忆 / 上下文引擎」,本地可跑,把时间当一等维度,对外暴露记忆 API 或原生 MCP server。8

(c) 文件系统 / 分层加载(filesystem paradigm)——把记忆当「可分层读取的文件」:

  • openviking:把 Agent 记忆、RAG 知识、技能统一进一个文件系统式的上下文数据库,用 L0 摘要 / L1 概览 / L2 详情 三级加载——先给摘要,按需才拉全文,省 token。9
  • memos:自称「记忆 OS」,做持久记忆 + 混合检索 + 跨任务技能复用,把记忆当可被多个 agent 共享、可演化的系统资源。10

2.3 治理:记忆比 RAG 难的那一半

这是记忆的灵魂,也是它和 RAG 的本质分界。RAG 的文档是只读的;记忆每轮都可能写入,于是必须回答四个 RAG 从不面对的问题:

治理问题白话代表做法
去重同一件事说了两遍,别存两条agentmemory 用 SHA-256 / Jaccard 判重与版本化11
矛盾「我住北京」后来变「我住上海」core 让旧 Statement 失效、保留历史;不做物理删除12
遗忘/衰减过期或低价值的记忆要能淡出agentmemory 带 decay & forget;openmemory 以时间为一等维度13
作用域这条记忆属于哪个用户 / 哪个 session各库以 user_id / session 隔离,防止串味

领域智慧: 「矛盾了怎么办」几乎是区分玩具和生产记忆库的分水岭。幼稚做法是覆盖(丢历史);成熟做法(core / zep)是双时间轴——记录「事实何时有效」和「何时被我们知道」,矛盾时让旧事实失效而非删除,这样「他去年住北京、今年住上海」两条都在,查询可带时间点。这套时序治理,正是 RAG 那条只读检索线永远不需要的。

2.4 检索与回注:把记忆塞回 prompt

写好之后,读路径反而和 RAG 趋同——按查询捞回最相关的几条记忆,拼进上下文。差异在回注的时机与粒度:

  • claude-mem3 层渐进披露是省 token 的范式:先 search(紧凑索引,每条 ~50-100 token)→ timeline(时间线)→ 只对筛出的 ID 拉 get_observations(全文,~500-1000 token),相比一股脑全塞省约 10×。14
  • 很多库(agentmemory / openmemory / memos)直接走 MCP server,把「记忆检索」做成 host agent 能调的工具,由模型自己决定何时回忆。15

3. 流派二:你自己文档的知识(RAG)

第二支补的是「模型没读过你的私有文档」。RAG(检索增强生成)的经典四步——切块 → 嵌入 → 检索 → 带引用作答——是本货架被复刻最多的流水线。这一节按这四步接地。

怎么读这张图: 这是一条离线建索引 + 在线查询的双阶段流水线。上半段离线跑一次,下半段每次查询跑。

离线(建索引一次): 文档 → 解析 → 切块 → 嵌入 → 存进向量库

在线(每次查询): 问题 → 嵌入 → 检索 ─────────────┘

重排 → 塞进 prompt → 带引用作答

3.1 解析:把「脏文档」变成干净文本(常被低估的第一步)

垃圾进垃圾出。PDF 的分栏、表格、公式若解析乱了,后面全白搭。所以出现了一整类专门做文档解析的库:

  • docling:把 PDF/DOCX/PPTX/HTML 等 20+ 格式统一成一个 Pydantic 类型的 DoclingDocument 结构树(带章节/表格/图注),再在结构树上切块,而非切裸文本。16
  • mineru:高精度文档抽取,三种可选后端(经典 CV+OCR 的 pipeline / VLM 引擎 / 混合),公式转 LaTeX、表格转 HTML。17
  • crawl4ai / firecrawl:面向网页的解析——把任意 URL 变成干净 markdown。crawl4ai 的杀手锏是 PruningContentFilter / BM25ContentFilter 按文本密度或查询相关度剪掉噪声,产出 fit_markdown18

3.2 切块:决定检索粒度的隐形旋钮

文档整篇太大,得切成块再嵌入。切法直接决定检索质量——切碎了丢上下文,切大了不精准:

  • chonkie:专做切块的轻量库,递归切块按层级 delimiter 逐级下切(段落 → 句子 → 标点 → token),11 种 chunker 覆盖不同取舍。19
  • dsrag:主打上下文 chunk header——给每块加一段说明它出处/所属章节的头,缓解「块脱离上下文后不知所云」。20
  • deep-searcher:用句子窗口双文本技巧——小块保检索精度,再用 wider_text 元数据带回更宽上下文喂给 LLM。21

3.3 检索:相似度只是起点,混合 + 图 + 重排才准

最朴素是「查询嵌入 × 块嵌入取余弦最近的 k 个」。生产系统普遍在这上面叠三层增强:

(a) 混合检索(hybrid): 稠密向量抓语义、稀疏 BM25 抓关键词,融合两路。

  • ragflow / r2r:生产级 RAG 引擎,都做混合检索(向量 + 关键词)加重排。22

(b) GraphRAG: 不止查孤立的块,还沿实体关系图多跳,答「需要串联多个事实」的问题。

  • autoflow:图 RAG 会话知识库,带权多跳图遍历(按距离分桶给预算),再叠向量粗筛 + 应用层重排。23
  • kotaemon / khoj:文档问答 UI/second brain,都内建 GraphRAG + 引用24

(c) 存储/索引的工程取舍:

  • leann:低存储向量索引,靠查询时重算换约 97% 存储节省——为本地/端侧 RAG 而生。25
  • txtai:一体化嵌入数据库,把语义搜索 + LLM 编排打包。26

3.4 带引用作答:防幻觉的最后一环

RAG 的价值一半在「找对块」,另一半在「作答时挂上引用」——让用户能核查,也逼模型别脱离检索到的证据瞎编。

  • agentset:定位就是「带 citations 的 RAG 平台」,且内建一个自评估的 agentic 检索环——生成查询 → 并行搜 → canAnswer 评估够不够,不够再补一轮;并另有多阶段 deep-research 管线。27
  • quivr / llmware / morphik-core:分别是「意见化 RAG 库」「小模型企业 RAG」「多模态文档检索」,都把「检索到的片段 + 出处」一起交给生成层。28

注意 agentset 的位置: 它已经不是「一次检索」了——canAnswer 评估 + 补查,是把 RAG 往**流派三(深研)**推的过渡形态。RAG 和深研的边界,就是「检索一次」还是「不够就再来一轮」。


4. 流派三:深度研究(网上没现成答案时)

第三支补的是「单次检索给不全、答案得自己拼」。深度研究 agent = 把检索从『一次』升级成『循环』:搜索 → 阅读 → 推理 → 发现缺口 → 再搜,直到攒够证据写出一份有引用的报告。它和 RAG 同源(都是检索+作答),区别只在多了一个由模型驱动的外层循环

4.1 内核:search → read → reason → reflect 的循环

所有深研 agent 都在跑这个循环,只是把它组织成不同形状。最裸露的实现最能看清内核:

  • node-deepresearch:一个 while 循环里,每步模型从 search / read / reflect / answer 四个动作里选一个;四个动作各有布尔门控(如 allowSearch),受 tokenBudget 约束;预算快耗尽时进 beastMode(保留最后约 10-15% 预算强制出答案),避免无限刷。29
  • dzhng-deep-research:极简 TS 实现,把「迭代精化研究方向 + 对某方向深挖」表达成可控深度/广度参数的递归。30

4.2 组织形态:单循环 vs 主管-子代理(supervisor-researcher)

循环之上,怎么组织多个研究方向,分出两种架构:

(a) 单 agent 迭代循环:一个 agent 反复搜读想。node-deepresearch、dzhng、local-deep-researcher、local-deep-research-lc 都属此类——后两者主打全本地(Ollama/本地 LLM + 本地搜索引擎)。31

(b) 主管 + 子研究员(fan-out):一个 supervisor 把大问题拆成子任务,并行派给多个 sub-researcher,各自搜读,再压缩汇总。这是当代最主流的深研架构:

  • open-deep-research-langchain:教科书式分层——clarify_with_user(先问清范围)→ write_research_briefsupervisor(拿 think_tool 反思、ConductResearch 派活、ResearchComplete 收工)→ 多个 researcher 子代理各自搜索 → compress_research 压缩。迭代次数、并发数、压缩模型全可配。32
  • gpt-researcher:把研究拆成一组 skill——researcher(执行检索)、SourceCurator(评估/排序来源)、ContextManager(管上下文)、writer(成文),多源检索后成文并带引用。33
  • deer-flow / miroflow / mirothinker / tongyi-deepresearch:长时程「超级 agent」路线——deer-flow 用子代理 + 沙箱做研究/编码/创作;miroflow / mirothinker / tongyi 则是为深研专门训练/优化过的模型 + agent 栈,在 GAIA/BrowseComp 等基准上冲榜。34

4.3 深研 × RAG:对私有数据做深研

深研的检索源不必是开放网络,也可以是你自己的向量库——这就和 RAG 合流了:

  • deep-searcher:对私有数据做深研的 agentic RAG——查询分解 → 并行检索 → LLM 当重排器(逐块 YES/NO)→ 基于反思判断缺口是否补齐,再决定要不要下一轮。35

注意 deep-searcher / agentset 的双重身份: 它们既在 RAG 抽屉、又在深研抽屉——因为「agentic RAG」就是「检索源换成私有库的深研」。这再次印证暗线:三条流派共享同一个『检索 + 塞进上下文』内核,深研只是把检索循环化、RAG 只是把检索源固定成你的文档。

4.4 防幻觉:引用是硬约束

深研报告若不带引用,就是「一本正经地编」。所以这一支普遍把「每个论断挂来源」当硬约束——node-deepresearch 维护 Reference 列表、gpt-researcher 由 curator 把来源绑进成文、ODR 让 supervisor 汇总时保留 sub-agent 的出处。这与 §3.4 的 RAG 引用是同一条工程线,只是证据来自多轮而非一次检索。


5. 对比矩阵(逐格接地)

维度:补哪个缺口(记忆/检索/深研)、知识来源核心机制写路径治理(记忆特有:去重/矛盾/遗忘)、引用/防幻觉形态。描述列写白话,精确 path:line+符号 全在最右「代码锚点」列。 表示该维度对此库不适用。

库 (id)补哪个缺口知识来源核心机制写路径治理引用代码锚点
zep记忆对话/事件流时序知识图谱 + 向量/图混合检索 + 事实溯源双时间轴,事实失效非删除溯源README.md(Graphiti 引擎);examples/
cognee记忆对话/文档cognify 成 KG;向量种子 + 图投影 + 三元组打分DataPoint 确定性 ID 去重图溯源modules/retrieval/graph_completion_retriever.py:35;utils/brute_force_triplet_search.py;engine/models/DataPoint.py
core-redplanethq记忆对话/事件流具体化 SPO 三元组(Statement 节点四关系)+ 意图路由矛盾让旧陈述失效、保留历史HAS_PROVENANCEpackages/providers/src/graph/neo4j/domains/triple.ts;webapp/app/services/knowledgeGraph.server.ts;search-v2/router.ts
agentmemory记忆编码 sessionBM25/向量/图三路 + RRF 融合(动态归一)SHA-256/Jaccard 去重 + 版本化 + decay/forgetsrc/state/hybrid-search.ts:20(RRF_K);functions/remember.ts:77;functions/observe.ts:71
claude-mem记忆工具调用轨迹SDK 压缩成 observations;3 层渐进披露回注内容哈希时间窗去重observation IDsrc/services/worker;src/server/mcp/recall-mcp-server.ts;plugin/hooks
memori记忆执行/对话抽成结构化原子记忆持久化结构化状态core/
memobase记忆对话只抽/维护结构化用户画像画像随时间合并src/
simplemem记忆对话(多模态)压成结构化原子记忆,终身记忆原子去重examples/
openmemory-caviraoss记忆对话本地记忆库 + 原生 MCP;时间一等维度时间维度衰减apps/;examples/
openviking记忆+RAG+技能统一上下文库文件系统范式;L0/L1/L2 分层加载 + session 压缩8 类记忆抽取 + LLM 去重URI 引用openviking/client.py;session/compressor_v3.py;docs/en/concepts/03-context-layers.md
memos记忆对话/任务记忆 OS:持久记忆 + 混合检索 + 跨任务技能复用自演化src/;examples/
supermemory记忆/上下文对话/文档快速可扩展记忆/上下文引擎;记忆 API,本地可跑引擎内建apps/
chonkieRAG(切块)文档递归切块(段→句→标点→token)+ 11 种 chunkersrc/chonkie/types/recursive.py:12(RecursiveLevel);chunker/
doclingRAG(解析)20+ 文档格式统一成 DoclingDocument 结构树,树上切块结构溯源docling/document_converter.py;pipeline/;chunking/(HybridChunker)
mineruRAG(解析)PDF/图/office三后端(CV+OCR / VLM / 混合);公式转 LaTeXmineru/backend;mineru/cli/client.py
crawl4aiRAG(网页解析)任意 URLPruningContentFilter/BM25 剪噪 → fit_markdowncrawl4ai/content_filter_strategy.py:381(BM25ContentFilter);async_webcrawler.py
firecrawlRAG(网页解析)任意 URL/站点scrape→engine→transform→postprocess 成 markdown/JSON源 URLapps/api/src/scraper/scrapeURL;lib/extract
dsragRAG(切块/检索)文档上下文 chunk header + 语义切块headerexamples/
agentsetRAG+深研文档自评估 agentic 检索环(canAnswer)+ deep-research 管线增量索引citationsapps/web/src/lib/agentic;apps/web/src/lib/deep-research;packages/engine/src/vector-store
autoflowRAG(GraphRAG)文档带权多跳图遍历(距离分桶预算)+ 向量粗筛重排图溯源backend/app/rag/chat/retrieve/retrieve_flow.py;knowledge_graph/graph_store/tidb_graph_store.py
ragflowRAG(生产引擎)文档深度文档理解 + 混合检索 + GraphRAG + agentic 检索增量引用agent/;example/
r2rRAG(生产引擎)文档agentic RAG,REST API,混合检索 + 摄取增量引用README.md
kotaemonRAG(文档问答 UI)文档GraphRAG + citations 的 chat-with-docscitationsREADME.md
khojRAG(second brain)文档 + web文档/网页检索 + agents + 深研增量索引引用src/
leannRAG(索引存储)文档低存储向量索引,查询时重算省 ~97% 存储apps/;examples/
txtaiRAG(嵌入库)文档一体化嵌入数据库 + 语义搜索 + LLM 编排索引更新src/;examples/
quivrRAG(库)文件意见化 RAG,任意 LLM/向量库出处core/;examples/
llmwareRAG(企业)文档小专用模型的企业 RAG 流水线出处README.md
morphik-coreRAG(多模态)复杂文档多模态文档检索与存储出处core/;examples/
node-deepresearch深研开放网络search/read/reflect/answer 循环 + tokenBudget + beastModeReference 列表src/agent.ts:114(动作门控)/:420(tokenBudget)/:197(beastMode)
open-deep-research-langchain深研网络 + MCPclarify→brief→supervisor(think_tool/ConductResearch)→子研究员→compress保留子代理出处src/open_deep_research/deep_researcher.py:178(supervisor)/:365(researcher);state.py:15(ConductResearch)
gpt-researcher深研多源 web/本地skill 分工:researcher/curator/context/writer,多源检索成文curator 绑来源gpt_researcher/skills/researcher.py;curator.py;context_manager.py
deep-searcher深研×RAG私有向量库查询分解 → 并行检索 → LLM 逐块重排 → 反思补轮来源deepsearcher/agent/deep_search.py;loader/splitter.py(句子窗口)
dzhng-deep-research深研网络深度/广度可控的迭代精化 + 递归深挖来源src/
local-deep-researcher深研(本地)web(本地 LLM)迭代搜索 + 写报告,Ollama 驱动来源src/
local-deep-research-lc深研(本地)10+ 搜索引擎隐私优先本地深研(arXiv/PubMed),加密来源src/;examples/
deer-flow深研(超级 agent)web + 沙箱子代理 + 沙箱做研究/编码/创作引用backend/
miroflow深研(框架)web 工具工具使用 agent 框架,GAIA/FutureX 榜首引用src/
mirothinker深研(模型+agent)web交互式 scaling 优化,BrowseComp/GAIA SOTA引用apps/
tongyi-deepresearch深研(模型+agent)web30B MoE 专训长时程深研,对标 OpenAI DR引用README.md

矩阵里反复出现的「家族」:时序 KG 家族(zep / cognee / core——用图 + 双时间轴治理矛盾)、混合检索家族(agentmemory / ragflow / r2r——多路 + RRF/重排)、主管-子代理家族(open-deep-research / gpt-researcher / deer-flow——fan-out + 压缩汇总)。长尾库不必逐一拆解,它们大多落进某个已接地的格子。


6. 模式与权衡(可带走的领域智慧)

读完矩阵,几条横跨全分支的规律浮出来:

  • 三条流派同一个内核:检索 + 塞进上下文。 记忆、RAG、深研本质都是「找到最相关的知识片段,拼进 prompt」。它们的差异是三个正交旋钮:知识来源(对话流 / 你的文档 / 开放网络)、检索轮数(增量写读 / 一次 / 多轮循环)、证据治理(时序矛盾 / 引用 / 反思补轮)。看懂这三个旋钮,任何新库都能秒归位。

  • 记忆比 RAG 多一条『写路径』,难点全在治理。 RAG 文档只读;记忆要处理去重、矛盾、遗忘、作用域。「矛盾了怎么办」是玩具和生产的分水岭——成熟解(core/zep)用双时间轴让旧事实失效而非删除。别把记忆做成「往向量库里无脑追加」,那会越查越脏。

  • 深研 = 把检索循环化,防跑飞靠预算 + 反思。 单次检索给不全就多轮。但循环会烧钱、会跑飞,所以普遍上两道闸:token 预算 + beastMode 强制收尾(node-deepresearch)、主管反思 + 迭代上限(ODR 的 think_tool + max_researcher_iterations)。

  • 引用是全章的防幻觉底线。 无论 RAG 还是深研,「每个论断挂来源」不是锦上添花而是硬约束——它既让用户能核查,也从机制上逼模型别脱离检索证据瞎编。记忆这边对应的是事实溯源(zep 的 provenance、core 的 HAS_PROVENANCE)。

  • 解析和切块是被低估的地基。 RAG 效果差,一半原因不在检索算法而在文档没解析干净 / 切块粒度不对(docling/mineru 存在的理由)。垃圾进垃圾出——先把 PDF 表格公式解析对、把块切在语义边界上,再谈检索。

  • 混合 + 图 + 重排,是「相似度不够准」的三级补强。 纯向量余弦会漏关键词、答不了多跳。生产系统普遍叠:混合检索(向量+BM25,RRF 融合)→ GraphRAG(沿实体图多跳)→ 重排(交叉编码器或 LLM 逐块判)。三级各治一类失败。


7. 演化趋势(这条分支往哪走)

把时间轴拉出来,三条趋势很清楚:

  1. 记忆:从『追加式向量库』→『时序知识图谱』。 早期记忆就是「把对话嵌进向量库、查相似」;新一代(zep/cognee/core)转向图 + 双时间轴,能处理矛盾、能按时间点回溯。因为一旦记忆要长期用,「他去年住哪、今年住哪」这种时序矛盾就绕不过去。

  2. RAG:从『一次检索』→『agentic 检索循环』。 经典 RAG 检索一次就作答;新一代(agentset 的 canAnswer、ragflow 的 agentic retrieval、deep-searcher)让 agent 自评估够不够,不够再补一轮——RAG 正在长出深研的循环。RAG 与深研的边界因此越来越模糊。

  3. 深研:从『单 agent 循环』→『主管-子代理 fan-out』,并开始专训模型。 早期是一个 agent 反复搜读;主流转向 supervisor 派活给并行子研究员 + 压缩汇总(ODR/gpt-researcher/deer-flow)。同时出现 tongyi/mirothinker 这类为深研专门训练的模型——把「会不会用工具搜读」从提示工程下沉进权重。

三条趋势其实同源:随着任务变长、知识变动态,系统越来越舍得『多花一轮检索、多攒一层结构』去换准确率。 记忆加时间轴、RAG 加循环、深研加子代理,都是同一个方向——用更重的检索脚手架,补模型那颗冻结的、窗口有限的脑子。这也呼应总纲的共性:把 LLM 包成可信程序,关键不在模型多聪明,而在它记不住、读不到、想不全的地方,脚手架兜不兜得住


8. 代表作 + 深入读哪些

按流派点名代表作,想深入就从这里下钻:

想学的东西代表作入口
时序知识图谱记忆 + 双时间轴治理(必修)core-redplanethq · zepcore graph/neo4j/domains/triple.ts;zep README(Graphiti)
向量种子 + 图三元组检索cognee克隆 modules/retrieval/graph_completion_retriever.py
混合检索 + RRF 融合 + 去重/衰减agentmemory克隆 src/state/hybrid-search.tsfunctions/remember.ts
记忆的 3 层渐进披露回注(省 token)claude-mem克隆 src/server/mcp/recall-mcp-server.tsdocs/architecture-overview.md
分层上下文加载(L0/L1/L2)openviking克隆 docs/en/concepts/03-context-layers.mdsession/compressor_v3.py
递归切块 + chunker 选型chonkie克隆 src/chonkie/types/recursive.pychunker/
高保真文档解析(解析地基)docling · minerudocling document_converter.py;mineru backend/
网页剪噪成 fit_markdowncrawl4ai克隆 content_filter_strategy.py
GraphRAG 多跳检索autoflow克隆 knowledge_graph/graph_store/tidb_graph_store.py
带引用的 agentic RAG 环agentset · r2ragentset apps/web/src/lib/agentic;r2r README
深研循环内核(动作门控 + 预算)node-deepresearch克隆 src/agent.ts:114/:420
主管-子代理 fan-out + 压缩open-deep-research-langchain克隆 deep_researcher.py:178/:365
skill 分工的研究 agentgpt-researcher克隆 gpt_researcher/skills/
对私有库做深研(agentic RAG)deep-searcher克隆 deepsearcher/agent/deep_search.py
全本地深研local-deep-researcher · local-deep-research-lc克隆各 src/

给入门者的学习路径: 先分清 记忆 vs RAG——读 agentmemory(记忆的写路径:去重/矛盾/衰减)对照任一 RAG 库(只读检索),你就抓住了本章最核心的区分 → 再读 chonkie + docling 把 RAG 的「切块 + 解析」地基打牢,配 ragflow/r2r 看生产级混合检索 → 想懂时序记忆的天花板就读 core-redplanethq 的双时间轴 → 最后用 node-deepresearch(裸循环)+ open-deep-research-langchain(主管-子代理)理解「把检索循环化」的深研。读完回总纲 index.md,你会发现这三支和别的分支只是把同一套「检索+塞进上下文+防瞎编」直觉,换了个知识来源和循环深度。


9. 代码地图(导航索引)

给 agent 的精确入口表(库 / 路径 / 符号),按主题排:

主题路径符号
具体化 SPO 三元组记忆core-redplanethq/packages/providers/src/graph/neo4j/domains/triple.tsStatement / HAS_SUBJECT/HAS_PROVENANCE
记忆意图路由core-redplanethq/apps/webapp/app/services/search-v2/router.tsrouteIntent
图三元组检索cognee/cognee/modules/retrieval/graph_completion_retriever.py:35GraphCompletionRetriever
三元组暴力搜索cognee/cognee/modules/retrieval/utils/brute_force_triplet_search.pybrute_force_triplet_search
混合检索 RRF 融合agentmemory/src/state/hybrid-search.ts:20RRF_K / bm25/vector/graph weights
记忆去重与遗忘agentmemory/src/functions/remember.ts:77Jaccard supersession / decay
3 层渐进披露回注claude-mem/src/server/mcp/recall-mcp-server.tssearch/timeline/get_observations
L0/L1/L2 分层加载openviking/docs/en/concepts/03-context-layers.mdcontext layers
session 记忆压缩openviking/openviking/session/compressor_v3.py8-category extraction
递归切块规则chonkie/src/chonkie/types/recursive.py:12RecursiveLevel / RecursiveRules
统一文档结构树docling/docling/document_converter.pyDocumentConverter / DoclingDocument
网页剪噪过滤crawl4ai/crawl4ai/content_filter_strategy.py:381BM25ContentFilter / PruningContentFilter
GraphRAG 多跳遍历autoflow/backend/app/rag/indices/knowledge_graph/graph_store/tidb_graph_store.pyretrieve_with_weight
agentic 检索环(canAnswer)agentset/apps/web/src/lib/agenticgenerate→search→canAnswer
深研动作循环 + 预算node-deepresearch/src/agent.ts:114allowSearch/allowRead/allowReflect/allowAnswer
深研 beastMode 收尾node-deepresearch/src/agent.ts:197beastMode / tokenBudget
主管派活收工open-deep-research-langchain/src/open_deep_research/deep_researcher.py:178supervisor / think_tool / ConductResearch
子研究员 + 压缩open-deep-research-langchain/src/open_deep_research/deep_researcher.py:365researcher / compress_research
研究 skill 分工gpt-researcher/gpt_researcher/skills/researcher / SourceCurator / ContextManager
私有库 agentic RAGdeep-searcher/deepsearcher/agent/deep_search.pyquery decompose → LLM rerank → reflect
句子窗口双文本deep-searcher/deepsearcher/loader/splitter.pywider_text metadata

Footnotes

  1. memori(core/)与 simplemem(examples/)把对话抽取压缩成结构化「原子记忆」持久化,便于精确检索与去重(卡片 summary)。

  2. memobase(src/)只抽取并随时间维护结构化用户 profile,而非存对话流水(卡片 summary)。

  3. claude-mem/src/services/worker 抓 Claude Code 工具轨迹,经 Agent SDK 压缩成 observations;内容哈希时间窗去重(卡片 Answers/Gotchas)。

  4. zep/README.md 说明记忆层建于时序知识图谱之上(底层引擎 Graphiti,README.md:30-31),做向量+图混合检索与 fact provenance。

  5. cognee/cognee/modules/retrieval/graph_completion_retriever.py:35 GraphCompletionRetriever(向量种子 + 图投影 + 三元组打分,triplet_distance_penalty);节点 ID 见 infrastructure/engine/models/DataPoint.py。

  6. core-redplanethq/packages/providers/src/graph/neo4j/domains/triple.ts 具体化 Statement 三元组(HAS_SUBJECT/HAS_PREDICATE/HAS_OBJECT/HAS_PROVENANCE);world vs voice 事实之分见 packages/types/src/graph/graph.entity.ts。

  7. agentmemory/src/state/hybrid-search.ts:20 RRF_K=60,:26-32 bm25/vector/graph 三路权重与动态归一化。

  8. openmemory-caviraoss(apps/)本地记忆库 + 原生 MCP,时间作一等维度;supermemory(apps/)记忆/上下文引擎 + 记忆 API,本地可跑(卡片 summary)。

  9. openviking/docs/en/concepts/03-context-layers.md L0/L1/L2 分层加载;session/compressor_v3.py 8 类记忆抽取 + LLM 去重。

  10. memos(src/)持久记忆 + 混合检索 + 跨任务技能复用(卡片 summary)。

  11. agentmemory/src/functions/remember.ts:77-87 Jaccard supersession、:98-127 版本化;observe.ts:71-78 SHA-256 去重。

  12. core-redplanethq 卡片 Gotchas:矛盾时旧 Statement 失效(never delete),经 knowledgeGraph.server.ts 的 reflection 保留历史。

  13. agentmemory/src/functions/remember.ts decay & forget;openmemory 卡片 summary「time as a first-class dimension」。

  14. claude-mem/src/server/mcp/recall-mcp-server.ts 暴露 search/timeline/get_observations 三层;卡片 Answers 述其约 10× token 节省。

  15. agentmemory/src/index.ts 注册 MCP worker(250+ 函数);openmemory/memos 同样以 MCP server 暴露记忆检索。

  16. docling/docling/document_converter.py DocumentConverter 将 20+ 格式统一为 DoclingDocument;切块经 docling/chunking/(HybridChunker,实现在 docling-core)。

  17. mineru/mineru/backend 三后端(pipeline / vlm / hybrid);CLI 见 mineru/cli/client.py(卡片 Answers)。

  18. crawl4ai/crawl4ai/content_filter_strategy.py:381 BM25ContentFilter、:33 RelevantContentFilter(Pruning 变体),产出 fit_markdown。

  19. chonkie/src/chonkie/types/recursive.py:12 RecursiveLevel(段落→句子→标点→token 逐级),chunker/ 下 11 种实现。

  20. dsrag 卡片 summary/Answers:上下文 chunk header + 语义切块(examples/)。

  21. deep-searcher/deepsearcher/loader/splitter.py 句子窗口双文本(小块检索 + wider_text 元数据带宽上下文)。

  22. ragflow(agent/)深度文档理解 + 混合检索 + GraphRAG + agentic 检索;r2r(README.md)agentic RAG + 混合检索 + REST(卡片 summary)。

  23. autoflow/backend/app/rag/indices/knowledge_graph/graph_store/tidb_graph_store.py 带权多跳遍历(retrieve_with_weight,距离分桶预算);向量粗筛重排见 vector_store/tidb_vector_store.py。

  24. kotaemon(README.md)与 khoj(src/)均内建 GraphRAG + 引用的文档问答(卡片 summary)。

  25. leann(apps/)低存储向量索引,查询时重算换约 97% 存储节省(卡片 summary)。

  26. txtai(src/)一体化嵌入数据库 + 语义搜索 + LLM 编排(卡片 summary)。

  27. agentset/apps/web/src/lib/agentic 自评估检索环(生成查询→并行搜→canAnswer);deep-research 管线见 apps/web/src/lib/deep-research;向量存储抽象 packages/engine/src/vector-store。

  28. quivr(core/)意见化 RAG 库、llmware(README.md)小模型企业 RAG、morphik-core(core/)多模态文档检索——均把检索片段 + 出处交给生成层(卡片 summary)。

  29. node-deepresearch/src/agent.ts:114-117 四动作布尔门控 allowReflect/allowAnswer/allowRead/allowSearch;:420 tokenBudget=1_000_000;:197 beastMode(:498-499 预留最后约 15% 预算强制出答案)。

  30. dzhng-deep-research/src/ 深度/广度可控的迭代精化 + 递归深挖(卡片 summary)。

  31. local-deep-researcher(src/,Ollama 驱动)与 local-deep-research-lc(src/,10+ 搜索引擎、加密)均为全本地迭代搜索 + 写报告(卡片 summary)。

  32. open-deep-research-langchain/src/open_deep_research/deep_researcher.py:60 clarify_with_user、:118 write_research_brief、:178 supervisor(:202 [ConductResearch, ResearchComplete, think_tool])、:365 researcher、:435 researcher_toolscompress_research;状态 state.py:15 ConductResearch、:30 ClarifyWithUser;配置 configuration.py:94 max_researcher_iterations、:173 compression_model

  33. gpt-researcher/gpt_researcher/skills/ 下 researcher.py / curator.py(SourceCurator)/ context_manager.py(ContextManager)/ writer.py 分工。

  34. deer-flow(backend/)子代理 + 沙箱;miroflow(src/)工具使用 agent 框架 GAIA/FutureX 榜首;mirothinker(apps/)交互式 scaling、BrowseComp/GAIA SOTA;tongyi-deepresearch(README.md)30B MoE 专训长时程深研(卡片 summary)。

  35. deep-searcher/deepsearcher/agent/deep_search.py 查询分解 → 并行检索 → LLM 逐块 YES/NO 重排 → 反思判断缺口是否补齐(卡片 Answers/Gotchas)。