LangChain 入门:从 0 到 1 搞懂 LLM 应用开发框架
一、先搞懂:LangChain 到底是干嘛的?
- 给它准备 “业务手册”(连接知识库),让它懂公司的专业知识;
- 帮它记 “工作笔记”(管理对话记忆),让它不忘记之前聊过的内容;
- 教它用 “办公工具”(调用外部系统),让它能完成查订单、算数据这类实际任务;
- 给它定 “工作流程”(编排任务链),让它按步骤把复杂事情做对。
二、核心功能:LangChain 能帮你解决哪些痛点?
- 简单场景用「ConversationBufferMemory」:直接存完整对话历史,比如智能客服记用户之前提过的 “订单号 12345”;
- 复杂场景用「BufferWindowMemory」:只记最近几轮对话,避免信息太多卡壳,比如聊天机器人只需要记住用户最后 3 句话;
- 专业场景用「EntityMemory」:专门记关键信息(比如用户的姓名、偏好、需求),比如理财顾问记住 “用户风险承受能力低”。
from langchain.memory import ConversationBufferMemory from langchain.chains import ConversationChain from langchain.llms import OpenAI # 初始化记忆模块,存对话历史 memory = ConversationBufferMemory() # 把LLM和记忆模块组合成对话链 conversation_chain = ConversationChain( llm=OpenAI(api_key="你的API密钥"), memory=memory ) # 第一次对话 print(conversation_chain.run("我想买一款适合办公的笔记本,预算5000元")) # 第二次对话,AI会记住“预算5000元” print(conversation_chain.run("有没有同价位的平板推荐?"))
- 加载文档:把你的产品 PDF、Word 文档上传,LangChain 会自动读取内容;
- 拆分文档:把长文档切成小片段(比如每段 200 字),方便 LLM 处理;
- 存储向量:把片段转成 “向量”(可以理解成 “语义标签”),存在向量数据库里;
- 检索回答:用户提问时,先从向量库找最相关的片段,再让 LLM 总结回答。
from langchain.document_loaders import PyPDFLoader from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings from langchain.chains import RetrievalQA from langchain.llms import OpenAI # 1. 加载产品PDF手册 loader = PyPDFLoader("你的产品手册.pdf") documents = loader.load() # 2. 拆分文档(每段500字,重叠50字保持连贯) from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) splits = text_splitter.split_documents(documents) # 3. 存储到向量库 vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings(api_key="你的API密钥")) # 4. 搭建问答链,用户提问时先查资料再回答 qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(api_key="你的API密钥"), chain_type="stuff", # 把找到的资料塞进Prompt里让LLM回答 retriever=vectorstore.as_retriever() ) # 测试:问产品保修政策 print(qa_chain.run("我们产品的保修期限是多久?"))
- 提取投诉关键词(比如 “订单延迟”“产品破损”);
- 查对应解决方案(从投诉处理手册里找);
- 生成标准化回复(包含道歉、解决方案、联系方式)。
from langchain.prompts import PromptTemplate from langchain.chains import SequentialChain, LLMChain from langchain.llms import OpenAI llm = OpenAI(api_key="你的API密钥") # 步骤1:提取投诉关键词 extract_template = "从用户投诉中提取核心问题:{complaint}\n核心问题:" extract_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(extract_template), output_key="core_issue") # 步骤2:查解决方案(这里简化为让LLM生成,实际可对接知识库) solve_template = "针对投诉核心问题「{core_issue}」,生成解决方案:\n解决方案:" solve_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(solve_template), output_key="solution") # 步骤3:生成标准化回复 reply_template = "用户投诉:{complaint}\n解决方案:{solution}\n请生成标准化回复(包含道歉、方案、联系方式):" reply_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(reply_template), output_key="final_reply")
- 给 AI 列 “工具清单”:告诉它有 “天气查询工具”“计算器工具”;
- AI 分析用户需求:比如用户说 “北京今天天气怎么样?”,AI 判断需要用 “天气查询工具”;
- AI 调用工具:自动传参数(比如 “城市 = 北京”),获取结果;
- AI 整理结果:把工具返回的信息转成自然语言回答。
三、核心组件


