在上一篇文章中,我们聊到了 LangChain 的整体架构演进。今天,我们正式进入实战部分——搭建 LangChain 1.x 开发环境,并手把手完成基于 DeepSeek 及其他主流大模型的统一接口调用

一、为什么首选 DeepSeek 开展开发?

在目前的 LLM 应用开发中,DeepSeek 凭借极高的性价比与优秀的推理能力,成为了众多团队和个人开发者的首选。

对于 LangChain 开发者来说,DeepSeek 还有一个极大的优势:官方 API 完美兼容 OpenAI 接口格式

这意味着,只要一个 SDK 或框架支持 OpenAI 的协议规范,我们只需修改三个核心参数,就能无缝切换到 DeepSeek:

  1. API Key:你的 DeepSeek 密钥

  2. Base URL[https://api.deepseek.com](https://api.deepseek.com)

  3. 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_urlapi_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
  1. 安装阿里云官方 SDK 与社区包:

    Bash
    pip install -U dashscope langchain_community
    
  2. 使用社区封装的 Tongyi 适配器:

    Python
    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)
  1. 首选 init_chat_model:它统一了各厂家的加载逻辑,使你的业务代码具备极高的平滑迁移能力(只需要修改配置文件中的环境变量即可切换底层模型);

  2. 社区包兜底:若遇到暂未接入注册表的服务商,优先去 langchain-community 查找对应的集成包;

  3. 保持 SDK 版本一致:定期升级 langchain 与各厂商底层 SDK(如 dashscopeopenai),避免因为 API 变更导致的序列化报错。

八、常见排坑指南

  1. API Key 加载不到 / NoneType 报错

    • 检查 .env 文件是否准确存放在项目根目录

    • 检查代码顶部是否显式执行了 load_dotenv()

  2. 连接超时(Timeout / Connection Refused)

    • 确认 DEEPSEEK_BASE_URL 拼写无误(注意是否有尾部斜杠或多余的 /v1);

    • 检查企业内网环境是否开启了严格的 HTTP/HTTPS 代理阻断。

  3. HTTP 401 / 403 错误

    • 401:API Key 无效或过期;

    • 403:通常为账户余额不足(如聚合平台未充值)或请求已被服务端风控识别。

总结与后续预告

通过本文,我们完成了 LangChain 1.x 开发环境的搭建,理解了 OpenAI 兼容规范的底层逻辑,并学会了如何通过 init_chat_model 实现跨模型供应商的统一调用。

在接下来的文章中,我们将深入讲解 LangChain 的核心工程化组件:Prompt Template 模板化管理与 Output Parsers 结构化输出解析。敬请关注!

更多推荐