← 返回首页
🦜 LangChain 0.3 · 入门教程 2025

LangChain入门完整指南2025
从零构建AI应用(含代码实战)

Chain · Agent · RAG · LangGraph · Memory,核心概念全解析 + Python代码示例 + 5个真实项目

📅 2025年5月更新(LangChain 0.3) ⏱ 阅读时长约15分钟 👁 37.4k 次阅读 💻 含完整代码

🦜 LangChain是什么?

LangChain是一个用于构建AI应用的开源框架,GitHub Star数已超过95,000,是AI应用开发领域最流行的工具之一。它解决的核心问题是:如何将LLM(大语言模型)与外部数据、工具和工作流连接起来,构建真正有用的AI应用

单独的LLM(如GPT-4、Claude)只能回答问题,但无法:访问你的私有文档、调用外部API、执行多步骤任务、记住对话历史、自主决策下一步行动。LangChain提供了实现这些能力的标准化框架。

📄 文档问答

上传PDF/Word/网页,用自然语言提问,AI基于文档回答

🤖 AI Agent

能自主使用工具(搜索/计算/API调用)完成复杂任务的AI

💬 对话机器人

有记忆、有个性、能访问知识库的智能客服/助手

🔗 工作流自动化

多步骤AI流水线:数据提取→分析→生成报告→发送邮件

⚠️ LangChain版本说明(重要)

LangChain在2024年进行了重大重构。本文基于LangChain 0.3(2024年底发布),API与旧版(0.1/0.2)有较大变化。如果你看到过时教程,注意区分版本。主要变化:langchain-core分离、LCEL表达式语言成为主推方式、LangGraph独立为首选Agent框架。

⚙️ 安装与环境配置

# 安装核心包(LangChain 0.3+)
pip install langchain langchain-openai langchain-community

# 如果使用Anthropic Claude
pip install langchain-anthropic

# RAG所需的向量数据库(选一个)
pip install chromadb         # 本地,最适合入门
pip install pinecone-client  # 云端生产环境

# PDF处理
pip install pypdf langchain-text-splitters

# LangGraph(Agent工作流)
pip install langgraph
bash
# .env 文件(不要提交到Git!)
OPENAI_API_KEY=sk-proj-xxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxx
LANGCHAIN_API_KEY=ls__xxxxxx      # LangSmith追踪(可选)
LANGCHAIN_TRACING_V2=true
.env
# Python中加载环境变量
from dotenv import load_dotenv
import os
load_dotenv()

# 验证安装
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
response = llm.invoke("Hello, LangChain!")
print(response.content)
Python

🧩 核心概念详解

1. LLM / ChatModel — 模型接口

LangChain统一了不同LLM的调用接口,切换模型只需改一行代码:

from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic

# OpenAI
llm_gpt = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)

# Anthropic Claude
llm_claude = ChatAnthropic(model="claude-3-5-sonnet-20241022")

# 调用方式完全一致(统一接口)
result = llm_gpt.invoke("用一句话解释量子纠缠")
print(result.content)

# 流式输出
for chunk in llm_claude.stream("写一首关于Python的俳句"):
    print(chunk.content, end="", flush=True)
Python

2. PromptTemplate — 动态提示词

from langchain_core.prompts import ChatPromptTemplate

# 定义带变量的提示词模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位专业的{role},用{language}回答,风格{style}。"),
    ("human", "{question}")
])

# 使用 | 管道符连接(LCEL语法)
chain = prompt | llm_gpt

result = chain.invoke({
    "role": "Python工程师",
    "language": "中文",
    "style": "简洁直接",
    "question": "如何优化列表推导式的性能?"
})
print(result.content)
Python

3. LCEL — LangChain表达式语言

LCEL(LangChain Expression Language)是0.3版本的核心,用|管道符连接组件,像搭积木一样构建复杂链:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")
parser = StrOutputParser()  # 从AIMessage提取纯文本

