系列文章
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
python
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
python
from langchain.chat_models import init_chat_model
# 只需要填模型名+厂商,其他默认最优配置
model = init_chat_model(
"deepseek-chat",
model_provider="deepseek",
)
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)
适用场景:只是简单调用、不需要精细调参,快速上线用这个。
2. 通义千问(阿里)原生调用
python
from langchain_community.chat_models.tongyi import ChatTongyi
# 无参默认:自动调用 qwen-turbo 极速对话模型
model = ChatTongyi()
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content)
小白说明:通义千问原生封装最简单,无需手动填密钥和地址,会自动读取本地环境变量。
3. OpenAI 原生调用(LLM / ChatModel 对比精讲)
① 老式 LLM(文本补全)
python
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-4o-mini")
result = llm.invoke("你好,请你介绍一下你自己。")
print(result) # LLM 直接打印,不用 .content
② 新式 ChatOpenAI(对话,主流)
python
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
result = model.invoke("你好,请你介绍一下你自己。")
print(result.content) # ChatModel 必须加
小白区分口诀 :带 Chat 的要 .content,不带 Chat 的直接打印。
4. Ollama 本地模型原生调用(本地离线)
① OllamaLLM(文本)
python
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="deepseek-r1:8b")
result = llm.invoke("你好,请你介绍一下你自己。")
print(result)
② ChatOllama(对话,推荐)
python
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 接入。
python
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模型调用
python
# 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. 依赖安装(新手必看)
bash
pip install python-dotenv langchain-openai
易错点:是 python-dotenv,不是 dotenv,装错直接报错。
2. 通用核心代码(所有参数逐行讲解)
python
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接入
python
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 配置文件「全平台可直接复制模板」
放在项目根目录,想用哪个模型,就打开哪个注释,其余全部注释。
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. 流式输出参数(逐字打字效果)
python
question = "你好,请你介绍一下你自己。"
# stream 流式参数,所有兼容模型通用
for chunk in model.stream(question):
print(chunk.content, end="", flush=True)
小白解释:invoke 是一次性出结果,stream 是逐字返回,适合聊天界面。
2. 厂商独有扩展参数 extra_body
python
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