最近 LLM 应用开发火了,LangChain 成了最流行的框架。这篇梳理它的核心概念,用几个例子快速上手。
LangChain 解决什么问题
直接调 OpenAI API 写一个 chatbot 很简单,但真正做应用会碰到很多问题:Prompt 管理、上下文记忆、外部工具调用、多步推理编排。LangChain 把这些封装成了标准化的组件。
核心概念:
- LLM/ChatModel:底层模型的统一接口
- PromptTemplate:Prompt 模板,支持变量替换
- Chain:将 Prompt + LLM 串联起来的调用链
- Agent:让 LLM 自主决定调用哪些工具
- Memory:对话记忆管理
- Tool:外部工具(搜索、计算器、数据库等)
PromptTemplate
from langchain.prompts import PromptTemplate
template = PromptTemplate(
input_variables=["product"],
template="给{product}写一个简短的广告语,不超过20个字。"
)
prompt = template.format(product="蓝牙耳机")
print(prompt)
# 输出:给蓝牙耳机写一个简短的广告语,不超过20个字。
LLMChain
把 Prompt 和模型组合起来:
from langchain.llms import OpenAI
from langchain.chains import LLMChain
llm = OpenAI(temperature=0.7)
chain = LLMChain(llm=llm, prompt=template)
result = chain.run("蓝牙耳机")
print(result) # 模型生成的广告语
SequentialChain
多步串联,前一步的输出作为后一步的输入:
from langchain.chains import SequentialChain
# 第一步:生成产品描述
desc_template = PromptTemplate(
input_variables=["product"],
template="用一段话描述{product}的核心卖点。"
)
desc_chain = LLMChain(llm=llm, prompt=desc_template, output_key="description")
# 第二步:基于描述生成广告语
ad_template = PromptTemplate(
input_variables=["description"],
template="基于以下产品描述,写一句20字以内的广告语:\n{description}"
)
ad_chain = LLMChain(llm=llm, prompt=ad_template, output_key="ad_copy")
# 组合
overall = SequentialChain(
chains=[desc_chain, ad_chain],
input_variables=["product"],
output_variables=["description", "ad_copy"]
)
result = overall({"product": "智能手表"})
print(result["ad_copy"])
简单 QA 链
基于文档的问答是 LangChain 最常见的用例:
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
# 1. 加载文档
loader = TextLoader("knowledge.txt")
docs = loader.load()
# 2. 切分
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# 3. 向量化并存储
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(chunks, embeddings)
# 4. 构建 QA 链
qa = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=db.as_retriever()
)
answer = qa.run("这个项目用了什么技术栈?")
print(answer)
小结
LangChain 的抽象层做得不错,能快速搭建 LLM 应用原型。但它更新非常快,API 经常变,文档也时常跟不上。建议先理解核心概念,具体 API 以官方文档为准。