LangChain 入门教程:AI 应用开发利器
LangChain 是目前最热门的 AI 应用开发框架,它让开发者能够快速构建基于大语言模型的应用。无论你是想做 RAG 知识库问答、智能对话机器人,还是自动化 Agent,LangChain 都能帮你事半功倍。本文将从零开始,带你掌握 LangChain 的核心概念和实战技巧。
一、核心概念
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它的核心理念是将各种组件"链式"组合,构建复杂的 AI 应用。想象一下,你不需要从零开始写代码调用 API、处理上下文、管理对话历史,LangChain 已经帮你封装好了这一切。
1.1 为什么选择 LangChain?
在大模型时代,开发者面临几个核心挑战:
- 模型切换困难:从 OpenAI 切换到 Claude,需要改写大量代码
- 上下文管理繁琐:手动管理对话历史、token 计数让人头大
- 提示词工程复杂:写一个好的 prompt 需要反复调试
- 缺乏工具调用能力:模型本身无法联网、无法访问数据库
LangChain 通过模块化设计,优雅地解决了这些问题。它的设计哲学是:组件可替换、链路可组合、扩展性强。
1.2 架构概览
LangChain 的架构可以分为六个核心模块:
┌─────────────────────────────────────────────┐ │ 应用层 │ │ (Chatbots, QA Systems, Agents) │ ├─────────────────────────────────────────────┤ │ Chains │ │ (组合多个组件形成工作流) │ ├─────────────────────────────────────────────┤ │ Prompts │ Memory │ Agents │ │ (提示词管理) │ (对话记忆) │ (智能代理) │ ├─────────────────────────────────────────────┤ │ LLMs / Chat Models │ │ (OpenAI, Claude, 文心一言等) │ ├─────────────────────────────────────────────┤ │ Document Loaders & Embeddings │ │ (文档加载、向量化) │ └─────────────────────────────────────────────┘
二、核心组件详解
2.1 Model I/O:与模型交互
这是 LangChain 最基础的模块,包含了 LLM(大语言模型)和 Chat Model(聊天模型)两种接口。
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
# 初始化聊天模型
# temperature 控制创造性,0 表示最确定性输出
chat = ChatOpenAI(
model="gpt-4-turbo-preview",
temperature=0.7,
api_key="your-api-key"
)
# 构造消息
messages = [
SystemMessage(content="你是一个专业的 Python 开发工程师"),
HumanMessage(content="解释一下什么是装饰器?")
]
# 调用模型
response = chat.invoke(messages)
print(response.content)
关键点:ChatOpenAI 的 temperature 参数非常重要。0-0.3 适合事实性任务(如代码生成),0.7-1.0 适合创意性任务(如文案生成)。
2.2 Prompts:提示词工程
LangChain 提供了强大的提示词模板功能,让你的 prompt 可复用、可组合。
from langchain_core.prompts import ChatPromptTemplate
# 基础模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个{role},用{style}的语气回答问题"),
("user", "{input}")
])
# 格式化模板
formatted = prompt.format(
role="资深架构师",
style="专业且幽默",
input="微服务架构有什么优缺点?"
)
print(formatted)
2.3 Chains:链式调用
Chain 是 LangChain 的核心概念,它将多个组件串联起来,形成一个完整的工作流。
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 定义组件
model = ChatOpenAI(model="gpt-4-turbo-preview")
prompt = ChatPromptTemplate.from_template("给{product}起一个{style}的中文名字")
output_parser = StrOutputParser()
# 构建链 - 使用 LCEL (LangChain Expression Language)
chain = prompt | model | output_parser
# 调用链
result = chain.invoke({"product": "AI助手", "style": "科技感"})
print(result)
2.4 Memory:对话记忆
默认情况下,大模型是无状态的,每次调用都是独立的。Memory 让模型能够记住之前的对话内容。
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]
# 创建带记忆的链
model = ChatOpenAI(model="gpt-4-turbo-preview")
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的助手"),
("placeholder", "{chat_history}"),
("user", "{input}")
])
chain = prompt | model
# 包装成带记忆的链
chain_with_history = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="input",
history_messages_key="chat_history"
)
# 测试多轮对话
chain_with_history.invoke(
{"input": "我叫小明"},
config={"configurable": {"session_id": "user-001"}}
)
chain_with_history.invoke(
{"input": "我叫什么名字?"},
config={"configurable": {"session_id": "user-001"}}
)
2.5 Agents:智能代理
Agent 是 LangChain 最强大的功能,它能让模型自主决定调用哪些工具。
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.tools import tool
# 定义工具
@tool
def multiply(a: int, b: int) -> int:
"""乘法运算,计算 a * b"""
return a * b
@tool
def get_weather(city: str) -> str:
"""查询城市天气"""
weather_data = {
"北京": "晴天,温度 15°C",
"上海": "多云,温度 18°C",
"深圳": "小雨,温度 22°C"
}
return weather_data.get(city, "未找到该城市天气信息")
# 创建 Agent
tools = [multiply, get_weather]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的助手"),
("placeholder", "{chat_history}"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 测试 Agent
result = agent_executor.invoke({"input": "北京今天的天气怎么样?"})
print(result["output"])
三、实战案例:构建 RAG 知识库问答系统
RAG(Retrieval Augmented Generation)是目前最流行的 AI 应用模式,它结合了检索和生成。
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.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
# 第一步:加载文档
loader = PyPDFLoader("knowledge_base.pdf")
documents = loader.load()
# 第二步:文档分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
splits = text_splitter.split_documents(documents)
# 第三步:向量化存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 第四步:创建检索器
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 4}
)
# 第五步:构建 RAG 链
model = ChatOpenAI(model="gpt-4-turbo-preview")
system_prompt = """你是一个知识库问答助手。
使用以下检索到的上下文来回答问题。
如果不知道答案,就说不知道,不要编造。
上下文:
{context}"""
prompt = ChatPromptTemplate.from_messages([
("system", system_prompt),
("user", "{input}")
])
question_answer_chain = create_stuff_documents_chain(model, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
# 第六步:问答
response = rag_chain.invoke({"input": "公司的年假政策是什么?"})
print(response["answer"])
四、最佳实践与踩坑指南
4.1 性能优化
- 缓存 Embedding:向量化是耗时的操作,使用 Chroma 或 FAISS 持久化存储
- 批处理请求:大量文档时,使用批量 embedding 接口
- 选择合适的模型:简单任务用 gpt-3.5-turbo,复杂推理用 gpt-4
4.2 常见错误
# 设置 API Key import os os.environ["OPENAI_API_KEY"] = "sk-xxx" # temperature 设置建议 # 代码生成:temperature=0 # 创意写作:temperature=0.7-1.0
总结
LangChain 作为 AI 应用开发的首选框架,极大地降低了开发门槛。通过本文的学习,你已经掌握了:
- 核心概念:Models、Prompts、Chains、Memory、Agents
- LCEL 语法:优雅地组合各个组件
- RAG 实战:构建知识库问答系统
- 最佳实践:避免常见坑,提升性能
AI 时代已经到来,LangChain 是你通往 AI 应用开发的最佳捷径。开始动手实践吧,从一个小项目开始,逐步深入。记住:纸上得来终觉浅,绝知此事要躬行。
相关资源:
- LangChain 官方文档:https://python.langchain.com
- LangSmith 调试平台:https://www.langchain.com/langsmith
本文链接:https://www.kkkliao.cn/?id=974 转载需授权!
版权声明:本文由廖万里的博客发布,如需转载请注明出处。



手机流量卡
免费领卡
号卡合伙人
产品服务
关于本站