1. 模型(Models)
-
内容
LangChain 提供了对各种大语言模型(LLM)和聊天模型(ChatModel)的统一接口,屏蔽了底层差异(比如 OpenAI、Anthropic、Cohere、本地 LLM)。 -
细节
-
包括
LLM、ChatModel、EmbeddingModel三类。 -
内置了输出解析器(Output Parser),可以把大模型的自然语言输出转换为结构化数据(JSON、Pydantic 对象、数值等)。
-
-
价值
让开发者专注业务逻辑,不必关心不同模型的调用差异和 SDK 繁琐细节。
2. 提示模板(Prompts)
-
内容
提供 PromptTemplate、ChatPromptTemplate 等机制,帮助管理复杂的提示(prompt engineering)。 -
细节
-
动态变量替换:支持把上下文、用户输入等注入到模板。
-
Few-shot 示例管理:便于组织多个样例。
-
消息式提示:结构化地传递 system、user、assistant 等多角色信息。
-
-
价值
把 prompt 工程从“硬编码字符串”升级为可配置、可维护、可重用的组件,降低“提示散落在代码里”的混乱。
3. 数据检索(Indexes / Retrieval)
-
内容
用于构建 知识库增强生成(RAG) 应用,把外部文档接入大模型。 -
细节
-
文本分割器:将长文档切成可检索的 chunk。
-
向量化存储:支持 Pinecone、Weaviate、FAISS、Chroma 等。
-
检索器(Retriever):把用户问题转化为向量查询,返回相关文档。
-
-
价值
解决了 LLM 无法“记住所有知识”的问题,把专有文档、实时数据整合进大模型回答中。
4. 记忆(Memory)
-
内容
管理对话的上下文记忆,使得大模型可以“连续对话”。 -
细节
-
短期记忆:保存当前会话的上下文(最近几轮对话)。
-
长期记忆:通过数据库或向量存储保存长期信息。
-
记忆类型:
-
ConversationBufferMemory:存储所有对话。 -
ConversationBufferWindowMemory:只存储最近 N 轮。 -
VectorStoreRetrieverMemory:基于检索的记忆。
-
-
-
价值
让应用从“一问一答”变成“对话式交互”,接近人类交流体验。
5. 链(Chains)
-
内容
LangChain 的核心抽象,用来把模型调用、提示模板、工具调用、解析等串联起来。 -
细节
-
简单链:Prompt → LLM → 输出。
-
顺序链:多个链按顺序执行。
-
分支链:根据条件决定走不同子链。
-
LCEL(LangChain Expression Language):声明式定义链,支持并发、重试、回退。
-
-
价值
让开发者能够构建复杂工作流,而不需要自己写一堆控制逻辑。
6. 代理(Agents)
-
内容
代理(Agent)是比链更高阶的抽象,让大模型能自主决定调用什么工具、何时调用。 -
细节
-
核心思想:大模型通过解析用户问题,决定调用哪些工具(搜索、数据库查询、Python 计算等),然后综合工具结果再生成回答。
-
工具(Tools):LLM 外的功能模块,比如 API、SQL、计算器。
-
代理框架:ReAct、Conversational Agent 等。
-
-
价值
让 LLM 从“被动回答”升级为“主动规划、调用工具”,成为真正的 智能体(AI Agent)。
四、新手入门:3 步搭建你的第一个 LangChain 应用
# 安装LangChain核心库、OpenAI(用GPT模型)、PDF加载器、向量库 pip install langchain openai pypdf chromadb
# 2. 拆分文档 from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) splits = text_splitter.split_documents(documents) # 3. 存储到向量库 vectorstore = Chroma.from_documents( documents=splits, embedding=OpenAIEmbeddings(api_key="sk-你的OpenAI密钥") # 替换成你的API密钥 ) # 4. 搭建问答链 qa_chain = RetrievalQA.from_chain_type( llm=OpenAI(api_key="sk-你的OpenAI密钥"), chain_type="stuff", retriever=vectorstore.as_retriever() ) # 5. 提问测试 while True: question = input("请输入你的问题(输入q退出):") if question == "q": break print("回答:", qa_chain.run(question))
四、新手避坑:3 个最容易踩的误区
- 误区 1:上来就用 Agents
- 误区 2:不优化文档拆分
- 误区 3:忽视 Prompt 模板
- 要记对话,用 Memory;
- 要查资料,用 Retrieval;
- 要串流程,用 Chain;
- 要调用工具,用 Agent。
浙公网安备 33010602011771号