LangChain AI应用开发入门教程
零基础掌握LangChain框架,从核心概念到实战项目,快速构建大模型驱动的AI应用。
一、什么是LangChain?
1.1 LangChain简介
LangChain是一个用于构建大语言模型(LLM)应用的开源框架。它提供了一套工具、组件和接口,帮助开发者将大模型与外部数据源、工具和服务连接起来,从而构建功能强大的AI应用。
1.2 LangChain能做什么?
- 智能问答系统:基于文档的RAG问答
- 聊天机器人:带记忆和工具调用的对话系统
- 代码生成助手:理解需求并生成代码
- 数据分析Agent:自动查询数据库并生成报告
- 文档处理流水线:自动摘要、翻译、格式转换
1.3 LangChain生态
| 组件 | 作用 | 说明 |
|---|---|---|
| LangChain | 核心框架 | 链、Agent、工具等核心抽象 |
| LangChain-Community | 社区集成 | 第三方模型和工具的集成 |
| LangChain-OpenAI | OpenAI集成 | GPT模型和Embeddings |
| LangSmith | 监控调试 | 应用追踪和评估平台 |
| LangGraph | Agent编排 | 基于图的Agent工作流 |
| LangServe | 部署服务 | 将Chain部署为REST API |
二、核心概念
2.1 模型(Models)
LangChain支持多种大模型:
# OpenAI
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0.7)
# 本地模型(Ollama)
from langchain_ollama import ChatOllama
llm = ChatOllama(model="qwen2.5:7b")
# 调用模型
response = llm.invoke("什么是LangChain?")
print(response.content)
2.2 提示词模板(Prompt Templates)
from langchain.prompts import ChatPromptTemplate
# 简单模板
template = ChatPromptTemplate.from_template(
"你是一个{role}。请用{style}的风格回答以下问题:\n\n{question}"
)
prompt = template.invoke({
"role": "Python专家",
"style": "简洁明了",
"question": "什么是装饰器?"
})
response = llm.invoke(prompt)
2.3 输出解析器(Output Parsers)
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
class MovieReview(BaseModel):
title: str = Field(description="电影名称")
rating: float = Field(description="评分,1-10")
summary: str = Field(description="一句话点评")
parser = JsonOutputParser(pydantic_object=MovieReview)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个影评人。{format_instructions}"),
("human", "请评价电影《流浪地球》")
])
chain = prompt | llm | parser
result = chain.invoke({"format_instructions": parser.get_format_instructions()})
print(result) # {'title': '流浪地球', 'rating': 8.5, 'summary': '...'}
2.4 链(LCEL表达式)
LangChain使用LCEL(LangChain Expression Language)来组合组件:
from langchain_core.output_parsers import StrOutputParser
# 使用 | 运算符组合
chain = prompt | llm | StrOutputParser()
# 调用
result = chain.invoke({"question": "什么是AI?"})
三、RAG实战:文档问答系统
3.1 完整代码
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain.prompts import ChatPromptTemplate
# 1. 加载文档
loader = DirectoryLoader(
"./docs",
glob="**/*.txt",
loader_cls=TextLoader,
loader_kwargs={"encoding": "utf-8"}
)
documents = loader.load()
# 2. 分块
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=150)
chunks = splitter.split_documents(documents)
# 3. 向量化
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 5. 创建问答链
system_prompt = """基于以下检索到的上下文回答问题。
如果上下文中没有足够信息,请说明无法回答。
上下文:{context}"""
prompt = ChatPromptTemplate.from_messages([
("system", system_prompt),
("human", "{input}")
])
document_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, document_chain)
# 6. 提问
result = rag_chain.invoke({"input": "公司的退款政策是什么?"})
print(result["answer"])
四、Agent实战:工具调用
4.1 什么是Agent?
Agent是能够自主决策、选择工具并执行任务的AI系统。它根据用户输入,决定使用哪些工具,获取结果后继续推理。
4.2 创建工具
from langchain_core.tools import tool
import requests
@tool
def search_weather(city: str) -> str:
"""查询指定城市的当前天气信息"""
# 使用wttr.in免费API
response = requests.get(f"https://wttr.in/{city}?format=3")
return response.text
@tool
def calculate(expression: str) -> str:
"""计算数学表达式,例如:2+3*4"""
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"计算错误: {e}"
@tool
def get_current_time() -> str:
"""获取当前时间"""
from datetime import datetime
return datetime.now().strftime("%Y-%m-%d %H:%M:%S")
4.3 创建Agent
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# 工具列表
tools = [search_weather, calculate, get_current_time]
# 创建ReAct Agent
agent = create_react_agent(llm, tools)
# 使用
result = agent.invoke({
"messages": [("human", "现在几点了?北京天气怎么样?")]
})
for msg in result["messages"]:
print(f"{msg.type}: {msg.content}")
五、记忆管理:多轮对话
5.1 对话历史管理
from langchain_core.messages import HumanMessage, AIMessage
# 维护对话历史
chat_history = []
def chat(user_input):
# 添加用户消息
chat_history.append(HumanMessage(content=user_input))
# 带历史的调用
response = llm.invoke(chat_history)
# 添加AI回复
chat_history.append(AIMessage(content=response.content))
return response.content
# 多轮对话
print(chat("你好,我叫张三"))
print(chat("你还记得我叫什么名字吗?"))
print(chat("帮我写一首关于春天的诗"))
5.2 使用Memory组件
from langchain.memory import ConversationBufferWindowMemory
memory = ConversationBufferWindowMemory(
k=10, # 保留最近10轮对话
return_messages=True
)
六、LangGraph:复杂Agent工作流
6.1 什么是LangGraph?
LangGraph是LangChain团队开发的Agent编排框架,使用图结构来定义复杂的多步骤工作流。
6.2 简单示例
from langgraph.graph import StateGraph, MessagesState, START, END
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
# 定义节点
def chatbot(state: MessagesState):
response = llm.invoke(state["messages"])
return {"messages": [response]}
# 构建图
graph = StateGraph(MessagesState)
graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", END)
app = graph.compile()
# 使用
result = app.invoke({"messages": [("human", "Hello!")]})
print(result["messages"][-1].content)
七、部署与生产建议
7.1 使用LangServe部署
from fastapi import FastAPI
from langserve import add_routes
from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
app = FastAPI()
chain = (
ChatPromptTemplate.from_template("告诉我关于{topic}的知识")
| ChatOpenAI()
| StrOutputParser()
)
add_routes(app, chain, path="/knowledge")
# 运行: uvicorn app:app --host 0.0.0.0 --port 8000
7.2 生产环境注意事项
- 速率限制:为LLM调用添加限流
- 错误处理:实现重试和降级策略
- 缓存:对相同查询缓存结果
- 监控:使用LangSmith追踪调用链路
- 安全:输入验证、Prompt注入防护
八、总结
通过本教程,你应该掌握了:
- ✅ LangChain的核心概念(模型、Prompt、输出解析器、链)
- ✅ RAG文档问答系统的构建
- ✅ Agent工具调用的实现
- ✅ 多轮对话的记忆管理
- ✅ LangGraph的Agent编排
- ✅ 应用部署的最佳实践
下一步学习建议:
- 探索更多文档加载器(PDF、Word、网页)
- 学习LangSmith进行应用监控
- 尝试构建多Agent协作系统
- 了解Prompt工程最佳实践
本教程内容基于LangChain官方文档和开源社区整理,仅供学习参考。