这几个词最容易被混成一锅粥:向量数据库、RAG、Agent 知识库、Agent 记忆、Embedding、Retriever、Reranker、GraphRAG、BookRAG、A-RAG/Agentic RAG、Adaptive RAG、长上下文、知识图谱、上下文工程。它们不是同一层东西,也不是互相替代的竞品。它们围绕的是同一个核心问题:模型这一次回答/行动时,应该把哪些外部信息放进上下文?
一句话主线
LLM 自己的参数记忆是“脑子里学过的大概世界”;RAG 和 Agent 记忆是在运行时把外部事实搬进当前上下文;向量数据库只是其中一种高效找相似内容的仓库;知识库是被治理过的资料系统;Agent 记忆是会随交互更新的个人化/任务化知识。
你只要抓住“外部知识进入上下文”这条线,概念就不会乱。
flowchart LR
A[原始资料/交互记录] --> B[解析、清洗、切分]
B --> C[Embedding / 关键词 / 层级 / 实体关系]
C --> D[索引层:向量库、倒排索引、目录树、图数据库]
D --> E[Retriever / Agent 召回候选]
E --> F[Reranker / 过滤 / 权限]
F --> G[上下文组装]
G --> H[LLM 回答或 Agent 行动]
H --> I[记忆写入:事实、经验、规则]
I --> D
这张图里,每个热词只占一个位置。
先补一点向量直觉
“向量”不用想复杂,先把它当成一组坐标。
比如有三段话:
- A:怎么申请报销?
- B:员工差旅费用如何走报销流程?
- C:今天晚饭吃什么?
Embedding 模型会把每段文字变成一串数字。数字本身人看不懂,但它们在空间里的距离有意义:A 和 B 的位置会更近,A 和 C 的位置会更远。
最小例子可以想成二维坐标:
| 文本 | “报销相关” | “餐饮闲聊” |
|---|---|---|
| A | 0.9 | 0.1 |
| B | 0.8 | 0.2 |
| C | 0.1 | 0.9 |
当用户问“差旅票据怎么处理”,系统把问题也变成坐标,再找离它最近的资料。真实系统不是二维,而是几百到几千维。相似度也通常不是肉眼看表,而是用余弦距离、内积、L2 距离这类度量。
关键点:Embedding 不是知识库,它只是把内容变成适合搜索的形状。
Google 的 Embeddings 课程把 embedding 解释为把高维稀疏特征翻译成低维空间,便于模型处理;Cohere 文档也把 embedding 说成把文本转成数值数据,用来做相似搜索。这两个说法都指向同一件事:把“语义”变成“可计算的距离”。
把几个核心词放回各自位置
1. 向量数据库:负责“存向量、按相似度快速找”
向量数据库干的事很窄:存 embedding、建索引、按距离找最近的内容,并支持元数据过滤、更新、删除、扩容、权限等工程能力。
代表:
| 类型 | 代表 | 适合记法 |
|---|---|---|
| 托管向量数据库 | Pinecone | 面向生产 AI 检索的托管服务 |
| 开源/云原生向量库 | Milvus, Weaviate, Qdrant | 大规模向量搜索、过滤、混合检索 |
| 开发友好/本地原型 | Chroma | 快速把 embedding 检索跑起来 |
| 传统数据库扩展 | pgvector | 直接在 Postgres 里做向量相似搜索 |
它们解决的是“怎么找得快、找得稳、找得可运维”。但它们通常不负责判断文档是否可信、该不该写入、权限如何解释、答案怎么组织。
所以不要说“我做了一个向量数据库,所以我有 RAG 了”。准确说法是:我有了 RAG 里的一个可能索引后端。
2. 知识库:负责“哪些资料算数,以及怎么被治理”
知识库比向量数据库大一圈。它关心的是:
- 资料从哪里来:PDF、网页、Confluence、Notion、S3、数据库、客服记录。
- 资料是否可信:版本、来源、作者、更新时间、权限。
- 怎么处理资料:解析、清洗、切块、去重、加 metadata。
- 怎么检索资料:关键词、向量、混合搜索、图关系、过滤、重排。
- 怎么证明答案:引用、出处、命中片段、审计日志。
代表:
| 类型 | 代表 | 适合记法 |
|---|---|---|
| 云厂商托管知识库 | Amazon Bedrock Knowledge Bases | 托管 RAG,把数据源、向量存储、检索、生成串起来 |
| 应用平台知识库 | Dify Knowledge | 给 AI 应用接入私有资料 |
| 开发框架数据层 | LlamaIndex | 面向文档摄取、索引、查询的 RAG 数据框架 |
一句话:向量数据库是仓库的一种货架;知识库是带来源、权限、清洗、检索策略和审计的资料系统。
3. RAG:负责“问的时候先查,再带证据生成”
RAG 是 Retrieval-Augmented Generation,检索增强生成。它不是某个数据库,也不是某个框架,而是一种运行时模式:
- 用户提问。
- 系统用问题去知识源里检索相关内容。
- 把检索结果放进 prompt/context。
- LLM 基于这些证据回答。
Lewis 等人的 RAG 论文把它描述成把参数记忆和非参数记忆结合起来:模型参数里有通用语言能力,外部索引里放可更新的知识。
这句话非常重要:
RAG 不是让模型“记住”新知识,而是在回答这一刻把外部知识“带进考场”。
代表:
| 类型 | 代表 | 适合记法 |
|---|---|---|
| RAG/Agent 编排 | LangChain Retrieval, Haystack | 把加载、检索、重排、生成做成管道或组件 |
| RAG 数据框架 | LlamaIndex | 更强调数据接入、索引、查询接口 |
| 图增强 RAG | Microsoft GraphRAG | 用知识图谱处理复杂关系和全局总结类问题 |
| 结构化/智能化 RAG | BookRAG, A-RAG, Adaptive RAG | 修正 naive RAG 的固定切块、固定召回和固定流程 |
如果一个系统只把文档塞进长 prompt,而没有检索,也可以回答,但它不是典型 RAG;如果只做相似搜索但不让 LLM 基于结果生成,也只是语义搜索。
4. Retriever 和 Reranker:负责“先多捞,再精排”
生产 RAG 很少只做一次“向量最相似 top 5”。更常见的是两段:
- Retriever:先尽量把可能相关的材料捞出来,追求召回率。
- Reranker:再用更贵但更准的模型重新排序,追求精度。
LangChain 的 retriever 文档强调,retriever 是“给一个非结构化查询,返回文档”的接口;它可以由向量库构成,但不等于向量库。Cohere 的 Rerank 文档则把 reranker 放在候选文档之后,用来输出更准确的相关性排序。
为什么需要两段?因为第一段要快,第二段要准。向量搜索可能把“语义像但不回答问题”的段落捞出来;reranker 会更细地比较“这个段落是否真的回答这个问题”。
5. 混合检索:负责“语义相似 + 精确命中”
纯向量检索擅长同义改写:
- 用户问:“怎么请年假?”
- 文档写:“员工带薪休假申请流程。”
但它可能不擅长精确符号:
- 报错码:
E-1027 - 产品型号:
KGP-PAY-VA-01 - 合同条款:
Section 4.2
所以很多系统会把向量检索和关键词/BM25 检索合起来,再做融合排序。Weaviate、Qdrant、Chroma 等都在强调 hybrid search 或多种搜索能力。生产经验上,只要资料里有代码、型号、姓名、条款、票据号,混合检索就很重要。
6. GraphRAG / BookRAG / A-RAG:负责“别把资料拍平成一堆 chunk”
到这里,naive RAG 的问题已经很清楚:它默认“资料是一堆平铺片段,用户问题只需要一次 top-k 检索”。真实资料不是这样。
一本书有章、节、段落;一份制度有总则、例外、附录;一个客户案例有公司、合同、联系人、投诉、时间线;一次复杂问答可能要先搜关键词,再读章节,再沿实体关系追一跳。于是 RAG 开始往四个方向升级:
| 分支 | 它修正 naive RAG 的哪条假设 | 一句话记法 |
|---|---|---|
| GraphRAG | 资料不只是片段,还有实体、关系、社区和全局结构 | 按“关系路径”找证据 |
| BookRAG | 长文档不是平铺文本,而是天然有目录层级 | 按“目录树 + 实体图”找证据 |
| A-RAG / Agentic RAG | 检索流程不该写死,模型可以自己决定下一步查什么 | 按“搜索动作路径”找证据 |
| Adaptive RAG / ARAG | 不是每个问题都需要同样深度的检索 | 按“问题复杂度”分配检索预算 |
所以,把 BookRAG 和 A-RAG 直接理解成“更合理的 GraphRAG”不够准确。更好的上位概念是:结构化检索或检索规划。
GraphRAG 的结构来自实体关系图;BookRAG 的结构来自文档目录树和实体图的绑定;A-RAG 的结构来自 Agent 可调用的多粒度检索工具;Adaptive RAG 的结构来自“先判断问题需不需要检索、需要几轮、需要多深”的策略选择。
你刚才说的“最小化路径、最优路径获取精准知识”是一个很好的直觉,但这里的“路径”不一定是图算法里的最短路径。更准确地说,它追求的是:
用最少的无关上下文、最少的无效检索步骤,拿到足够支撑回答的证据。
这条证据路径可能是:
- 目录路径:书 → 章 → 节 → 段落;
- 关系路径:客户 → 合同 → 投诉 → 风险事件;
- 动作路径:关键词搜 → 读 chunk → 语义搜 → 重排;
- 预算路径:简单问题不查,长尾问题查,复杂问题多轮查。
一句话:这些新 RAG 分支不是都在变成 GraphRAG,而是在反对同一个粗糙默认值:把一切资料拍平成 chunk,然后一次 top-k 定生死。
7. Agent 知识库:负责“Agent 可调用的领域资料”
Agent 知识库本质上还是知识库,但使用者从“普通聊天机器人”变成了“会规划、会调用工具、会执行步骤的 Agent”。
差别在于:
- 普通 RAG:问一次,查一次,答一次。
- Agent + 知识库:Agent 在多步任务中决定什么时候查、查哪个库、查完是否继续调用工具。
比如一个报销 Agent 不只是回答“差旅标准是多少”,它还会:
- 查制度知识库。
- 查员工所在城市和职级。
- 判断票据是否缺失。
- 调用报销系统创建草稿。
- 把执行过程和待办写回任务状态。
这时知识库是 Agent 的一个工具,而不是全部系统。
8. Agent 记忆:负责“把交互中产生的新事实沉淀下来”
Agent 记忆和知识库最容易混。我的区分是:
知识库主要回答“世界/公司/领域里本来就存在什么”;记忆主要回答“这个用户、这个任务、这个 Agent 过去发生过什么,以及以后应该怎么做”。
LangChain 的 memory 文档沿用人类记忆分类:semantic memory 记事实,episodic memory 记经历,procedural memory 记规则。放到 Agent 里,可以这样理解:
| 记忆类型 | 记什么 | 例子 |
|---|---|---|
| 短期/工作记忆 | 当前对话、当前计划、当前中间结果 | “我正在帮用户写博客,已完成资料检索” |
| 语义记忆 | 稳定事实和偏好 | “Lei 喜欢先搞清底层逻辑,再看代表工具” |
| 情节记忆 | 曾经发生过的任务轨迹 | “上次调试 Mermaid 渲染时,是测试脚本先暴露问题” |
| 程序记忆 | 做事规则和技能 | “发布博客前要跑 validate、site-ops、mermaid、build” |
代表:
| 类型 | 代表 | 适合记法 |
|---|---|---|
| 框架内记忆 | LangGraph/LangMem | 给 Agent 提供长期记忆、提示优化、存储集成 |
| 独立记忆层 | Mem0 | 面向 Agent/App 的持久记忆层 |
| 图记忆 | Zep / Graphiti | 用带时间的知识图谱组织 Agent 记忆 |
| 状态化 Agent | Letta / MemGPT | 把上下文窗口看成有限资源,做分层记忆管理 |
这里有一个很重要的反直觉点:Agent 记忆不是“把聊天记录全塞进向量库”。
那样会产生三个问题:
- 噪声越来越多:每句话都被当成同等重要事实。
- 旧事实覆盖不了新事实:用户以前说“我用 Python”,后来改用 TypeScript,系统可能同时捞出两条。
- 错误会复读:一次错误经验被记住后,未来相似任务会重复这个错误。
所以好的记忆系统要有“写入策略”:什么值得记、记成什么结构、什么时候过期、冲突时谁优先、错误经验怎么删除。
一条更强的内在逻辑:上下文预算管理
现在把所有概念压成一条主线:
LLM 每次真正能使用的,不是“所有知识”,而是“当前上下文窗口里的知识”。
于是所有系统都在争夺同一个目标:用有限上下文承载最有用的证据。
| 层次 | 解决的问题 | 典型组件 |
|---|---|---|
| 知识生产 | 哪些资料值得进系统 | 文档、网页、数据库、业务事件、聊天记录 |
| 知识表示 | 怎么让机器能找 | embedding、关键词、实体、关系、metadata |
| 知识存储 | 怎么存和索引 | 向量库、搜索引擎、图数据库、对象存储、Postgres |
| 知识召回 | 怎么先找到候选 | retriever、query rewrite、hybrid search、GraphRAG、BookRAG |
| 检索规划 | 要不要查、查几轮、查到什么粒度 | Adaptive RAG、Agentic RAG、A-RAG |
| 知识排序 | 怎么把最相关的排前面 | reranker、过滤、权限、时间衰减 |
| 上下文组装 | 怎么塞进模型输入 | prompt template、引用、摘要、压缩、去重 |
| 生成/行动 | 怎么回答或执行 | LLM、Agent loop、工具调用 |
| 记忆更新 | 哪些新事实要沉淀 | memory writer、reflection、fact extraction、delete/update |
| 质量控制 | 怎么知道有没有用 | eval、命中率、引用准确率、人工反馈、日志 |
这就是我会选择的核心理解框架:不要按产品名记,按“上下文预算管理”记。
向量数据库回答“我怎么快速找到相似片段”;RAG 回答“我怎么把找到的片段变成有证据的回答”;知识库回答“哪些片段可被信任和引用”;Agent 记忆回答“哪些交互经验要影响未来”;GraphRAG 回答“当片段不够、关系更重要时,怎么按实体和社区组织知识”;BookRAG 回答“当文档本身有目录层级时,怎么别把层级打碎”;A-RAG/Adaptive RAG 回答“检索流程和检索预算能不能让模型动态决定”。
用一个报销 Agent 例子串起来
假设你要做一个公司报销 Agent。用户问:
我下周去新加坡见客户,机票和住宿标准怎么算?上次我说过我偏好靠近会场的酒店。
这句话里其实混了三类信息。
第一类是公司制度:差旅标准、城市等级、职级额度、审批流程。这应该来自知识库,资料源可能是公司制度 PDF、HR Wiki、财务系统配置。
第二类是语义搜索:用户没说“差旅政策 v3.2 第四条”,只说“机票和住宿标准”。系统要用 embedding 和检索,把相关条款找出来。这一步可能用向量数据库,也可能加 BM25,因为“新加坡”“职级”“住宿标准”这些词需要精确命中。
第三类是用户偏好:“偏好靠近会场的酒店”。这不是公司制度,而是用户过去交互里形成的Agent 记忆。它可能被记成结构化事实:
{
"user": "Lei",
"preference": "出差订酒店时优先靠近会场",
"source": "conversation",
"updatedAt": "2026-07-20"
}
Agent 真正回答前,应该组合两种证据:
- 从知识库/RAG 找到“新加坡差旅标准”。
- 从记忆库找到“用户订酒店偏好”。
最后回答时,模型上下文里应该有:
用户问题
+ 制度片段:新加坡/海外差旅/机票/住宿标准
+ 用户记忆:订酒店偏好靠近会场
+ 当前任务约束:只给建议,不直接下单,必要时确认日期和预算
这个例子说明一个关键点:RAG 和记忆不是替代关系,而是经常要一起进入上下文。
GraphRAG、BookRAG 和 Agentic RAG 什么时候上场?
普通 RAG 检索的是“片段”。但有些问题不是片段能直接解决的:
- “这个客户过去三个月的所有投诉和续约风险有什么关系?”
- “哪些团队在同一个项目里反复因为同类依赖阻塞?”
- “这家公司内部政策的例外条款集中在哪些业务线?”
这类问题需要看实体、关系、时间和群组。GraphRAG 的思路是先从文本里抽取实体和关系,形成知识图谱,再用图结构辅助检索、总结和推理。Microsoft GraphRAG 文档强调,它用知识图谱改善复杂信息上的问答表现。
但不是所有“更聪明的 RAG”都该叫 GraphRAG。更细一点:
- GraphRAG:问题横跨很多实体和关系,比如客户、合同、风险、团队、依赖链。
- BookRAG:资料本身像书、手册、教材、制度汇编,有很强的章/节/小节层级。
- Agentic RAG / A-RAG:问题需要边搜边判断,模型应该能自己选择关键词检索、语义检索、读 chunk、继续追问。
- Adaptive RAG / ARAG:问题难度差异很大,系统应该先判断“要不要检索、检索多深”,而不是每次都跑同一条重流程。
简单判断:
- 问“哪段文档回答这个问题”优先用普通 RAG。
- 问“很多对象之间有什么关系和模式”考虑 GraphRAG/知识图谱。
- 问“一本手册里的答案在哪个章节、哪个细粒度段落”考虑 BookRAG 这类层级文档 RAG。
- 问“检索路线本身需要多轮探索”考虑 Agentic RAG/A-RAG。
- 问“简单问题不想浪费检索成本,复杂问题又不能少查”考虑 Adaptive RAG/ARAG。
- 问“用户过去发生过什么,且时间顺序重要”考虑带时间的 Agent 记忆,比如 Zep/Graphiti 这类方向。
长上下文会不会替代 RAG?
不会完全替代,但会改变边界。
长上下文让你能一次塞更多内容,减少检索复杂度。但它没有自动解决这些问题:
- 哪些资料是最新版本?
- 哪些资料用户有权限看?
- 哪些片段应该引用?
- 大量内容里哪些最相关?
- 生成结果是否真的基于证据?
- 旧记忆和新记忆冲突时谁赢?
所以长上下文更像“更大的工作台”,RAG/知识库/记忆是“怎么把正确材料拿上工作台”的方法。
常见误区
误区一:向量数据库 = 知识库。
不对。向量库只负责一种索引和搜索能力。知识库还要管来源、权限、版本、metadata、清洗、引用和质量。
误区二:RAG = Agent 记忆。
不对。RAG 通常偏读,读外部资料来回答当前问题;记忆还要写,且要处理长期演化、用户偏好、任务经验、冲突和遗忘。
误区三:把聊天记录 embedding 一下就是长期记忆。
这是最危险的简化。长期记忆应该是筛选、抽取、合并、更新后的结果,而不是无限增长的对话垃圾桶。
误区四:top-k 越大越好。
不一定。召回太多会挤占上下文,让模型在噪声里迷路。生产系统通常需要 query rewrite、metadata 过滤、rerank、摘要、去重和引用控制。
误区五:RAG 能保证不幻觉。
不能。RAG 只能给模型更好的证据入口。模型仍可能误读证据、忽略证据、过度推断。所以要做引用、答案评估、拒答策略和人工反馈闭环。
怎么选型:先问你到底缺哪一层
如果你只是想做“文档问答 demo”,选:
- Chroma 或 pgvector;
- 一个 embedding 模型;
- LangChain 或 LlamaIndex;
- 简单 top-k 检索。
如果你要做“公司内部知识助手”,重点不是换更贵的向量库,而是补:
- 文档权限;
- metadata;
- 增量更新;
- 混合检索;
- reranker;
- 引用和日志;
- 离线评估集。
如果你要做“能长期陪用户工作的 Agent”,重点是:
- 短期状态和长期记忆分开;
- 用户事实、任务经历、行为规则分开;
- 记忆写入要经过筛选;
- 旧记忆可更新、可删除、可审计;
- 记忆召回不能压过当前任务证据。
如果你要做“复杂关系分析”,再考虑:
- 知识图谱;
- GraphRAG;
- 实体消歧;
- 时间线;
- 社区总结;
- 图检索 + 向量检索的组合。
如果你要做“书、手册、制度、教材问答”,重点是:
- 保留目录层级;
- 让 chunk 能回到章、节、标题;
- 抽实体关系但不要丢掉文档结构;
- 查询时先定位章节,再读细节;
- BookRAG 这类“目录树 + 实体图 + Agent 查询”的思路会比纯向量 top-k 更贴近资料形态。
如果你要做“复杂问题自动探索”,重点是:
- 把关键词检索、语义检索、chunk read 暴露成工具;
- 允许 Agent 多轮改写查询;
- 让系统能判断什么时候停止检索;
- 用检索 token、命中证据、引用质量评估成本收益。
最后用四句话收束
- Embedding 是翻译器:把文本、图片、代码等变成可比较的数字。
- 向量数据库是索引仓库:让相似搜索变快、变稳、可扩展。
- RAG 是运行模式:每次回答前先检索,再把证据塞进上下文。
- Agent 记忆是可演化资产:把交互中值得复用的事实、经历和规则沉淀下来,影响未来任务。
真正的总开关只有一个:当前这次模型调用,应该带什么上下文?
能回答这个问题,你就能判断每个名词该放在哪里,也能判断一个系统到底缺的是向量库、知识库、检索策略、重排器、图谱,还是记忆写入规则。
自检问题
读完以后,可以用这几个问题检查自己是否真的懂了:
- 如果我换掉 Pinecone 改用 pgvector,RAG 架构一定变了吗?
- 如果我的 Agent 能查公司制度,但不会记住用户偏好,它有知识库还是有记忆?
- 如果系统总是召回相似但不回答问题的片段,我该优先换向量库、调切块,还是加 reranker?
- 如果问题需要跨几十份文档总结关系,为什么普通 top-k RAG 可能不够?
- 如果资料是一整本手册,为什么“按目录先粗定位、再读小节”可能比直接向量搜段落更稳?
- 如果一个问题很简单,为什么 Adaptive RAG 可能选择不检索?
- 如果一条用户偏好后来改变了,记忆系统应该新增一条,还是更新/失效旧事实?
能把这些问题答清楚,这块概念就基本通了。
资料锚点
- RAG 原始论文:Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
- Embedding 入门:Google Machine Learning Crash Course: Embeddings, Cohere Embeddings, Sentence Transformers
- 向量数据库:Pinecone, Milvus, Weaviate, Qdrant, Chroma, pgvector
- RAG 和检索框架:LangChain Retrieval, LlamaIndex RAG, Haystack
- 结构化与智能化 RAG:BookRAG, A-RAG, Agentic RAG Survey, Adaptive-RAG, RetrievalQA / ARAG
- 知识库产品:Amazon Bedrock Knowledge Bases, Dify Knowledge
- Agent 记忆:LangChain Memory, LangMem, Mem0, Zep paper, MemGPT paper, Letta docs
- GraphRAG:Microsoft GraphRAG, Project GraphRAG