# 链1:生成博客大纲
outline_prompt = ChatPromptTemplate.from_template(
    "为以下主题生成5点博客大纲:{topic}"
)
outline_chain = outline_prompt | llm | parser

# 链2:基于大纲写引言
intro_prompt = ChatPromptTemplate.from_template(
    "基于以下大纲写一个引人入胜的引言(150字):\n{outline}"
)
intro_chain = intro_prompt | llm | parser

# 顺序链:大纲 → 引言(自动传递)
full_chain = outline_chain | (lambda x: {"outline": x}) | intro_chain

result = full_chain.invoke({"topic": "AI如何改变软件开发"})
print(result)
Python

4. Memory — 对话记忆

from langchain_core.chat_history import InMemoryChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

# 带历史记忆的聊天机器人
store = {}  # session_id → 对话历史

def get_session_history(session_id: str):
    if session_id not in store:
        store[session_id] = InMemoryChatMessageHistory()
    return store[session_id]

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个友好的AI助手,记住我们的对话内容。"),
    MessagesPlaceholder(variable_name="history"),  # 历史消息插入位置
    ("human", "{input}")
])

chain = prompt | ChatOpenAI(model="gpt-4o-mini") | StrOutputParser()

chat_with_memory = RunnableWithMessageHistory(
    chain,
    get_session_history,
    input_messages_key="input",
    history_messages_key="history"
)

# 同一session_id = 记住对话
config = {"configurable": {"session_id": "user_001"}}
print(chat_with_memory.invoke({"input": "我叫小明,是一名Python开发者"}, config=config))
print(chat_with_memory.invoke({"input": "我叫什么名字?"}, config=config))  # 能记住!
Python

📚 RAG:检索增强生成

RAG(Retrieval-Augmented Generation)是LangChain最常见的应用场景:将私有文档变成可以问答的知识库,解决LLM训练数据截止和私有知识问题。

📄
文档加载
PDF/Web/CSV
✂️
文本分块
Chunk Split
🔢
向量化
Embeddings
🗄️
存向量库
Chroma/Pinecone
🔍
相似度检索
Query → Chunks
LLM生成
带上下文回答
from langchain_community.document_loaders import PyPDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# ① 加载PDF文档
loader = PyPDFLoader("your_document.pdf")
docs = loader.load()

# ② 分块(每块1000字符,重叠200)
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000, chunk_overlap=200
)
chunks = splitter.split_documents(docs)

# ③ 向量化并存入ChromaDB(本地)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})  # 检索最相关4块

# ④ RAG提示词模板
rag_prompt = ChatPromptTemplate.from_template("""
基于以下上下文回答问题。如果上下文没有相关信息,说明你不知道。

上下文:
{context}

问题:{question}

请用中文回答,并引用相关段落。
""")

# ⑤ 构建RAG链
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | rag_prompt
    | ChatOpenAI(model="gpt-4o")
    | StrOutputParser()
)

# ⑥ 提问!
answer = rag_chain.invoke("这份文档的主要结论是什么?")
print(answer)
Python - PDF RAG问答

🎯 RAG优化技巧

Chunk大小:通用文档用500-1000字符,代码用500以内,书籍章节可用2000+。嵌入模型:OpenAI text-embedding-3-small性价比最高;Cohere Embed v3支持多语言(中文效果更好)。检索策略:`search_type="mmr"`(最大边际相关性)比默认相似度搜索更多样化,减少重复内容。

🤖 Agents:自主AI代理

Agent是能自主决定使用哪些工具、按什么顺序执行的AI。给Agent一个目标,它会自己规划步骤。

from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langgraph.prebuilt import create_react_agent

# 定义工具(用@tool装饰器)
@tool
def calculate(expression: str) -> str:
    """计算数学表达式。输入:数学表达式字符串,如 '2 + 3 * 4'"""
    try:
        return str(eval(expression))
    except:
        return "计算错误"

@tool
def get_weather(city: str) -> str:
    """获取城市天气信息。输入:城市名称(英文)"""
    # 真实场景:调用天气API
    weather_db = {
        "Beijing": "晴天,25°C",
        "Shanghai": "多云,22°C",
    }
    return weather_db.get(city, "暂无该城市天气数据")

