系列文章

LangChain 1.0 入门(一):Runnable 统一接口全解析(含完整代码+逐行输出解读)
LangChain 1.0 入门(二):LangChain 全模型标准化接入最佳实践(小白参数详解版)
LangChain 1.0 入门(三):稳定性双核心——重试机制+速率限速器参数详解与实战


前言

很多新手在用 LangChain 调用大模型时,最大的困惑不是不会写代码,而是参数不知道怎么填、BASE_URL 乱填、API_KEY 不知道去哪拿、模型名字写错一直报错

本文严格遵循「先学各厂商原生写法 → 理解痛点 → 再学通用统一方案」的逻辑,所有参数逐行小白级讲解,不跳过、不省略,零基础也能直接复制跑通。

一、前置必懂:LLM 与 ChatModel(90%新手报错源头)

LangChain 所有模型只分两类,决定你最后要不要写 .content

  • LLM 文本模型:老式文本补全模型,返回结果是「纯字符串」,直接 print,不用 .content
    常见:原生 OpenAI、OllamaLLM。

  • ChatModel 对话模型:新式对话模型,返回结果是「对象」,必须 .content 才能拿到文字,否则打印的是内存地址。
    常见:ChatOpenAI、ChatDeepSeek、ChatTongyi、ChatOllama(本文绝大多数都是这类)。

二、各模型「原生专属调用」代码 + 逐行参数详解

这一章是最基础、最正统的官方写法,每个模型单独导入、单独配置,我会把每一个参数是干嘛的、怎么填、填错会怎样全部讲清楚。

1. DeepSeek 原生调用(两种写法详解)

写法一:专属模型 ChatDeepSeek
from langchain_deepseek import ChatDeepSeek

# 模型初始化:所有参数小白级解释
model = ChatDeepSeek(
    model="deepseek-chat",   # 必填:模型名,固定填 deepseek-chat
    temperature=0.0,        # 创造性:0=最严谨、不瞎编;1=最放飞,写代码建议0
    max_tokens=512,         # 最大输出字数:限制单次回答最长长度
    timeout=30,             # 超时时间:30秒没返回直接报错断开
)

result = model.invoke("你好,请你介绍一下你自己。")
print(result.content) # ChatModel 必须加 .content

参数小白答疑

  • model:DeepSeek 通用对话模型固定名称,不要乱改

  • temperature:做题、写代码、问答 一律 0;写文案、脑洞创作 0.7~1.0

  • max_tokens:数值越大回答越长,耗钱越多

  • timeout:网络差可以改 60,防止超时失败

写法二:官方通用工厂 init_chat_model
from langchain.chat_models import init_chat_model

# 只需要填模型名+厂商,其他默认最优配置
model = init_chat_model(
    "deepseek-chat",
    model_provider="deepseek",
)

result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)

适用场景:只是简单调用、不需要精细调参,快速上线用这个。

2. 通义千问(阿里)原生调用

from langchain_community.chat_models.tongyi import ChatTongyi

# 无参默认:自动调用 qwen-turbo 极速对话模型
model = ChatTongyi()

result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)

小白说明:通义千问原生封装最简单,无需手动填密钥和地址,会自动读取本地环境变量。

3. OpenAI 原生调用(LLM / ChatModel 对比精讲)

① 老式 LLM(文本补全)
from langchain_openai import OpenAI

llm = OpenAI(model="gpt-4o-mini")
result = llm.invoke("你好,请你介绍一下你自己。")
print(result) # LLM 直接打印,不用 .content

② 新式 ChatOpenAI(对话,主流)
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4o-mini")
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content) # ChatModel 必须加

小白区分口诀带 Chat 的要 .content,不带 Chat 的直接打印

4. Ollama 本地模型原生调用(本地离线)

① OllamaLLM(文本)
from langchain_ollama import OllamaLLM

llm = OllamaLLM(model="deepseek-r1:8b")
result = llm.invoke("你好,请你介绍一下你自己。")
print(result)

② ChatOllama(对话,推荐)
from langchain_ollama import ChatOllama

# model 填写你本地 ollama pull 下载的模型名
model = ChatOllama(model="deepseek-r1:8b")
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)

小白重点:model 名字必须和本地下载的一模一样,大小写、后缀 8b/7b 错一个都报错。

5. vLLM 本地推理服务原生调用(重点参数详解)

vLLM 没有专属 LangChain 类,本质就是伪装成 OpenAI 接口,所以用 ChatOpenAI 接入。

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="qwen-32b-chat",         # 你本地vLLM部署的模型名称
    base_url="http://localhost:8000/v1", # 本地服务地址
    api_key="EMPTY",               # vLLM不需要密钥,固定填EMPTY
    max_retries=5,                 # 失败重连5次
    timeout=120.0,                 # 本地大模型慢,超时设2分钟
)

result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)

参数逐行解释

  • base_url:必须带 /v1,少后缀直接 404

  • api_key:固定 EMPTY,不用自己申请

  • timeout:本地 32B/70B 模型推理很慢,必须开大

6. embedding模型调用

# 1. 使用init_embeddings初始化嵌入模型
from langchain.embeddings import init_embeddings

# 2. 初始化OpenAI的text-embedding-3-small嵌入模型
embedding = init_embeddings(model="text-embedding-3-small",provider="openai")   

# 3. 将文本转换为向量表示
res = embedding.embed_query("Hello world")    

# 4. 打印向量的前10个元素
print(res[:10])

三、原生写法最大痛点(为什么一定要学统一方案)

  • 每个模型导入不同包,代码乱七八糟

  • 换一个模型就要改一遍初始化代码

  • 有的要 .content、有的不要,新手永远报错

  • 私有化、本地模型无法统一管理

四、全网通用统一方案(一套代码跑所有模型)超详细参数教学

