LangChain 教程:AI Agent 开发入门实战
LangChain 教程:从零开始学习 AI Agent 开发。本文教你使用 LangChain 构建对话链、工具调用和 RAG 应用,含完整代码示例和最佳实践。
这篇教程适合谁
你会 Python,想用代码(而不是低代码平台)搭建 LLM 应用。LangChain 是目前生态最完整的 LLM 应用框架,但它的学习曲线也最陡——本文帮你跳过官方文档的弯路,直接看核心用法。
不适合:零编程基础的读者。不想写代码的,看 Dify 教程 或 Coze 教程。 最终产物:能用 LangChain 构建对话链、带记忆的对话、Agent 工具调用和 RAG 应用。环境假设
- Python 3.9+
- LangChain 0.2+(0.1.x 的 import 路径完全不同,迁移指南见官方文档)
- LLM API Key(OpenAI 或其他)
- 以当前常见版本为准,具体 API 以官方最新文档为准
安装
pip install langchain langchain-openai langchain-community
踩坑点:LangChain 0.2 把很多东西拆到了 langchain-community 包里。如果你从 0.1 升级上来,import 报错大概率是包没装全。先 pip install langchain-community 试试。
import os
os.environ["OPENAI_API_KEY"] = "your-api-key" # 生产用环境变量
基础对话链(Chain)
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的 AI 学习助手,用简洁清晰的中文回答问题。"),
("user", "{question}")
])
# LCEL 语法:用 | 把组件串起来,类似 Unix 管道
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"question": "什么是 AI Agent?"})
print(result)
为什么用 LCEL(| 语法):LangChain 0.2 推崇这种管道式写法,比以前的 LLMChain(llm=..., prompt=...) 更直观。prompt | llm | StrOutputParser() 就是"格式化提示词 → 调模型 → 提取文本"。
带记忆的对话
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
store = {}
def get_session_history(session_id: str):
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
prompt_with_history = ChatPromptTemplate.from_messages([
("system", "你是一个 AI 助手。请根据对话历史回答问题。"),
("placeholder", "{history}"),
("user", "{input}")
])
chain_with_history = RunnableWithMessageHistory(
prompt_with_history | llm | StrOutputParser(),
get_session_history,
input_messages_key="input",
history_messages_key="history"
)
config = {"configurable": {"session_id": "user-1"}}
r1 = chain_with_history.invoke({"input": "你好,我叫小明"}, config=config)
print(r1)
r2 = chain_with_history.invoke({"input": "我叫什么名字?"}, config=config)
print(r2) # 能记住用户叫小明
踩坑点:上面的 store 是内存字典,进程重启就没了。生产环境要换成 Redis 或数据库存储。另外,历史消息越长 token 消耗越大——实际项目里要做历史截断(比如只保留最近 20 条)。
工具调用(Agent)
from langchain.agents import tool, AgentExecutor, create_openai_tools_agent
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
@tool
def search_web(query: str) -> str:
"""搜索互联网获取最新信息。"""
# 生产环境接入真实搜索 API(Tavily、SerpAPI 等)
return f"搜索结果:{query} 的最新信息..."
@tool
def calculate(expression: str) -> str:
"""计算数学表达式。"""
try:
result = eval(expression)
return f"计算结果:{result}"
except Exception as e:
return f"计算错误:{e}"
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,可以使用工具来帮助用户。"),
MessagesPlaceholder(variable_name="chat_history", optional=True),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad")
])
agent = create_openai_tools_agent(llm, [search_web, calculate], prompt)
agent_executor = AgentExecutor(agent=agent, tools=[search_web, calculate], verbose=True)
result = agent_executor.invoke({"input": "帮我搜索一下 2026 年最新的 AI 技术趋势"})
print(result["output"])
docstring 就是工具说明书:LLM 靠 @tool 下面的 docstring 决定什么时候调这个工具。写得不清楚,LLM 就选错。详见 AI Agent 开发教程。
RAG 集成
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader
loader = TextLoader("knowledge.txt", encoding="utf-8")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)
from langchain.schema.runnable import RunnablePassthrough
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
rag_prompt = ChatPromptTemplate.from_template(
"根据以下内容回答问题:\n{context}\n\n问题:{question}"
)
rag_chain = (
{"context": retriever, "question": RunnablePassthrough()}
| rag_prompt
| llm
| StrOutputParser()
)
answer = rag_chain.invoke("RAG 的工作原理是什么?")
print(answer)
分块参数怎么选:chunk_size=500 对中文文档偏大,建议 300-500。chunk_overlap=50 是防止一句话被切成两块。更详细的 RAG 调优参考 RAG 教程。
LangChain 的取舍
什么时候用 LangChain:- 需要快速原型验证
- 需要对接多种 LLM(统一接口切换方便)
- 需要 Agent / Tool 能力
- 简单的 API 调用——直接用 OpenAI/Anthropic SDK 更轻量
- 高性能生产系统——LangChain 的抽象层有性能开销
- 只做 RAG——LlamaIndex 更专注
常见问题
Import Error
LangChain 版本更新频繁,API 变化大。报 import 错误先查 langchain-community 包装了没有。
API 调用超时
设合理的 timeout 参数,加重试。使用海外 API 时注意网络稳定性,参考 海外 AI 工具使用指南。
Token 超限
用 tiktoken 算 token 数,必要时截断或分段。
进阶学习
- 搭建 RAG 系统:RAG 教程
- Agent 的原理:AI Agent 是什么
- 低代码替代方案:Dify 教程
---
本文最后更新于 2026-07-08。代码示例基于 LangChain 0.2+,请根据最新版本调整。保障 API 调用稳定性
调用 OpenAI、Anthropic 等海外 API 时,网络波动可能导致请求超时或失败。稳定的网络环境有助于提升开发效率。
⚠️ 请遵守所在地的法律法规和服务条款。使用 AI API 时请遵守各平台的使用政策。
了解安全上网方案 →常见问题
相关推荐
AI Agent 是什么?从实际工作场景理解智能体
AI Agent 是什么?从实际开发经验出发,解释 Agent 的工作原理、与普通 AI 的区别、主流框架选择,以及落地时的真实边界。
RAG 教程:从零搭建检索增强生成系统
RAG 教程:从零开始搭建检索增强生成系统。本文使用 LangChain 和 Chroma 向量数据库,手把手教你实现一个基于私有知识库的 AI 问答系统。
AI Agent 开发教程:从概念到第一个 Agent
AI Agent 开发教程:从理解 Agent 架构到动手实现第一个智能 Agent。本文使用 Python + LangChain 构建一个能搜索网页、执行代码的 Agent。
获取更多 AI 内容
订阅更新,第一时间获取新教程和工具推荐。