LangChain 入门完全指南:核心概念、学习路线与实战 Demo

LangChain 入门完全指南:核心概念、学习路线与实战 Demo

  • [LangChain 入门完全指南:核心概念、学习路线与实战 Demo](#LangChain 入门完全指南:核心概念、学习路线与实战 Demo)
    • [一、LangChain 是什么?------ 框架全景图](#一、LangChain 是什么?—— 框架全景图)
    • 二、核心模块详解
      • [2.1 模型(Models)](#2.1 模型(Models))
      • [2.2 提示模板(Prompts)](#2.2 提示模板(Prompts))
      • [2.3 链(Chains)](#2.3 链(Chains))
      • [2.4 记忆(Memory)](#2.4 记忆(Memory))
      • [2.5 索引与检索(Indexes / Retrievers)](#2.5 索引与检索(Indexes / Retrievers))
      • [2.6 代理与工具(Agents & Tools)](#2.6 代理与工具(Agents & Tools))
    • [三、LangChain 学习路线图:从入门到精通](#三、LangChain 学习路线图:从入门到精通)
      • [阶段一:理解 LLM 基础与调用(1-2 天)](#阶段一:理解 LLM 基础与调用(1-2 天))
      • [阶段二:构建简单的链与 Prompt 工程(2-3 天)](#阶段二:构建简单的链与 Prompt 工程(2-3 天))
      • [阶段三:集成外部数据源(RAG)(3-5 天)](#阶段三:集成外部数据源(RAG)(3-5 天))
      • [阶段四:记忆与多轮对话(2-3 天)](#阶段四:记忆与多轮对话(2-3 天))
      • [阶段五:自主代理开发(3-5 天)](#阶段五:自主代理开发(3-5 天))
      • 阶段六:项目实战与部署(持续)
    • [四、动手实践:五大基础 Demo](#四、动手实践:五大基础 Demo)
      • [Demo 1:第一次调用 LLM](#Demo 1:第一次调用 LLM)
      • [Demo 2:使用 Prompt Template 生成定制内容](#Demo 2:使用 Prompt Template 生成定制内容)
      • [Demo 3:构建一个带记忆的对话链](#Demo 3:构建一个带记忆的对话链)
      • [Demo 4:基于 PDF 的文档问答(RAG)](#Demo 4:基于 PDF 的文档问答(RAG))
      • [Demo 5:让 AI 帮你搜索网页并计算(Agent + Tools)](#Demo 5:让 AI 帮你搜索网页并计算(Agent + Tools))
    • 五、常见应用场景
    • 六、总结与展望

LangChain 入门完全指南:核心概念、学习路线与实战 Demo

随着 ChatGPT 的横空出世,大语言模型(LLM)已经不再只是实验室里的研究课题,而是正在重塑我们构建软件的方式。但当我们真正想用 LLM 打造一个能落地的应用时,很快就会遇到一系列现实问题:怎么管理上下文窗口?如何让模型连接私有知识库?又如何让模型一步步推理并调用外部工具?

这就是 LangChain 出现的背景。它并非一个模型,而是一套让你像搭积木一样,把 LLM 与数据源、工具、记忆等组件组合成复杂应用的开发框架。无论你想做智能客服、文档助手还是自主代理,LangChain 都能大幅降低开发门槛。

本文将完整梳理 LangChain 的基本框架与核心模块,提供一条清晰的学习路线,并手把手带你完成五个基础 Demo,帮你从"知道概念"跨越到"会写代码"。


一、LangChain 是什么?------ 框架全景图

LangChain 是一个用于构建基于大语言模型的应用的开源框架,由 Harrison Chase 于 2022 年发起。它最大的贡献是将 LLM 应用开发中的常见模式(如链式调用、记忆管理、文档检索、工具调用等)抽象成了标准化、可组合的模块。

你可以把 LangChain 想象成一个乐高套装:

  • Models 是电机(提供能力)
  • Prompts 是控制指令(告诉电机往哪转)
  • Chains 是齿轮组(把多个步骤串起来)
  • Memory 是状态存储(记住历史)
  • Indexes 是知识库(接入外部信息)
  • Agents 是决策大脑(自主选择工具和步骤)

下面我们就逐一拆解这六大核心模块,这是理解 LangChain 全部应用能力的基石。


二、核心模块详解

2.1 模型(Models)

LangChain 中的模型不单指大语言模型,而是包含三类抽象:

  • LLM:接收字符串输入并返回字符串输出的基础模型,如 OpenAI 的 GPT-3.5/4、ChatGLM 等。
  • Chat Model:专门优化对话场景的模型,输入和输出都是消息列表(Message),包含角色标识(system、user、assistant)。
  • Embeddings Model:将文本转换为向量表示,用于语义搜索和知识库构建。

在 LangChain 中使用模型非常简单,所有模型都遵循统一的接口,可以随时切换底层提供商,而无需改动业务代码。

代码示例(LLM 调用):

python 复制代码
from langchain.llms import OpenAI

llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.9)
response = llm("给我讲一个关于程序员的笑话")
print(response)

对于对话场景,则使用 Chat Model:

python 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
messages = [
    SystemMessage(content="你是一个毒舌的代码审查员"),
    HumanMessage(content="这段代码为什么报错?")
]
response = chat(messages)
print(response.content)

2.2 提示模板(Prompts)

在实际开发中,我们很少写死提示词,而是需要动态拼装模板。LangChain 的 PromptTemplate 可以实现参数化提示,支持 f-string 风格以及聊天消息模板。

PromptTemplate 示例:

python 复制代码
from langchain import PromptTemplate

template = "请用{language}语言解释什么是{concept},要求通俗易懂。"
prompt = PromptTemplate.from_template(template)
final_prompt = prompt.format(language="Python", concept="装饰器")
# 结果:"请用Python语言解释什么是装饰器,要求通俗易懂。"

对于 Chat Model,有对应的 ChatPromptTemplate

python 复制代码
from langchain.prompts import ChatPromptTemplate

chat_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role}。"),
    ("human", "请帮我{task}。")
])
messages = chat_prompt.format_messages(role="资深营养师", task="设计一份减脂早餐")

2.3 链(Chains)

单次 LLM 调用往往不够,真正的应用通常需要多个步骤:获取用户输入 → 生成提示 → 调用 LLM → 解析输出 → 调用下一个工具...... 这些步骤的串联就是"链"。

LangChain 提供了多种预制链,如 LLMChainSequentialChainRetrievalQA 等。你也可以非常方便地使用 LCEL(LangChain Expression Language)来构建自定义链。

简单 LLMChain 示例:

python 复制代码
from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(language="Java", concept="多态")

LCEL 风格的链(更推荐):

python 复制代码
from langchain.schema import StrOutputParser

lcel_chain = prompt | llm | StrOutputParser()
result = lcel_chain.invoke({"language": "Go", "concept": "协程"})

这种管道式的写法清晰且易于扩展,是目前 LangChain 官方主推的方式。

2.4 记忆(Memory)

LLM 默认是无状态的,每次调用都像是"失忆"了一样。Memory 模块负责在对话过程中保存和加载历史记录,让模型能够进行多轮对话。

常见的记忆类型包括:

  • ConversationBufferMemory:缓存全部对话历史。
  • ConversationBufferWindowMemory:只保留最近 K 轮对话。
  • ConversationSummaryMemory:用摘要压缩历史,减少 token 消耗。

带记忆的对话链示例:

python 复制代码
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

memory = ConversationBufferMemory()
conversation = ConversationChain(llm=chat, memory=memory)
conversation.predict(input="你好,我叫小明")
conversation.predict(input="我叫什么名字?")
# 模型会回答"你叫小明"

2.5 索引与检索(Indexes / Retrievers)

LLM 的知识受限于训练数据的截止时间,而且可能产生幻觉。为了让模型能回答关于私有文档或最新信息的问题,我们需要搭建 RAG(Retrieval-Augmented Generation) 流程。

这个流程的核心是:

  1. 将文档分割成小块(Chunking)
  2. 用嵌入模型将每个块转换成向量
  3. 存储到向量数据库(如 Chroma、FAISS、Pinecone)
  4. 用户提问时,检索出最相关的文档块
  5. 将文档块作为上下文拼接到提示词中,让 LLM 据此回答

LangChain 通过 Document LoaderText SplitterVectorStoreRetriever 等组件封装了这一完整流程。

文档加载与分割示例:

python 复制代码
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

loader = TextLoader("./knowledge.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)

然后构建向量数据库和问答链:

python 复制代码
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma

embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)
retriever = vectorstore.as_retriever()

2.6 代理与工具(Agents & Tools)

链是"固定流程",而代理是"动态决策"。代理会分析用户输入,自主判断需要调用哪些工具、以什么顺序调用,直到完成任务。这赋予了 LLM 执行复杂任务的能力,比如联网搜索、查询数据库、调用 API 甚至运行代码。

工具(Tool)是代理可以调用的函数,LangChain 内置了大量工具,也支持你自定义工具。常见的代理类型有 Zero-shot ReActOpenAI Functions 等。

自定义工具与代理示例:

python 复制代码
from langchain.agents import load_tools, initialize_agent, AgentType

# 加载内置工具:计算器、维基百科搜索
tools = load_tools(["llm-math", "wikipedia"], llm=llm)

agent = initialize_agent(
    tools, 
    llm, 
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)
agent.run("法国首都的人口数量乘以2是多少?")

代理会自行推理:先查维基得到巴黎人口,然后调用计算器工具乘以2,最后给出答案。


三、LangChain 学习路线图:从入门到精通

面对这么多模块,如何循序渐进地学习?这里有一条经过实践验证的学习路径,分为六个阶段。

阶段一:理解 LLM 基础与调用(1-2 天)

  • 了解 OpenAI API 或本地模型的使用方式
  • 掌握 LangChain 中 LLMChatModel 的初始化和调用
  • 理解 temperature、max_tokens 等参数的含义

阶段二:构建简单的链与 Prompt 工程(2-3 天)

  • 使用 PromptTemplate 构建可复用的提示模板
  • 掌握 LLMChain 及 LCEL 管道语法
  • 尝试多种输出解析器(StrOutputParser、JsonOutputParser)

阶段三:集成外部数据源(RAG)(3-5 天)

  • 学习 Document Loader(支持 PDF、Web、CSV 等)
  • 掌握文本分割策略及参数调优
  • 使用 Embeddings + 向量数据库构建检索器
  • 完成一个完整的文档问答 Demo

阶段四:记忆与多轮对话(2-3 天)

  • 理解不同 Memory 类型的适用场景
  • 结合 ConversationChain 打造可上下文对话的机器人
  • 尝试将记忆与 RAG 结合(如长期记忆 + 知识检索)

阶段五:自主代理开发(3-5 天)

  • 学习 Tool 的定义与使用
  • 掌握 Agent 的推理机制(ReAct、OpenAI Functions)
  • 练习创建多工具协作的代理(搜索+数据库+代码执行)

阶段六:项目实战与部署(持续)

  • 结合 Streamlit 或 Gradio 制作可交互的 Web 应用
  • 使用 LangServe 将链或代理部署为 REST API
  • 探索 LangSmith 进行调试、评估和监控
  • 深入学习回调(Callbacks)、自定义链等高阶主题

四、动手实践:五大基础 Demo

下面我们通过五个从易到难的 Demo,让你亲手感受 LangChain 的核心能力。建议在 Jupyter Notebook 或 Python 脚本中运行。

Demo 1:第一次调用 LLM

目标:用 LangChain 调用 GPT 模型,获得一段文本回答。

python 复制代码
from langchain.llms import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "your-api-key"

llm = OpenAI(model_name="gpt-3.5-turbo-instruct", temperature=0.9)
response = llm("以'月光下的海'为题,写一段50字的散文。")
print(response)

Demo 2:使用 Prompt Template 生成定制内容

目标:根据不同输入生成不同风格的产品文案。

python 复制代码
from langchain import PromptTemplate
from langchain.llms import OpenAI

llm = OpenAI(temperature=0.8)

template = """
你是一名资深{job}。
请为产品"{product}"撰写一段面向{target}的宣传文案,突出{feature}。
字数在100字以内。
"""
prompt = PromptTemplate.from_template(template)

chain = prompt | llm  # LCEL 简洁写法
result = chain.invoke({
    "job": "广告文案写手",
    "product": "智能咖啡杯",
    "target": "程序员",
    "feature": "温度保持与代码提交提醒"
})
print(result)

Demo 3:构建一个带记忆的对话链

目标:创建一个能记住上下文的多轮对话机器人。

python 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferWindowMemory
from langchain.chains import ConversationChain

chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
memory = ConversationBufferWindowMemory(k=3)  # 只保留最近3轮对话
conversation = ConversationChain(llm=chat, memory=memory)

print(conversation.predict(input="最近我睡眠很差,有什么建议吗?"))
print(conversation.predict(input="我昨天试了冥想,但总是走神。"))
print(conversation.predict(input="除了冥想还有其他方法吗?"))

你会发现第三轮回答能根据前两轮的"睡眠差"和"冥想失败"给出有针对性的建议。

Demo 4:基于 PDF 的文档问答(RAG)

目标:上传一份 PDF 文件,让模型回答关于文档的问题。

python 复制代码
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 1. 加载 PDF
loader = PyPDFLoader("company_policy.pdf")
pages = loader.load()

# 2. 切分文档
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
docs = splitter.split_documents(pages)

# 3. 构建向量库
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(docs, embeddings)

# 4. 创建问答链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model_name="gpt-3.5-turbo"),
    retriever=vectorstore.as_retriever()
)

query = "员工年假有多少天?"
answer = qa_chain.run(query)
print(answer)

这个模式可以快速应用于任何企业内部文档、产品手册或学习笔记。

Demo 5:让 AI 帮你搜索网页并计算(Agent + Tools)

目标:创建一个代理,能自动联网搜索信息并执行数学计算。

python 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent, AgentType

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

# 加载工具:搜索引擎和数学计算器
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化代理
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 让代理完成一个需要两步推理的任务
agent.run("查找詹姆斯·韦伯望远镜的主镜直径,并将其平方值告诉我。")

你会看到代理首先搜索主镜直径(6.5米),然后调用计算器工具执行 6.5²,最终返回结果。这是固定链无法做到的灵活推理。


五、常见应用场景

掌握了上述模块和实战能力后,你可以将这些能力组合到多种实际应用中:

  • 智能客服/聊天机器人:使用 Memory + LLM 实现有状态的对话,并结合 RAG 回答业务问题。
  • 企业知识库问答:将公司制度、产品文档、技术手册等构建成向量库,员工可用自然语言直接提问。
  • 数据分析助手:连接 SQL 数据库或 CSV 文件,让用户用自然语言查询并生成报表(Agent + SQL Tool)。
  • 自动化工作流:代理模式结合邮件、日历、API 等工具,执行类似"把本周的未读邮件总结成报告发送到 Slack"的复合任务。
  • 代码辅助与审查:使用 LLM 链进行代码解释、重构建议或自动化测试生成。

六、总结与展望

LangChain 最大的价值,在于它将 LLM 这种"聪明但不稳定、强大但不完整"的组件,纳入了工程化开发轨道。通过标准化的抽象,你不再需要从零处理上下文、记忆、工具调用这些棘手问题,而是可以直接站在框架的肩膀上构建可靠的应用。

学习的关键不在于死记 API,而在于理解每一个模块"解决什么问题"。 当你真正明白为什么需要提示模板、为什么需要分割文档、为什么代理要具备推理步骤时,LangChain 就变成了你手中的瑞士军刀。

未来,随着模型能力的提升和多模态的普及,LangChain 也在快速演进:LCEL 让链的构建更加声明式;LangServe 让你一分钟把链变成 API;LangSmith 则为整个流程提供了可观测性。因此,现在就是深入 LangChain 的最佳时机。

希望这篇指南能成为你探索之旅的第一张地图。动手把五个 Demo 跑通,你就能自信地说:"我知道如何用 LangChain 构建真正的 LLM 应用了。"


参考资源

相关推荐
索西引擎1 小时前
【langchain 1.0】ChromaDB 原生 API 实战:为 LangChain 向量库打造管理工具集
python·ai·langchain
晓梦林2 小时前
EVA靶场学习笔记
android·笔记·学习
牧子川2 小时前
018-tool-decorator-basics
langchain·tools
AI算法沐枫2 小时前
基于YOLO26深度学习的【果园荔枝检测与计数】系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
开发语言·人工智能·python·深度学习·qt·学习·机器学习
OBiO20132 小时前
精准靶向心肌细胞的AAV怎么选择?
学习
不羁的木木2 小时前
ArkWeb实战学习笔记02-环境搭建与基础配置
笔记·学习·harmonyos
stars-he2 小时前
SPICE编程与仿真学习笔记:从网表到瞬态分析
笔记·学习·硬件工程
江苏世纪龙科技2 小时前
科鲁兹虚拟系统破解汽车实训“三难“:工位少、组织难、评价弱
学习
小拉达不是臭老鼠2 小时前
Unity数据持久化_Json
学习·unity