核心真理:现在 99% 的大模型都兼容 OpenAI 接口格式
所以我们只需要用ChatOpenAI 这一个类,通过修改 3 个核心参数,通吃:OpenAI、DeepSeek、通义千问、智谱、Ollama、vLLM。

1. 依赖安装(新手必看)

pip install python-dotenv langchain-openai

易错点:是 python-dotenv,不是 dotenv,装错直接报错。

2. 通用核心代码(所有参数逐行讲解)

from langchain_openai import ChatOpenAI
from dotenv import load_dotenv
import os

# 读取项目里的 .env 配置文件,把参数加载到程序中
load_dotenv(".env")

# 通用模型初始化【最重要的四个参数】
model = ChatOpenAI(
    # 1. 接口地址:不同厂商唯一区别,必须带 /v1
    base_url=os.getenv("BASE_URL"),
    # 2. 密钥:云端模型填官网key,本地模型随便填
    api_key=os.getenv("API_KEY"),
    # 3. 模型名:对应厂商的模型名称
    model=os.getenv("MODEL_NAME"),
    # 4. 可选参数:创造性、最大长度、超时时间
    temperature=float(os.getenv("TEMPERATURE", 0.7)),
    max_tokens=int(os.getenv("MAX_TOKENS", 2048)),
    timeout=int(os.getenv("TIMEOUT", 120)),
)

if __name__ == "__main__":
    question = "你好,请你介绍一下你自己。"
    result = model.invoke(question)
    print(result.content)

embedding模型同样也支持兼容OpenAI接口的API接入

init_embeddings(
    model=model,    # 模型名称
    provider=provider,    # 模型提供商
    base_url=base_url    # 自定义API服务器地址
)

3. 四大核心参数【小白终极填表指南】

你只需要弄懂这 4 个参数,全网模型全会接:

  • BASE_URL:模型服务商的统一接口地址,必须以 /v1 结尾,错一个字符连不上

  • API_KEY:云端商用模型去官网个人中心复制;本地模型(Ollama/vLLM)随便填字符串

  • MODEL_NAME:厂商对应的真实模型名称,不能瞎写

  • TEMPERATURE:0=严谨不胡编,1=自由创作

4. .env 配置文件「全平台可直接复制模板」

放在项目根目录,想用哪个模型,就打开哪个注释,其余全部注释。

# 通用固定参数,全局生效
TEMPERATURE=0.7
MAX_TOKENS=2048
TIMEOUT=120

# ========== 1. OpenAI 官方 ==========
# BASE_URL=https://api.openai.com/v1
# API_KEY=sk-xxxxxxxxxxxxxxxx
# MODEL_NAME=gpt-4o-mini

# ========== 2. DeepSeek 深度求索 ==========
# BASE_URL=https://api.deepseek.com/v1
# API_KEY=sk-xxxxxxxxxxxxxxxx
# MODEL_NAME=deepseek-chat

# ========== 3. 阿里通义千问 ==========
# BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
# API_KEY=sk-xxxxxxxxxxxxxxxx
# MODEL_NAME=qwen-turbo

# ========== 4. 智谱AI GLM ==========
# BASE_URL=https://open.bigmodel.cn/api/paas/v4
# API_KEY=xxxxxxxxxxxxxxxx
# MODEL_NAME=glm-4

# ========== 5. 本地 Ollama(离线免费) ==========
BASE_URL=http://127.0.0.1:11434/v1
API_KEY=dummy
MODEL_NAME=qwen2.5:7b

# ========== 6. 本地 vLLM 推理服务 ==========
# BASE_URL=http://localhost:8000/v1
# API_KEY=EMPTY
# MODEL_NAME=你部署的模型名

五、各平台参数「一键照抄对照表」(小白专属)

模型平台 BASE_URL(直接复制) API_KEY 怎么填 MODEL_NAME 示例
OpenAI 官方 https://api.openai.com/v1 官网复制 sk 开头密钥 gpt-4o-mini、gpt-4o
DeepSeek https://api.deepseek.com/v1 官网个人密钥 deepseek-chat
通义千问 https://dashscope.aliyuncs.com/compatible-mode/v1 阿里云百炼密钥 qwen-turbo、qwen-plus
智谱AI https://open.bigmodel.cn/api/paas/v4 官网个人密钥 glm-4、glm-3-turbo
本地 Ollama http://127.0.0.1:11434/v1 任意字符:dummy / 123 本地下载的模型全名
本地 vLLM http://localhost:8000/v1 固定填:EMPTY 你部署的模型名称

六、进阶功能参数详解

1. 流式输出参数(逐字打字效果)

question = "你好,请你介绍一下你自己。"
# stream 流式参数,所有兼容模型通用
for chunk in model.stream(question):
    print(chunk.content, end="", flush=True)

小白解释:invoke 是一次性出结果,stream 是逐字返回,适合聊天界面。

2. 厂商独有扩展参数 extra_body

model = ChatOpenAI(
    base_url=os.getenv("BASE_URL"),
    api_key=os.getenv("API_KEY"),
    model=os.getenv("MODEL_NAME"),
    extra_body={"enable_search": True} 
)

小白解释:部分模型支持联网搜索、思维链、长文本优化,全部塞进 extra_body,不破坏通用代码。

七、新手 100% 踩坑点(全部对应参数问题)

  • 报错打印一堆对象:ChatModel 忘记写 .content

  • 接口 404:BASE_URL 少写 /v1、多空格、多换行

  • 鉴权失败:云端 KEY 填错、过期、余额不足

  • 本地 Ollama 连不上:模型名和本地不一致、Ollama 没启动

  • 本地模型超时:大模型推理慢,TIMEOUT 必须大于 120

  • 导入报错:装包用 python-dotenv,不要用 dotenv

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