章节二十四:LangChain
一、LangChain概述
了解LangChain是什么以及为什么需要它。
LangChain:2022年由哈佛大学的Harrison Chase发起的开源框架,专门用于开发由大语言模型驱动的应用程序。它的核心作用是把调用大模型的过程标准化,让你不用关心每个模型厂商的API差异。
为什么需要LangChain:直接调用GPT或DeepSeek的API当然可以,但不同厂商的API格式不同,切换模型时学习成本高。LangChain提供了统一的调用方式,你只需要改一行配置就能换模型,而且内置了提示词模板、链式调用、输出解析等常用功能,让你专注业务逻辑。
第一步:理解LangChain解决的核心问题——统一不同模型的调用接口
第二步:掌握四大核心模块——Model I/O、Chains、Retrieval、Agents
第三步:学会用LangChain调用模型、解析输出、组装流程
二、核心模块
掌握LangChain的四大核心模块及其作用。
Model I/O:标准化大模型的输入和输出。包含三个子模块
- Format(格式化):通过模板管理提示词,把原始数据插入模板后送给模型
- Predict(预测):调用模型进行生成
- Parse(解析):把模型的自然语言输出转换成结构化数据(如JSON)
Chains(链条):把多个组件串成一个完整流程。比如"提示词模板 → 调用模型 → 解析输出"这三步可以组成一个Chain,一次invoke就能完成全部操作。
Retrieval(检索):RAG的核心能力,从外部数据源检索相关信息,作为上下文喂给模型,让回答更准确。
Agents(智能体):让模型自主规划步骤、调用工具来完成复杂任务。Agent会根据用户输入判断需要什么工具,然后一步步执行。
第一步:根据需求选择核心模块——简单调用用Model I/O,多步流程用Chains,需要查资料用Retrieval,需要自主决策用Agents
三、环境准备
掌握API-Key配置和虚拟环境搭建。
API-Key:调用大模型API的身份凭证,相当于"密码"。不同平台(OpenAI、DeepSeek、阿里云等)都有自己的API-Key,注册后生成。
BASE_URL:模型服务的网络地址。不同平台的地址不同,调用时需要同时提供API-Key和BASE_URL。
环境变量:把敏感信息(API-Key)存放在系统环境变量中,避免硬编码到代码里导致泄露。
第一步:在模型服务平台注册账号,生成API-Key
第二步:在项目根目录创建.env文件,写入API-Key和BASE_URL
第三步:安装python-dotenv包,在代码中用load_dotenv()加载环境变量
第四步:用os.getenv()读取环境变量,传入LangChain的模型配置
安全提示:不要把.env文件提交到Git仓库,在.gitignore中加上.env。
四、调用在线模型
掌握通过LangChain调用各大模型平台的方法。
ChatCompletion API:最经典的OpenAI风格API,传入消息列表,返回模型回复。大部分国产模型(DeepSeek、通义千问等)都兼容这个接口。
Responses API:OpenAI 2025年发布的新API,支持服务端内置工具调用和状态维护,是目前最先进的接口。
init_chat_model:LangChain提供的统一初始化方法,一行代码就能创建模型实例,只需要指定模型名和厂商。
第一步:安装对应的LangChain集成包,如langchain-openai、langchain-deepseek
第二步:用init_chat_model(model="gpt-4o", model_provider="openai")创建模型实例
第三步:传入消息列表(包含SystemMessage、HumanMessage等)调用模型
第四步:获取模型返回的AIMessage,提取文本内容
调用方式:除了普通调用,还支持——
- 异步调用:
await llm.ainvoke(...),适合高并发场景 - 流式调用:
llm.stream(...),实现打字机效果,逐字输出 - 批次调用:
llm.batch([...]),一次发多个请求,并行处理
五、调用本地模型
了解如何通过Ollama在本地运行大模型。
Ollama:一个开源的本地大模型运行框架,支持Qwen、DeepSeek等主流模型。主要用来本地开发和原型验证,生产环境一般用vLLM。
第一步:从ollama.com下载对应系统的安装包并安装
第二步:命令行执行ollama run qwen3:8b下载并运行模型
第三步:在LangChain中配置base_url="http://localhost:11434"指向本地Ollama服务
第四步:正常调用模型,和在线模型用法完全一样
六、模型输出解析
掌握让模型输出结构化数据的方法。
结构化输出:让模型按指定格式(如JSON)输出结果,而不是自由发挥。这在生产环境中非常重要,因为程序需要解析模型的输出做后续处理。
方法一——Prompt约束:在提示词中明确要求输出JSON格式,配合JSONOutputParser自动解析。但这对模型能力有要求,小模型容易输出格式错误的JSON。
方法二——厂商结构化输出:主流模型API提供了专门的参数限制输出格式。LangChain通过with_structured_output()方法统一封装了各家厂商的能力,不管底层是OpenAI还是Google,调用方式都一样。
Pydantic:Python的数据校验库。先用Pydantic定义好JSON结构(字段名、类型),然后传给with_structured_output(),模型就会按这个结构输出。
第一步:用Pydantic定义输出数据结构(如包含"城市"和"天气"两个字段的类)
第二步:调用llm.with_structured_output(Pydantic类)得到新的模型实例
第三步:正常调用,输出自动解析为Pydantic对象,直接访问属性即可
七、提示词模板
掌握PromptTemplate和ChatPromptTemplate的使用。
提示词模板:把固定文字和变量分开,运行时动态填充变量。比如模板是"你是一位{角色},请评价{主题}“,运行时传入"角色=美食家、主题=火锅”,就生成完整提示词。
PromptTemplate:字符串模板,适合单轮对话场景。
ChatPromptTemplate:聊天消息模板,可以定义SystemMessage、HumanMessage、AIMessage的模板,适合多轮对话场景。
第一步:创建模板,用{变量名}占位
第二步:传入字典填充变量,生成PromptValue
第三步:PromptValue可以直接传给模型,也可以转成字符串或消息列表
八、Chains链式调用
理解Chains的核心思想和Runnable接口。
Runnable接口:LangChain最底层的统一接口,定义了invoke、stream、batch等标准方法。模型、解析器、模板、检索器都实现了这个接口,所以可以像拼积木一样组合。
链式组装:用管道符|把多个组件串起来。比如prompt | llm | parser就是一个完整的Chain——先填充模板,再调用模型,最后解析输出。一次invoke走完整个流程。
第一步:准备组件(提示词模板、模型实例、输出解析器)
第二步:用管道符连接——chain = prompt | llm | parser
第三步:调用chain.invoke({"变量": "值"}),自动走完整个流程
第四步:获取结构化输出结果
九、LangChain生态包
了解LangChain相关的包及其作用。
langchain:主包,包含构建LLM应用的核心实现。
langchain-core:核心接口和抽象,定义了Runnable、Message等基础类。
langchain-openai/deepseek:与各模型厂商的集成包,封装了具体模型的调用逻辑。
langchain-text-splitters:文档切分工具,用于RAG场景下的长文档处理。
langchain-mcp-adapters:连接MCP工具的适配器,让LangChain应用可以调用外部工具。
名词解释
LangChain:开源框架,用统一的接口封装不同大模型的调用差异,让你像搭积木一样组装AI应用。
Model I/O:LangChain的核心模块,负责模型的输入格式化、调用预测和输出解析三步。
Chain:把多个组件串成一个完整流程,一次调用自动走完。比如"模板→模型→解析器"。
PromptTemplate:提示词模板,把固定内容和变量分开,运行时动态填充,避免重复写提示词。
Pydantic:Python的数据校验库,用来定义数据结构(字段名、类型),LangChain用它来做结构化输出。
结构化输出:让模型按指定格式(如JSON)输出,而不是自由发挥,方便程序解析处理。
Ollama:本地运行大模型的工具框架,适合开发和测试,生产环境用vLLM。
环境变量:存放敏感配置(如API-Key)的地方,避免直接写在代码里造成泄露。
BASE_URL:模型服务的网络地址,不同厂商地址不同,调用API时需要指定。
Runnable:LangChain的统一接口,所有组件(模型、模板、解析器)都实现了它,所以可以链式组合。