LangChain 框架教程¶
概述¶
LangChain是构建大语言模型应用的开源框架,提供模块化组件和编排能力,是构建RAG、Agent等应用的首选框架。
安装配置¶
# 基础安装
pip install langchain
# OpenAI集成
pip install langchain-openai
# 社区组件
pip install langchain-community
# 向量数据库
pip install faiss-cpu
# 文档加载器
pip install pypdf unstructured
核心概念¶
1. Models(模型)¶
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
# 聊天模型
llm = ChatOpenAI(
model="gpt-5.5",
temperature=0.7,
api_key="your-api-key"
)
# 嵌入模型
embeddings = OpenAIEmbeddings()
# 调用模型
response = llm.invoke("你好,请介绍一下自己")
print(response.content)
2. Prompts(提示词)¶
from langchain.prompts import ChatPromptTemplate
# 简单模板
prompt = ChatPromptTemplate.from_template(
"你是一个{role}。请用{style}风格回答:{question}"
)
# 创建消息
messages = prompt.invoke({
"role": "专家",
"style": "简洁专业",
"question": "什么是机器学习?"
})
# 格式化输出
response = llm.invoke(messages)
print(response.content)
3. Chains(链)¶
from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate
# 创建链
prompt = ChatPromptTemplate.from_template(
"请为{product}写一段营销文案"
)
chain = LLMChain(llm=llm, prompt=prompt)
# 运行链
result = chain.invoke({"product": "智能手表"})
print(result['text'])
4. Memory(记忆)¶
from langchain.memory import ConversationBufferMemory, ConversationSummaryMemory
# 对话缓冲区
memory = ConversationBufferMemory()
memory.save_context(
{"input": "你好"},
{"output": "你好!有什么可以帮你的吗?"}
)
# 对话摘要
summary_memory = ConversationSummaryMemory(llm=llm)
5. Retrievers(检索器)¶
from langchain.retrievers import VectorStoreRetriever
# 创建检索器
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 3}
)
# 检索文档
docs = retriever.invoke("什么是深度学习?")
RAG链构建¶
基础RAG¶
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
# 1. 创建向量数据库
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
docs = text_splitter.split_documents(raw_documents)
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
# 2. 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 3. 定义Prompt
prompt = PromptTemplate.from_template(
"""基于以下上下文回答问题。如果不确定,请说明。
上下文:
{context}
问题:{question}
回答:"""
)
# 4. 创建QA链
qa_chain = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-5.5"),
chain_type="stuff",
retriever=retriever,
chain_type_kwargs={"prompt": prompt}
)
# 5. 查询
result = qa_chain.invoke({"query": "什么是机器学习?"})
print(result['result'])
带引用的RAG¶
from langchain.chains import RetrievalQAWithSourcesChain
# 带来源的QA链
qa_chain = RetrievalQAWithSourcesChain.from_chain_type(
llm=ChatOpenAI(model="gpt-5.5"),
chain_type="stuff",
retriever=retriever
)
result = qa_chain.invoke({"query": "什么是深度学习?"})
print(f"回答: {result['answer']}")
print(f"来源: {result['sources']}")
Agent构建¶
基础Agent¶
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.tools import tool
from langchain.prompts import ChatPromptTemplate
# 定义工具
@tool
def search(query: str) -> str:
"""搜索互联网获取信息"""
return f"搜索结果: {query}的相关信息..."
@tool
def calculator(expression: str) -> str:
"""执行数学计算"""
return str(eval(expression))
# 创建Agent
tools = [search, calculator]
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有用的助手,可以使用工具帮助用户。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 运行Agent
result = executor.invoke({"input": "搜索今天的天气,然后计算25度是多少华氏度"})
print(result['output'])
ReAct Agent¶
from langchain.agents import AgentExecutor, create_react_agent
from langchain.prompts import PromptTemplate
# ReAct提示模板
react_prompt = PromptTemplate.from_template("""
Answer the following questions as best you can. You have access to the following tools:
{tools}
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
""")
# 创建ReAct Agent
agent = create_react_agent(llm, tools, react_prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = executor.invoke({"input": "北京今天天气如何?"})
链的组合¶
Sequential Chain¶
from langchain.chains import SequentialChain, LLMChain
# 链1:生成标题
title_prompt = LLMChain.from_string(
llm=llm,
template="为以下内容生成一个吸引人的标题:{content}"
)
# 链2:生成摘要
summary_prompt = LLMChain.from_string(
llm=llm,
template="为以下标题写一段100字的摘要:{title}"
)
# 顺序链
chain = SequentialChain(
chains=[title_prompt, summary_prompt],
input_variables=["content"],
output_variables=["title", "summary"],
verbose=True
)
result = chain.invoke({"content": "人工智能正在改变世界..."})
Router Chain¶
from langchain.chains import MultiRouteChain, RouterChain
# 路由链
router_prompt = RouterChain.from_equalizer(
llm=llm,
input_key="question",
default_chain=default_chain,
routing_chains={
"math": math_chain,
"code": code_chain,
"general": general_chain
}
)
result = router_prompt.invoke({"question": "1+1等于多少?"})
实战示例:智能客服¶
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate
import gradio as gr
class CustomerServiceBot:
def __init__(self, faq_docs):
self.setup_chain(faq_docs)
def setup_chain(self, docs):
# 创建向量库
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)
# 创建记忆
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
# 定义Prompt
prompt = PromptTemplate.from_template("""
你是一个专业的客服助手。基于以下上下文和对话历史回答问题。
上下文:{context}
对话历史:
{chat_history}
当前问题:{question}
请用友好、专业的语气回答。如果不确定,请说明。
""")
# 创建对话检索链
self.chain = ConversationalRetrievalChain.from_llm(
llm=ChatOpenAI(model="gpt-5.5"),
retriever=vectorstore.as_retriever(),
memory=memory,
combine_docs_chain_kwargs={"prompt": prompt}
)
def chat(self, question):
result = self.chain.invoke({"question": question})
return result['answer']
# 创建聊天界面
bot = CustomerServiceBot(faq_documents)
with gr.Blocks(title="智能客服") as demo:
gr.Markdown("# 智能客服系统")
chatbot = gr.Chatbot()
msg = gr.Textbox(label="请输入问题")
def respond(message, chat_history):
response = bot.chat(message)
chat_history.append((message, response))
return "", chat_history
msg.submit(respond, [msg, chatbot], [msg, chatbot])
demo.launch()
常用组件¶
文档加载器¶
from langchain_community.document_loaders import (
PyPDFLoader, # PDF
TextLoader, # 文本
UnstructuredMarkdownLoader, # Markdown
CSVLoader, # CSV
JSONLoader, # JSON
WebBaseLoader, # 网页
NotionDirectoryLoader # Notion
)
文本分割器¶
from langchain.text_splitter import (
RecursiveCharacterTextSplitter, # 递归分割
CharacterTextSplitter, # 字符分割
TokenTextSplitter # Token分割
)
向量数据库¶
from langchain_community.vectorstores import (
FAISS, # Facebook
Chroma, # 轻量级
Pinecone, # 云服务
Weaviate, # GraphQL
Milvus # 分布式
)
学习资源¶
# 官方文档
- LangChain文档:https://python.langchain.com
- LangSmith:https://smith.langchain.com
- LangGraph:https://langchain-ai.github.io/langgraph/
# 示例项目
- LangChain Cookbook
- LangChain Templates
下一步学习¶
- RAG检索增强生成教程 - 构建RAG系统
- AI Agent智能体教程 - 构建Agent
- 向量数据库教程 - 深入向量数据库