2026年8月17日
1. 今天学了什么
今天主要解决了一个看起来基础、但在真正做 RAG 项目时很容易混淆的问题:
LangChain 和 RAG 到底是什么关系?LangChain 是不是 RAG 的一部分?
我之前容易把它们放在同一个层级理解,好像:
RAG
└── LangChain
或者反过来:
LangChain
└── RAG
但这两个理解都不准确。
更准确的关系是:
LangChain = Framework(开发 / 编排框架)
RAG = Architecture / Pattern(应用架构 / 技术模式)
也就是说:
RAG 描述“这个系统要怎么利用外部知识回答问题”,LangChain 描述“工程上如何把这些组件组织和调用起来”。
这是今天最值得留下的认知。
2. LangChain 不是 RAG 的子集,RAG 也不是 LangChain 的子集
这是今天最重要的纠错。
我原来容易理解成
因为很多 RAG 教程都是用 LangChain 写的,所以很容易形成:
RAG = LangChain
甚至:
LangChain 是专门做 RAG 的框架
实际上都不对。
RAG 是什么?
RAG,全称:
Retrieval-Augmented Generation(检索增强生成)
核心思想是:
User Query
↓
Retrieval
↓
找到外部知识
↓
Context
↓
LLM
↓
Answer
也就是模型在回答之前,先从外部知识源中检索相关内容,再把这些内容作为 Context(上下文)交给模型。
因此,RAG 描述的是一种:
LLM Application Architecture(大模型应用架构)
它关心的是:
知识从哪里来?
怎么检索?
检索结果怎么交给模型?
模型怎么基于这些内容生成答案?
LangChain 是什么?
LangChain 更准确的定位是:
LLM Application Orchestration Framework(大模型应用编排框架)
它提供大量抽象和统一接口,用来组织:
Document Loader
Text Splitter
Embedding Model
Vector Store
Retriever
Prompt
LLM
Output Parser
Tool
Agent
…
所以 LangChain 本身不是一种 RAG 算法,也不是一个 Vector Database。
它更像是把不同组件连接起来的一层工程框架。
3. 一个类比让我彻底分清两者
可以把它们类比成 Web 开发。
假设我要开发一个“商品搜索系统”。
那么:
搜索系统
=
我要实现的业务架构 / 功能
而:
Django / Spring
=
帮助我开发这个系统的框架
不能说:
Django = 搜索系统
也不能说:
搜索系统必须使用 Django
同样:
RAG
=
我要实现的 AI 系统模式
而:
LangChain
=
帮助我组织 RAG 各个组件的框架
所以:
可以用 LangChain 实现 RAG,但实现 RAG 并不必须使用 LangChain。
反过来也一样:
LangChain 也不仅能做 RAG,它还可以组织 Tool Calling、Agent、Workflow 等其他 LLM 应用。
这两个判断基本就把它们的边界划清楚了。
4. LangChain 在 RAG 流程中到底出现在哪里?
如果把一个典型 RAG 系统展开:
Raw Documents
↓
Document Loader
↓
Chunking
↓
Embedding
↓
Vector Store
↓
Retriever
↓
User Query
↓
Relevant Documents
↓
Prompt / Context
↓
LLM
↓
Answer
LangChain 并不是这里面的某一个步骤。
更准确地说,它可以:
对这些步骤提供抽象,并把它们串起来。
例如:
RAG Architecture
Document
↓
Loader ← LangChain 可以提供接口
↓
Splitter ← LangChain 可以提供接口
↓
Embedding ← LangChain 可以封装不同模型
↓
Vector Store ← LangChain 可以连接向量数据库
↓
Retriever ← LangChain 提供统一 Retriever 抽象
↓
Prompt ← LangChain Prompt abstraction
↓
LLM ← LangChain Model abstraction
因此,不能说:
LangChain 负责“做检索”。
因为真正执行向量搜索的可能是:
FAISS
Qdrant
Milvus
Weaviate
Chroma
也不能说:
LangChain 就是 Embedding。
Embedding 可能来自完全不同的模型。
LangChain更接近:
Application
↓
LangChain
↓
┌───────────────┐
Embedding Model
Vector Store
Retriever
LLM
Tools
…
└───────────────┘
这也让我开始理解所谓 Orchestration(编排) 到底是什么意思:
它不是代替所有底层组件,而是负责让不同组件按照统一接口协同工作。
5. 一个很重要的工程认知:框架不等于底层能力
这个问题其实不只适用于 LangChain。
以前看到:
retriever.invoke(query)
很容易觉得:
LangChain 完成了检索。
但如果继续往下一层拆:
LangChain Retriever
↓
Vector Store Adapter
↓
Vector Database / Index
↓
Similarity Search
真正执行搜索的可能是向量数据库或向量索引。
类似地:
LangChain ChatModel
↓
Model API
↓
真正的 LLM
所以以后看任何 AI Framework,都要问三个问题:
它自己真正实现了什么?
它只是提供了什么抽象?
真正执行计算的是谁?
这其实是理解 LangChain、LangGraph、Ollama、Vector Database 等技术时非常通用的一种方法。
6. 今天踩的坑:不要按照“谁包含谁”理解 LangChain 和 RAG
我原来以为
可能存在这样的层级:
AI
└── RAG
└── LangChain
实际上
两者属于不同分类维度:
RAG
↓
Architecture / Pattern
LangChain
↓
Framework
所以它们并不存在严格的包含关系。
更合理的表达是:
RAG Application
│
┌──────────┼──────────┐
↓ ↓ ↓
Retriever Prompt LLM
↑ ↑ ↑
└──────────┼──────────┘
│
LangChain
可以参与编排这些组件
这也是今天最重要的一次概念纠偏。
7. 和真实 RAG 项目的关系
这个区别在真实项目里非常重要。
如果面试官问:
你的 RAG 项目为什么用了 LangChain?
不能回答:
因为 RAG 就是用 LangChain 做的。
这个回答暴露的是概念边界不清楚。
更合理的回答是:
RAG 是系统采用的检索增强生成架构,而 LangChain 是工程实现中的编排层。我可以用它统一 Document、Embedding、Vector Store、Retriever、Prompt 和 LLM 等组件的接口,从而减少不同基础设施之间的适配成本;但检索算法、向量数据库和模型本身并不是 LangChain。
如果项目不复杂,甚至完全可以不用 LangChain:
query = "什么是 RAG?"
docs = vector_db.search(query)
context = "\\n".join(docs)
prompt = f"""
请根据下面资料回答问题:
{context}
问题:
{query}
"""
answer = llm(prompt)
这段代码已经具备 RAG 的核心结构:
Query
↓
Retrieval
↓
Context
↓
LLM
↓
Answer
虽然这里没有:
from langchain …
但它仍然是 RAG。
这个例子反过来验证了:
RAG 的成立取决于系统架构,而不是有没有导入 LangChain。
8. 今天形成的新理解
今天真正学会的并不是一句:
LangChain 可以做 RAG
而是建立了一种更准确的技术分层意识。
以后看到一个 AI 技术,我需要先判断它属于哪一层:
LLM
→ Model
RAG
→ Architecture / Pattern
LangChain
→ Application Framework
Vector Database
→ Retrieval Infrastructure
只有先把层级分清楚,才能继续判断:
谁负责数据?
谁负责检索?
谁负责生成?
谁负责连接组件?
否则项目代码虽然能跑,技术理解却很容易停留在框架 API 层。
今天留下的问题
1. LangChain 的 Retriever 到底只是接口抽象,还是会真正参与 Retrieval Algorithm(检索算法)的实现?
2. 如果不用 LangChain,手写一个完整 RAG Pipeline,需要自己负责哪些组件之间的适配?
3. 当 RAG 从简单的 Vector Search 发展到 Hybrid Retrieval、Reranker 等复杂流程后,LangChain 的编排价值会体现在哪里?
今天最值得记住的一句话是:
RAG 决定系统“怎么利用外部知识回答问题”,LangChain解决的是“工程上如何把实现这个系统所需的组件组织起来”。两者不是包含关系,而是 Architecture 与 Framework 的关系。







