欢迎光临
我们一直在努力

娜样学AI(十二|12):LangChain 与 RAG 到底是什么关系?框架、架构与组件边界一次理清

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 的关系。

赞(0)
未经允许不得转载:171主机测评 » 娜样学AI(十二|12):LangChain 与 RAG 到底是什么关系?框架、架构与组件边界一次理清
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址