@tool
def web_search(query: str) -> str:
    """搜索网络获取最新信息。"""
    # 真实场景:接入Tavily/SerpAPI
    return f"搜索结果:关于'{query}'的最新信息..."

# 创建ReAct Agent(使用LangGraph)
llm = ChatOpenAI(model="gpt-4o")
tools = [calculate, get_weather, web_search]
agent = create_react_agent(llm, tools)

# 运行Agent
result = agent.invoke({
    "messages": [("user", "北京今天天气怎么样?适合跑步吗?同时帮我算一下5km配速6分钟跑完需要多少分钟")]
})
print(result["messages"][-1].content)
# Agent会自动:①查天气 ②计算 ③综合回答
Python - ReAct Agent

🎯 Agent工具设计原则

好工具的docstring至关重要——它直接影响Agent是否会正确调用工具。要写清楚:工具做什么、输入格式要求何时该用。工具数量控制在5-10个以内,过多工具会让Agent困惑。

🕸️ LangGraph:构建复杂工作流

LangGraph是LangChain团队推出的状态机框架,用于构建有状态、可循环、多步骤的AI工作流。它是2025年构建生产级Agent的推荐方式。

from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

# 定义状态
class ResearchState(TypedDict):
    topic: str
    search_results: str
    outline: str
    draft: str
    final_article: str

# 定义各节点(工作步骤)
llm = ChatOpenAI(model="gpt-4o")

def search_node(state: ResearchState):
    """搜索相关资料"""
    # 真实场景:接入搜索API
    results = f"关于'{state['topic']}'的搜索结果:[模拟数据]"
    return {"search_results": results}

def outline_node(state: ResearchState):
    """生成文章大纲"""
    response = llm.invoke(f"基于以下资料为'{state['topic']}'生成文章大纲:\n{state['search_results']}")
    return {"outline": response.content}

def write_node(state: ResearchState):
    """根据大纲写文章"""
    response = llm.invoke(f"根据以下大纲写一篇完整文章:\n{state['outline']}")
    return {"draft": response.content}

def review_node(state: ResearchState):
    """审阅并优化"""
    response = llm.invoke(f"审阅并改进以下文章,提升流畅性和准确性:\n{state['draft']}")
    return {"final_article": response.content}

# 构建图
workflow = StateGraph(ResearchState)
workflow.add_node("search", search_node)
workflow.add_node("outline", outline_node)
workflow.add_node("write", write_node)
workflow.add_node("review", review_node)

# 定义执行顺序
workflow.set_entry_point("search")
workflow.add_edge("search", "outline")
workflow.add_edge("outline", "write")
workflow.add_edge("write", "review")
workflow.add_edge("review", END)

app = workflow.compile()

# 运行工作流
result = app.invoke({"topic": "2025年AI技术趋势"})
print(result["final_article"])
Python - LangGraph写作流水线

🛠️ 5个实战项目

📄 项目1:PDF智能问答助手 初级

上传任意PDF,用自然语言提问,获取基于文档的精确回答(不编造)。核心:RAG流程 + ChromaDB本地向量库。

应用场景:合同分析、研究论文阅读、用户手册查询

关键技术:PyPDFLoader + RecursiveCharacterTextSplitter + Chroma + OpenAI Embeddings

代码行数:约60行(参见上方RAG代码)

💬 项目2:带记忆的客服机器人 初级

记住对话历史、了解产品知识库、能处理多轮对话的智能客服。核心:Memory + RAG组合。

应用场景:电商客服、SaaS产品支持、FAQ自动化

关键技术:RunnableWithMessageHistory + 产品文档RAG + Streamlit界面

# 组合Memory + RAG的核心代码片段
qa_chain = RunnableWithMessageHistory(
    rag_chain,
    get_session_history,
    input_messages_key="question",
    history_messages_key="chat_history",
    output_messages_key="answer"
)
Python

