LangChain 技术博客:从 LLM 调用到 Agent 与 RAG
本文介绍 LangChain 的基本思想、核心组件,以及如何使用 LangChain 构建 LLM 应用、Agent 和 RAG 知识库系统。
1. 什么是 LangChain?
随着 ChatGPT、Claude、Gemini 等大语言模型的发展,调用一个 LLM 已经非常简单。
例如:
response=model.invoke("请介绍一下 Transformer")但真正开发一个 AI 应用时,我们通常还需要:
- Prompt 管理
- 多轮上下文
- 外部工具调用
- 数据库查询
- 文档检索
- RAG 知识库
- Agent 决策
- 工作流编排
- 日志追踪与评估
如果全部自己实现,代码会迅速变得复杂。
LangChain 的作用就是给这些能力提供一套统一的开发框架。
可以简单理解为:
LLM │ ├── Prompt ├── Tools ├── Retriever ├── Memory / Context ├── Agent │ └── ApplicationLangChain 并不是一个大模型,而是连接LLM、数据、工具和应用逻辑的开发框架。
2. LangChain 的整体技术栈
现在可以把 LangChain 生态理解成三个主要部分:
LangChain │ ┌───────────┼───────────┐ │ │ │ Model Agent RAG │ │ │ └─────── LangGraph ─────┘ │ LangSmith其中:
LangChain
负责提供模型、Tool、Agent、Retriever 等高级开发接口。
LangGraph
负责复杂 Agent 的状态管理和工作流编排。
LangSmith
负责运行追踪、调试、评估和可观测性。
对于普通项目,可以先使用 LangChain。
如果业务流程逐渐复杂,例如:
问题 ↓ 判断问题类型 ↓ 搜索知识库 ↓ 判断结果是否足够 ├── 是 → 生成答案 └── 否 → Web Search ↓ 再次生成这种具有状态、分支和循环的流程,更适合使用 LangGraph。
3. 安装 LangChain
推荐创建独立 Python 环境。
python-mvenv .venvLinux/macOS:
source.venv/bin/activateWindows:
.venv\Scripts\activate安装 LangChain:
pipinstall-Ulangchain如果使用 OpenAI 模型:
pipinstall-U"langchain[openai]"或者:
pipinstall-Ulangchain-openai建议把 API Key 放到环境变量中,而不是直接写在代码里。
例如.env:
OPENAI_API_KEY=your_api_key安装:
pipinstallpython-dotenv然后读取:
fromdotenvimportload_dotenv load_dotenv()4. LangChain 中最核心的组件:Model
LangChain 对不同模型提供了相对统一的接口。
例如:
fromlangchain.chat_modelsimportinit_chat_model model=init_chat_model("openai:gpt-5.5")然后调用:
response=model.invoke("什么是 Transformer?")print(response.content)核心逻辑非常简单:
User Input ↓ LangChain ↓ LLM ↓ AIMessageLangChain 的优势在于,当项目需要切换不同模型提供商时,上层业务代码通常不需要进行大规模修改。
例如模型可以来自:
OpenAI Anthropic Google Gemini Azure OpenAI AWS Bedrock HuggingFace Ollama ...这也是 LangChain 很重要的设计思想:
让应用依赖统一的 Model Interface,而不是直接依赖某一家模型厂商。
5. Prompt:控制模型行为
实际项目中,我们通常不会直接把用户问题扔给模型,而是需要 System Prompt。
例如:
messages=[{"role":"system","content":"你是一名 Python 技术专家,请使用简洁准确的语言回答问题。"},{"role":"user","content":"Python 的装饰器是什么?"}]response=model.invoke(messages)print(response.content)这里实际上形成:
System Prompt + User Prompt ↓ LLM ↓ ResponseSystem Prompt 决定了模型:
- 扮演什么角色
- 如何组织答案
- 可以做什么
- 不可以做什么
- 输出什么格式
所以在实际 LLM 应用开发中:
Prompt 本质上也是程序逻辑的一部分。
6. Tool:让大模型拥有外部能力
LLM 最大的问题之一是:
它本身并不能直接操作真实世界。
例如:
查询天气 查询数据库 读取文件 调用搜索引擎 执行 Python 访问公司 API 查询订单这些能力需要通过 Tool 实现。
例如定义一个天气工具:
defget_weather(city:str)->str:"""查询指定城市的天气。"""returnf"{city}今天晴,25°C"然后可以创建一个 Agent:
fromlangchain.agentsimportcreate_agent agent=create_agent(model="openai:gpt-5.5",tools=[get_weather],system_prompt="你是一名智能助手,可以使用工具回答用户问题。")调用:
result=agent.invoke({"messages":[{"role":"user","content":"杭州今天天气怎么样?"}]})print(result["messages"][-1].content)这里的关键变化是:
普通 LLM:
Question ↓ LLM ↓ AnswerAgent:
Question ↓ LLM ↓ 需要工具吗? / \ 否 是 │ │ 回答 调用 Tool │ Tool Result │ LLM │ Answer也就是说:
Agent = LLM + Tools + Decision Loop
LLM 不再只是生成文字,而开始负责判断:
下一步应该做什么。
7. 什么是 Agent?
Agent 是 LangChain 最重要的应用方向之一。
普通聊天机器人是:
Input → LLM → Output而 Agent 是:
Input ↓ Reasoning ↓ 选择 Tool ↓ 执行 Tool ↓ 读取结果 ↓ 继续判断 ↓ Final Answer例如用户问:
帮我查询杭州天气,如果下雨就推荐三个室内景点。Agent 可以执行:
1. 理解用户问题 2. 调用 Weather Tool 3. 获得: 杭州今天有雨 4. 判断: 满足“下雨”条件 5. 调用 Search Tool 6. 搜索: 杭州室内景点 7. 整理搜索结果 8. 返回最终答案这已经不再是简单的“文本生成”。
而是一种:
LLM 驱动的任务执行系统8. RAG:让大模型读取自己的知识库
LangChain 另一个非常重要的应用就是 RAG。
RAG:
Retrieval-Augmented Generation中文通常翻译为:
检索增强生成。
它解决的是这样一个问题:
假设公司有 10000 份内部文档:
技术文档 产品说明 项目报告 合同 论文 数据库这些数据并不存在于模型训练数据中。
如果直接问:
我们公司的 XXX 项目采用什么技术架构?LLM 很可能不知道。
因此需要:
用户问题 ↓ 知识库检索 ↓ 找到相关文档 ↓ 文档 + 问题 ↓ LLM ↓ 答案这就是 RAG。
9. RAG 的核心流程
一个典型 RAG 系统通常包含:
Documents ↓ Document Loader ↓ Text Splitter ↓ Chunks ↓ Embedding Model ↓ Vectors ↓ Vector Database用户提问时:
Question ↓ Embedding ↓ Vector Search ↓ Relevant Documents ↓ Prompt ↓ LLM ↓ Answer所以 RAG 可以分成两个阶段。
第一阶段:
Indexing即建立知识库。
第二阶段:
Retrieval + Generation即查询知识库并生成答案。
10. Document Loader
Document Loader 用来读取数据。
例如数据来源可能是:
PDF Word Markdown TXT Web Notion Google Drive 数据库最终 LangChain 会尽量统一转换成:
Document其基本结构类似:
Document(page_content="文档正文",metadata={"source":"example.pdf"})这样无论原始文件是什么格式,后面的处理逻辑都可以保持统一。
11. Text Splitter
大模型和 Embedding 模型都不适合一次处理超长文档。
因此需要把文档切成多个 Chunk:
完整论文 ↓ Chunk 1 Chunk 2 Chunk 3 Chunk 4 ...例如:
chunk_size = 1000 chunk_overlap = 200意味着每个文本块大约 1000 个字符,相邻 Chunk 保留部分重叠。
为什么需要 overlap?
因为一句完整语义可能刚好出现在两个 Chunk 的边界。
例如:
Chunk 1: Transformer 使用 Self-Attention 机制, 它能够计算不同 token ... Chunk 2: ...之间的关系,因此能够有效处理 长距离依赖问题。如果完全没有 overlap,语义就可能被截断。
12. Embedding
Embedding 是 RAG 的核心技术之一。
Embedding 模型会把文本:
LangChain 是一个 LLM 应用开发框架转换成向量:
[0.12, -0.31, 0.77, ..., 0.18]如果两个文本语义相似:
LangChain 是什么? LangChain 有什么作用?对应的向量在高维空间中通常也会比较接近。
因此可以通过计算:
Cosine Similarity或者其他距离指标寻找相似文本。
整个过程可以表示为:
Text ↓ Embedding Model ↓ Vector用户问题同样执行:
Question ↓ Embedding ↓ Query Vector然后:
Query Vector ↓ Vector Database ↓ Top-K Similar Documents13. Vector Store
Embedding 生成的向量通常需要存储到向量数据库。
常见选择包括:
FAISS Chroma Milvus Qdrant Pinecone Weaviate Elasticsearch例如:
Document ↓ Embedding ↓ Vector ↓ Vector Store查询:
Question ↓ Embedding ↓ Vector Search ↓ Top-K Documents对于本地小型 Demo,可以使用:
FAISS Chroma对于大规模生产环境,可以考虑:
Milvus Qdrant Pinecone Elasticsearch具体选择应根据:
数据规模 查询性能 部署方式 过滤需求 成本 高可用需求决定。
14. Retriever
Retriever 是 LangChain 对“检索能力”的抽象。
输入:
query输出:
List[Document]例如:
docs=retriever.invoke("Transformer 为什么使用 Self-Attention?")fordocindocs:print(doc.page_content)Retriever 后面并不一定只能连接向量数据库。
也可以连接:
Vector Database BM25 Elasticsearch SQL Web Search Knowledge Graph Hybrid Search因此可以把 Retriever 理解为:
给定一个问题,负责寻找相关上下文。
15. 一个完整 RAG 系统的架构
典型 RAG:
┌──────────────┐ │ User │ └──────┬───────┘ │ ▼ ┌──────────────┐ │ Question │ └──────┬───────┘ │ ▼ ┌───────────────┐ │ Retriever │ └───────┬───────┘ │ ▼ ┌─────────────────┐ │ Vector Database │ └────────┬────────┘ │ Relevant Docs │ ▼ ┌──────────────┐ │ Prompt │ │ │ │ Question │ │ Context │ └──────┬───────┘ │ ▼ ┌───────┐ │ LLM │ └───┬───┘ │ ▼ Answer这也是目前企业知识库问答系统中非常常见的架构。
16. 2-Step RAG 与 Agentic RAG
传统 RAG 通常是:
Question ↓ Retrieve ↓ Generate可以称为:
2-Step RAG它的特点是流程固定、容易调试、延迟容易控制。
但现在越来越多系统开始采用:
Agentic RAG即由 Agent 判断:
要不要检索? 检索哪个知识库? 检索几次? 当前结果够不够? 是否需要重新搜索? 是否需要调用 Web Search?例如:
User Question ↓ Agent ↓ 问题是否需要知识库? / \ 不需要 需要 │ │ 回答 Retriever │ 信息是否充分? / \ 是 否 │ │ LLM Web Search │ LLM这类系统的灵活性更高,但复杂度和运行成本也会增加。
17. LangGraph 与 LangChain 的关系
随着 Agent 复杂度增加,仅靠:
Prompt + Tools往往已经不够。
例如一个研究助手可能需要:
用户问题 ↓ Planner ↓ 搜索论文 ↓ 阅读论文 ↓ 判断证据是否充分 ↓ 不足 → 再次搜索 ↓ 整理证据 ↓ 生成报告 ↓ Fact Check ↓ Final Answer其中包含:
状态 分支 循环 错误恢复 人工确认这种情况下 LangGraph 更合适。
可以简单理解为:
LangChain ↓ 高级 LLM / Agent 开发接口 LangGraph ↓ 复杂 Agent Workflow 编排LangChain 的 Agent 本身也建立在 LangGraph 提供的运行能力之上。
18. LangSmith:为什么生产环境需要可观测性?
LLM 应用与普通软件最大的区别之一是:
LLM 输出具有不确定性。
传统代码:
Input → Function → Output通常比较容易调试。
Agent:
Input ↓ LLM ↓ Tool A ↓ LLM ↓ Tool B ↓ LLM ↓ Output如果最终结果错误,就需要知道:
Prompt 是什么? 模型输出了什么? 调用了哪个 Tool? Tool 返回了什么? 用了多少 Token? 耗时多少? 哪一步出现问题?这就是 LangSmith 的主要作用。
它可以帮助开发者观察:
Model Call Tool Call Agent State Latency Token Usage Execution Trace Evaluation Result因此对于复杂 Agent 项目:
LangChain + LangGraph + LangSmith通常是比较完整的一套开发链路。
19. LangChain 适合什么项目?
LangChain 比较适合以下场景。
AI 助手
ChatBot 个人助手 企业助手 客服机器人RAG 知识库
论文知识库 企业文档问答 法律知识库 医疗文献检索 技术文档助手Agent
Research Agent Coding Agent Data Agent SQL Agent Web Agent工作流自动化
例如:
读取邮件 ↓ LLM 分类 ↓ 查询数据库 ↓ 生成回复 ↓ 人工审核 ↓ 发送20. 什么情况下没必要使用 LangChain?
LangChain 并不是所有 LLM 项目的必需品。
如果你的项目只是:
用户输入 ↓ 调用一次模型 ↓ 返回结果那么直接使用模型厂商 SDK 往往更加简单。
例如:
OpenAI SDK Anthropic SDK Google GenAI SDK即可完成任务。
LangChain 的价值通常在系统出现以下需求之后才明显:
多个 Prompt 多个 Tool RAG Agent 多模型 状态管理 复杂工作流 Tracing Evaluation因此不要为了使用 LangChain 而使用 LangChain。
应当根据系统复杂度决定是否引入框架。
21. 一个比较合理的学习路线
如果刚开始学习 LangChain,不建议直接上复杂 Multi-Agent。
推荐:
① LLM API ↓ ② LangChain Model ↓ ③ Prompt ↓ ④ Structured Output ↓ ⑤ Tool Calling ↓ ⑥ create_agent ↓ ⑦ Embedding ↓ ⑧ Vector Store ↓ ⑨ Retriever ↓ ⑩ RAG ↓ ⑪ Agentic RAG ↓ ⑫ LangGraph ↓ ⑬ LangSmith其中最重要的三个能力是:
Tool Calling RAG Agent Workflow掌握这三个部分之后,大多数 LLM 应用的核心架构就已经比较清晰。
22. 总结
LangChain 本质上解决的不是:
“怎么调用一个大模型?”
而是:
“怎么把大模型真正集成到一个软件系统中?”
一个完整的大模型应用往往可以抽象为:
User │ ▼ Prompt │ ▼ Agent ┌─────┼─────┐ │ │ │ ▼ ▼ ▼ Tools RAG APIs │ │ │ └─────┼─────┘ │ ▼ LLM │ ▼ ResponseLangChain 提供模型、工具、Agent 和检索等高级抽象;
LangGraph 进一步解决复杂 Agent 的状态和工作流编排;
LangSmith 则解决调试、Tracing 和评估问题。
所以目前更准确的理解应该是:
LangChain = LLM Application Framework LangGraph = Agent Orchestration Framework LangSmith = LLM Observability & Evaluation Platform如果只是简单调用 LLM,LangChain 并不是必需的。
但当系统逐渐演变为:
LLM + Tools + RAG + Agent + Workflow + EvaluationLangChain 生态的价值就会逐渐体现出来。