LangChain 零基础完整实战:环境搭建 + 多模型调用全教程

发布时间:2026/7/22 5:23:10

LangChain 零基础完整实战:环境搭建 + 多模型调用全教程 前言LangChain 的框架定位设计 LangChain 的初衷是为大模型开发提供一个模块化、可组合化的开发框架。LangChain 是介于大模型与应用之间的中间层让开发者能够以一致的方式调用多种大模型、组织提示词、管理上下文状态并集成外部工具与数据源从而高效构建出具备推理与行动能力的智能体。截至 2025 年 11 月LangChain 生态形成了三层技术栈LangChain→LangGraph→Deep Agent分别对应基础能力层、运行时编排与智能体抽象层。 这三层共同构成了一个从底层组件到高层自治行为的技术闭环。当下提及的 LangChain往往指的是这个不断进化的生态体系而不仅仅是其最初的 LangChain 基础框架部分。全文教程统一基于Python3.12兼容性最好无底层编译报错。一、环境搭建生产环境优先推荐Python 3.10 / 3.11是 LangChain 1.x 生态兼容性最好、第三方包适配最完整的版本踩坑最少。安装依赖使用国内镜像pip install langchain langchain-openai openai python-dotenv -i https://pypi.tuna.tsinghua.edu.cn/simple说明langchainLangChain 核心框架langchain-openaiLangChain 的 OpenAI 兼容模型集成openaiOpenAI 兼容 API SDKpython-dotenv读取.env配置文件建议配置全局的镜像源Windows 在用户目录 C:\Users\你的用户名 新建 pip 文件夹创建 pip.ini[global] index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.com二、配置 DeepSeek API Key在项目根目录创建.env用于存储API_key和URL等隐私内容DEEPSEEK_API_KEY你的 DeepSeek API Key DEEPSEEK_BASE_URLhttps://api.deepseek.com注意不要把真实 API Key 写进代码不要把.env提交到 Git 仓库三、案例直接使用 OpenAI 兼容 API 调用 DeepSeek在正式使用 LangChain 前先用 OpenAI 兼容 API 直接调用一次 DeepSeek。LangChain 不是凭空调用模型它底层仍然需要模型服务。创建 01_OpenAIimport os from dotenv import load_dotenv from langchain.chat_models import init_chat_model load_dotenv() model init_chat_model( modeldeepseek-v4-flash, model_provideropenai, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL) ) response model.invoke(请用一句话介绍 LangChain 的作用) print(response.content)如果能看到模型回答说明API Key 正确网络可以访问 DeepSeekDeepSeek 模型调用成功使用 LangChain 初始化 DeepSeek 模型LangChain 提供了统一的模型初始化方式。需要指出的是以上是 LangChain 早期版本中的常见写法也是目前许多教程仍在使用的写法。虽然该方法在功能上仍然有效但已不再是官方推荐的最佳实践。自 LangChain 0.2 起官方推荐使用统一的工厂方法init_chat_model来创建模型实例这一方法在最新的 LangChain 1.0 中继续得到支持和强化。本课程使用init_chat_model创建 03_LangChainimport os from dotenv import load_dotenv from langchain.chat_models import init_chat_model load_dotenv() model init_chat_model( modeldeepseek-v4-flash, model_provideropenai, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL) ) #打印方法一等待并直接打印完整结果 #response model.invoke(什么是Deep Agent?) #print(response.content) #打印方法二逐字打印 for chunk in model.stream(什么是Deep Agent?): print(chunk.content, end)这段代码和上一个案例的区别是上一个案例直接使用 OpenAI 兼容 SDK这个案例使用 LangChain 的模型组件后续文章中我们会继续把这个模型组件和 Prompt、Parser、Retriever 等组件组合起来。四、代码说明load_dotenv作用是读取.env文件中的配置。本章主要读取DEEPSEEK_API_KEY你的 DeepSeek API Key DEEPSEEK_BASE_URLhttps://api.deepseek.cominit_chat_modelmodel init_chat_model( modeldeepseek-v4-flash, model_provideropenai, api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL), )这段代码表示使用 LangChain 初始化一个聊天模型模型名称是deepseek-v4-flash模型接口按 OpenAI 兼容格式调用API 地址使用 DeepSeek 的 base URL这里的model_provideropenai不是说使用 OpenAI 模型而是表示使用 OpenAI 兼容接口格式。invokeresponse model.invoke(请用一句话介绍 LangChain 的作用)invoke表示执行一次模型调用。返回结果中模型回答内容通常在response.content五、拓展本案例实现一个可以连续对话的带上下文的命令行客服助手import os #系统内置模块用来读取 .env 环境变量文件里的接口地址、密钥。 from dotenv import load_dotenv #第三方库 python-dotenv作用读取项目根目录 .env 文件把密钥、接口地址加载到系统环境变量避免硬编码密钥防止泄露 API Key。 from langchain.chat_models import init_chat_model #LangChain 统一初始化大模型的函数兼容 OpenAI 格式接口DeepSeek 兼容 OpenAI 调用协议。 from langchain_core.messages import SystemMessage, HumanMessage, AIMessage #三种消息类型 #SystemMessage系统提示词设定 AI 角色、规则这里指定为快递客服 #HumanMessage用户输入的对话内容 #AIMessage大模型返回的回复内容 load_dotenv() #自动读取项目下 .env 文件 #执行后后续 os.getenv() 就能读取到这两个配置。 modelinit_chat_model( base_urlos.getenv(DEEPSEEK_BASE_URL), #DeepSeek 接口请求地址从环境变量读取 api_keyos.getenv(DEEPSEEK_API_KEY), #你的 DeepSeek 密钥鉴权用 modeldeepseek-v4-flash, #指定调用的模型名称 temperature0.5, #温度参数控制随机性0-1,越小越严谨越大越发散 model_provideropenai #声明接口兼容 OpenAI 标准格式LangChain 会用 OpenAI 调用逻辑对接 DeepSeek ) #messages 列表存储完整对话历史实现多轮上下文记忆 #后续用户提问、AI 回复都会追加进这个列表模型每次调用都会读取全部历史知道之前聊了什么。 messages[ SystemMessage(content你是一个快递客服回答问题要有礼貌假如对方没有提供单号请让其先提供快递单号) ] while True: #控制台等待用户输入问题 questioninput(用户:) #退出逻辑输入 exit 终止循环、结束程序 if questionexit: break #把本次用户提问封装成 HumanMessage追加到对话历史列表保存上下文 messages.append(HumanMessage(contentquestion)) #把完整对话历史系统提示 历史问答 本次用户问题传给大模型发起请求获取 AI 返回结果 responsemodel.invoke(messages) print(客服的回答:response.content) #将 AI 本次回复存入对话列表下一轮提问时模型能看到本次回答实现连贯对话 messages.append(AIMessage(contentresponse.content))

相关新闻