🔍 项目3:AI网络研究Agent 中级

给定研究主题,Agent自动搜索网络、整合信息、生成结构化研究报告。

工具配置:Tavily Search(专为AI搜索优化)、Wikipedia Tool、ArXiv Paper Search

from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper

search_tool = TavilySearchResults(max_results=5)
wiki_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())

research_agent = create_react_agent(
    ChatOpenAI(model="gpt-4o"),
    [search_tool, wiki_tool],
    state_modifier="你是研究助手。综合多个来源,生成带引用的研究报告。"
)
Python

📊 项目4:SQL数据库自然语言查询 中级

用自然语言查询数据库,无需写SQL。"帮我找出上个月销量最高的10个产品" → 自动生成SQL → 执行 → 返回结果。

from langchain_community.utilities import SQLDatabase
from langchain.chains import create_sql_query_chain
from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool

db = SQLDatabase.from_uri("sqlite:///sales.db")
llm = ChatOpenAI(model="gpt-4o", temperature=0)

generate_query = create_sql_query_chain(llm, db)
execute_query = QuerySQLDataBaseTool(db=db)

sql_chain = generate_query | execute_query
result = sql_chain.invoke({"question": "2025年4月销量前10的产品是什么?"})
print(result)
Python

🤖 项目5:多Agent协作系统 高级

多个专业Agent协作完成复杂任务:Researcher Agent(搜索资料)→ Writer Agent(撰写内容)→ Editor Agent(审阅修改)→ Publisher Agent(格式化发布)。用LangGraph协调整个工作流,实现生产级内容自动化流水线。

应用场景:自动化新闻写作、SEO内容工厂、报告自动生成

核心技术:LangGraph多节点图 + 各节点独立Agent + 条件边(根据质量评分决定是否重写)

⚖️ LangChain vs LlamaIndex:怎么选?

维度 LangChain 0.3 LlamaIndex 0.12
核心定位 通用AI应用框架(Agent/Chain/Workflow) 专注数据索引与RAG的框架
RAG能力 ✅ 功能完整,但配置稍繁琐 ⭐ 最强,开箱即用,高级检索内置
Agent能力 ⭐ 最强(LangGraph支持复杂状态机) ✅ 够用,但复杂场景有限
学习曲线 中高(概念多,0.3版重构后改善) 中低(RAG场景非常直观)
文档质量 较好(官方文档大量示例) 优秀(教程清晰,案例丰富)
生态/集成 ⭐ 最多(700+集成) ✅ 丰富(300+集成)
生产稳定性 中(API变化频繁,需关注版本) 中高(相对稳定)
GitHub Stars 95,000+ 38,000+
最适合场景 复杂Agent、多步骤工作流、多工具集成 文档问答、知识库搜索、RAG优化

🎯 选择建议

选LangChain:需要构建复杂Agent、多工具集成、LangGraph工作流、生态集成广度优先。选LlamaIndex:核心场景是RAG/文档检索、需要高级检索策略(HyDE、Auto-merging)、团队偏好简洁API。两者都用:完全可以!用LlamaIndex做数据索引层,LangChain做Agent编排层,是常见的生产架构。

🗺️ 学习路径与进阶资源

4周学习计划

  1. 第1周:基础 — 安装配置 → LLM调用 → PromptTemplate → LCEL基础链 → 做一个简单问答机器人
  2. 第2周:RAG — 文档加载 → 文本分块 → 向量嵌入 → ChromaDB → 完整RAG问答系统
  3. 第3周:Agent — 工具定义 → ReAct Agent → LangGraph基础 → 带工具的对话Agent
  4. 第4周:生产化 — LangSmith调试 → 错误处理 → 流式输出 → Streamlit/FastAPI部署 → LangGraph复杂工作流

推荐学习资源

常见错误与解决方案

🔗 相关教程

Hugging Face入门指南 Llama 3本地部署指南 Claude API使用指南 n8n AI自动化指南 最佳AI编程工具