LangChain 实战:基于 DeepSeek 与多模型生态的环境搭建与统一调用
在上一篇文章中,我们聊到了 LangChain 的整体架构演进。今天,我们正式进入实战部分——搭建 LangChain 1.x 开发环境,并手把手完成基于 DeepSeek 及其他主流大模型的统一接口调用。
一、为什么首选 DeepSeek 开展开发?
在目前的 LLM 应用开发中,DeepSeek 凭借极高的性价比与优秀的推理能力,成为了众多团队和个人开发者的首选。
对于 LangChain 开发者来说,DeepSeek 还有一个极大的优势:官方 API 完美兼容 OpenAI 接口格式。
这意味着,只要一个 SDK 或框架支持 OpenAI 的协议规范,我们只需修改三个核心参数,就能无缝切换到 DeepSeek:
-
API Key:你的 DeepSeek 密钥
-
Base URL:
[https://api.deepseek.com](https://api.deepseek.com) -
Model Name:如
deepseek-v4-flash(根据官方最新模型选
首先我们进入DeepSeek官网页面打开API开放平台

然后创建API key,创建好的api key一定要复制下来,因为没有办法二次查看。

二、理解 OpenAI 兼容 API 规范
所谓的“OpenAI 兼容 API”,已经成为了目前 LLM 行业事实上的标准。无论是 DeepSeek、硅基流动(SiliconFlow)、Moonshot 还是开源模型服务(vLLM, Ollama),基本都遵循这套 JSON 交互格式。
标准的 Chat Completions 调用结构通常如下:
基于Python
client.chat.completions.create(
model="deepseek-v4-flash",
messages=[
{"role": "user", "content": "你好"}
],
)
LangChain 底层也是在这一规范之上,将模型封装成了统一的接口组件,方便后续与 Prompt Template、Output Parser、RAG Retriever 以及 Agent Tools 进行链式或图式编排。
三、开发环境准备
1. Python 版本推荐
建议使用 Python 3.10 或 3.11。
-
3.10 / 3.11:LangChain 1.x 生态兼容性最好、第三方集成包适配最完整的版本,踩坑率最低;
-
3.12:可正常使用;
-
3.13:由于版本较新,部分小众社区扩展包可能存在适配延迟。
2. 依赖安装与国内镜像配置
在项目虚拟环境中运行以下命令安装核心依赖:
Bash
pip install langchain langchain-openai openai python-dotenv
如果下载速度较慢,可临时指定清华镜像源:
Bash
pip install langchain langchain-openai openai python-dotenv -i https://pypi.tuna.tsinghua.edu.cn/simple
3. 配置密钥与环境变量
为了保证代码安全,严禁将 API Key 硬编码在 Python 源码中。
在项目根目录下创建 .env 文件:
代码段
DEEPSEEK_API_KEY=your_actual_deepseek_api_key
DEEPSEEK_BASE_URL=https://api.deepseek.com
同时,一定要创建 .gitignore 文件,防止敏感密钥被意外提交到 Git 仓库:
代码段
.env
.venv/
__pycache__/
*.pyc
在代码中,我们可以使用 python-dotenv 库读取环境变量:
Python
import os
from dotenv import load_dotenv
load_dotenv() # 加载 .env 文件中的配置
print("API Key 已成功加载:", os.getenv("DEEPSEEK_API_KEY")[:8] + "******")
四、从原生 SDK 到 LangChain 1.x 的代码演进
为了彻底搞懂 LangChain 的封装机制,我们按“原生 SDK -> LangChain ChatOpenAI -> LangChain 1.x init_chat_model”的顺序逐一讲解。
阶段一:用 OpenAI 原生 SDK 调通 DeepSeek
在接入 LangChain 之前,推荐先用原生的 openai 库验证 API Key 和网络联通性。
创建 01_openai_compatible.py:
Python
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
# 实例化 OpenAI 客户端,但指向 DeepSeek 的 Base URL
client = OpenAI(
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[
{"role": "user", "content": "请用一句话介绍 LangChain 是什么。"}
],
)
print(response.choices[0].message.content)
注意:这里的
client.chat.completions是原生 SDK 的方法,不要与 LangChain 的ChatOpenAI类混化。如果能正常打印回答,说明密钥和网络环境一切正常!
阶段二:使用 LangChain 的 ChatOpenAI 显式类
这是早期 LangChain 教程中最常见的写法:
Python
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
# 创建模型实例
model = ChatOpenAI(
model="deepseek-v4-flash",
temperature=0.7,
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
)
# 1. 单次同步调用 (.invoke)
response = model.invoke("请解释 LangChain 模型接口的统一性。")
print("【Invoke 返回】\n", response.content)
# 2. 流式响应输出 (.stream)
print("\n【Stream 输出】")
for chunk in model.stream("请用一句话总结人工智能的意义:"):
print(chunk.content, end="", flush=True)
知识点补充:temperature 超参数的选择策略

阶段三:使用官方推荐的 init_chat_model 工厂函数(最佳实践)
在 LangChain 0.2/1.0 时代,官方大幅改动了模型实例化的机制,引入了统一工厂方法 init_chat_model。
它允许我们通过参数配置动态加载不同厂商的模型,真正实现了代码层面的解耦。
创建 02_langchain_first_call.py:
Python
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
load_dotenv()
# 使用 1.x 推荐的工厂函数创建模型实例
model = init_chat_model(
model="deepseek-v4-flash",
model_provider="openai", # 表示使用 OpenAI 兼容的 API 规范
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
temperature=0.7,
)
print("流式输出中:")
for chunk in model.stream("什么是 Deep Agent?"):
print(chunk.content, end="", flush=True)
核心参数说明:
model_provider="openai"并不是指定使用 OpenAI 官方的 GPT 模型,而是告诉 LangChain:“请使用 OpenAI 兼容协议 来解析这个接口”。
五、实战案例:构建一个简易的 AI 答疑助手
我们利用刚刚实例化的 init_chat_model,编写一个带有格式约束的控制台答疑工具。
创建 03_course_assistant.py:
Python
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
load_dotenv()
# 1. 统一初始化模型
model = init_chat_model(
model="deepseek-v4-flash",
model_provider="openai",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url=os.getenv("DEEPSEEK_BASE_URL"),
temperature=0.7,
)
# 2. 构造 Prompt 渲染函数
def build_prompt(user_question: str) -> str:
return f"""
你是一名专业的 AI 技术助教。
请使用最简洁、通俗的语言回答问题,适合初学者理解。
回答格式必须满足以下要求:
1. 先给出核心结论;
2. 举一个生活或开发中的实际例子;
3. 全文控制在 200 字以内。
学生的问题是:{user_question}
"""
if __name__ == '__main__':
question = input("请输入你的技术问题:")
prompt_content = build_prompt(question)
print("\n--- AI 助教回答中 ---")
for chunk in model.stream(prompt_content):
print(chunk.content, end="", flush=True)
print("\n--------------------")
六、横向拓展:快速接入其他主流大模型
在实际业务开发中,我们不可能只依赖一家模型供应商。得益于 LangChain 的统一抽象,接入其他厂商的模型也变得极其简单。
1. 接入第三方 OpenAI 代理(如 CloseAI / 自建 API 网关)
如果你使用的是类似 CloseAI 或第三方聚合网关服务,只需修改 base_url 与 api_key:
Python
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0.7,
api_key="sk-your-proxy-key",
base_url="https://api.openai-proxy.org/v1" # 代理服务商提供的 URL
)
for chunk in model.stream("请用一句话总结人工智能的意义:"):
print(chunk.content, end="", flush=True)
2. 接入阿里通义千问(Qwen / DashScope)
当我们直接在 init_chat_model 中传入 model_provider="dashscope" 时,目前 LangChain 可能会抛出错误:
Plaintext
ValueError: Unsupported model_provider='dashscope'.
这是因为阿里云 DashScope 平台尚未完全内置进 LangChain 的 Core 注册表中。
解决方案:借助 langchain-community 包
-
安装阿里云官方 SDK 与社区包:
Bashpip install -U dashscope langchain_community -
使用社区封装的
PythonTongyi适配器:from langchain_community.llms.tongyi import Tongyi model = Tongyi( model="qwen-plus", temperature=0.3, api_key="your_dashscope_api_key" ) for chunk in model.stream("LangChain 由哪几部分组成?"): print(chunk, end="", flush=True)
3. 接入硅基流动(SiliconFlow)
硅基流动同样提供了标准的 OpenAI 兼容接口,可以直接复用 init_chat_model:
Python
import os
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
load_dotenv()
# .env 中配置:
# GUIJI_BASE_URL=https://api.siliconflow.cn/v1
# GUIJI_API_KEY=sk-xxxx
model = init_chat_model(
base_url=os.getenv("GUIJI_BASE_URL"),
api_key=os.getenv("GUIJI_API_KEY"),
model="deepseek-ai/DeepSeek-V4-Flash", # 硅基流动托管的模型标识符
model_provider="openai",
temperature=0.7
)
for chunk in model.stream("什么是 Deep Agent?"):
print(chunk.content, end="", flush=True)
七、多模型接入的最佳实践法则
在企业级项目开发中,建议遵循以下接入层策略:
Plaintext
┌─────────────────────────────────────────┐
│ 优先使用 init_chat_model 工厂函数 │
└────────────────────┬────────────────────┘
│
┌─────────────┴─────────────┐
▼ ▼
【支持 OpenAI 规范】 【不支持规范 / 官方集成】
设置 model_provider="openai" 使用 langchain-community
填入 base_url / api_key 专属适配器 (如 Tongyi)
-
首选
init_chat_model:它统一了各厂家的加载逻辑,使你的业务代码具备极高的平滑迁移能力(只需要修改配置文件中的环境变量即可切换底层模型); -
社区包兜底:若遇到暂未接入注册表的服务商,优先去
langchain-community查找对应的集成包; -
保持 SDK 版本一致:定期升级
langchain与各厂商底层 SDK(如dashscope、openai),避免因为 API 变更导致的序列化报错。
八、常见排坑指南
-
API Key 加载不到 /
NoneType报错:-
检查
.env文件是否准确存放在项目根目录; -
检查代码顶部是否显式执行了
load_dotenv()。
-
-
连接超时(Timeout / Connection Refused):
-
确认
DEEPSEEK_BASE_URL拼写无误(注意是否有尾部斜杠或多余的/v1); -
检查企业内网环境是否开启了严格的 HTTP/HTTPS 代理阻断。
-
-
HTTP 401 / 403 错误:
-
401:API Key 无效或过期;
-
403:通常为账户余额不足(如聚合平台未充值)或请求已被服务端风控识别。
-
总结与后续预告
通过本文,我们完成了 LangChain 1.x 开发环境的搭建,理解了 OpenAI 兼容规范的底层逻辑,并学会了如何通过 init_chat_model 实现跨模型供应商的统一调用。
在接下来的文章中,我们将深入讲解 LangChain 的核心工程化组件:Prompt Template 模板化管理与 Output Parsers 结构化输出解析。敬请关注!
更多推荐
所有评论(0)