在现代 AI 应用开发中释放 LangChain 的潜力
Updated on
自 2023 年以来,LangChain 发生了巨大的演进。从最初的一个简单 LLM 封装器,成长为一个支持如下能力的完整 AI 应用框架:
- LCEL (LangChain Expression Language)
- Runnables
- LangGraph(有状态、可靠的 agent 工作流)
- OpenAI function calling
- Tool calling
- 高级记忆系统(memory)
- 用于 RAG 的现代文档处理流水线
本更新指南将为你提供一个面向 2025 的 LangChain 全景认知,帮助你结合最新 OpenAI API 构建真正可落地的 LLM 应用。
LangChain 的基础概念
🌟 当下的 LangChain:一个现代 AI 应用框架
现代 LLM 应用远远不止“给文本、拿结果”这么简单,它们通常需要:
- 工具调用(tools)
- 对话记忆(memory)
- 文档检索(retrieval)
- 状态管理(state management)
- 多步骤工作流(multi-step workflows)
- 错误处理(error handling)
- 可重复性与确定性(determinism)
LangChain 通过 Runnables、LCEL 和 LangGraph 提供这些基础构件,使开发者能够构建可靠的 agent 系统和工作流系统。
🔗 使用 LCEL 构建顺序工作流(更新版)
LCEL 让你可以像组合函数一样组合 LLM pipeline:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
model = ChatOpenAI(model="gpt-4.1")
prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant."),
("user", "{question}")
])
chain = prompt | model
chain.invoke({"question": "Explain LangChain LCEL in one paragraph."})这取代了早期的 “SequentialChain” 等老 API。
LangChain 入门
📦 安装
pip install langchain langchain-openai langgraph faiss-cpu如果要使用 LangGraph:
pip install langgraph💬 LLM 与 Prompt Templates(现代 API)
LangChain 现在推荐使用 ChatModel 接口:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4.1", temperature=0)Prompt Template 依然很强大:
from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_template(
"Summarize the following text:\n\n{text}"
)⛓️ 使用 LCEL 构建 Chains(取代旧 “Chains API”)
通过 LCEL 构建 chain:
chain = prompt | llm⚙️ Tools 与 Agents(2025 最佳实践)
旧的 initialize_agent、“ReAct agent” 以及 MiniChain 风格已经不再推荐使用。
目前推荐的做法是:
用 LangGraph 来实现 agent 工作流
LangGraph 提供:
- 状态管理(state management)
- 重试策略(retry policies)
- 确定性的边(deterministic edges)
- tool calling
- 持久化(persistence)
示例 agent 节点:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4.1",
temperature=0,
streaming=False
)Tool calling 示例:
from langchain_core.tools import tool
@tool
def search_wiki(query: str):
"""Search Wikipedia topics."""
import wikipedia
return wikipedia.summary(query)
tools = [search_wiki]与 LLM 进行连接:
result = llm.invoke({
"messages": [
{"role": "user", "content": "Find me information about LangChain."}
],
"tools": tools
})🧠 Memory
LangChain 的 memory 目前支持:
- BufferMemory
- ConversationSummaryMemory
- SQL / Redis 后端的 memory
- 基于图状态的 memory(LangGraph)
示例:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
memory.save_context(
{"input": "Hello"},
{"output": "Hi, how can I help?"}
)
memory.load_memory_variables({})📄 数据加载、文本切分与检索(现代 RAG)
下面是使用 FAISS + OpenAI embeddings 的更新示例:
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
loader = TextLoader("./state_of_the_union.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000)
chunks = splitter.split_documents(docs)
emb = OpenAIEmbeddings()
db = FAISS.from_documents(chunks, emb)
query = "What policies did the president highlight?"
results = db.similarity_search(query)🚀 端到端示例
下面是一个完整可运行的 LangChain pipeline,使用 LCEL、最新 OpenAI API 与检索能力:
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
# 1. 加载 LLM
llm = ChatOpenAI(model="gpt-4.1", temperature=0)
# 2. 加载并切分文档
loader = TextLoader("./state_of_the_union.txt")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=800)
chunks = splitter.split_documents(docs)
# 3. 构建向量库
db = FAISS.from_documents(chunks, OpenAIEmbeddings())
# 4. 构建检索链
prompt = ChatPromptTemplate.from_messages([
("system", "Answer based on the provided context."),
("user", "{question}\n\nContext: {context}")
])
def retriever(q):
results = db.similarity_search(q, k=3)
return "\n".join([r.page_content for r in results])
chain = (
{
"question": lambda x: x,
"context": lambda x: retriever(x)
}
| prompt
| llm
)
# 5. 端到端运行
response = chain.invoke("What economic topics were mentioned?")
print(response.content)总结
到了 2025 年,LangChain 已经不再只是一个工具集,而是一个面向以下场景的完整 AI 应用框架:
- agents
- workflows
- retrieval 系统
- tool 集成
- 具备丰富记忆能力的对话应用
借助 LCEL、Runnables 与 LangGraph,你可以搭建出 生产级 AI 应用,并保持架构的整洁、可维护与可扩展。
你可以将本指南作为更新后的基础知识,用来构建更强大、更具竞争力的 AI 应用。