LangChain 1.0 入门(二):LangChain 全模型标准化接入最佳实践(小白参数详解版)

系列文章

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

相关推荐
计算机魔术师1 小时前
我看了 Hugging Face 的 Daily Papers,发现这件事
前端
yu俞娥宝2 小时前
Codex官网前端可抄吗?技术拆解、风险边界与合规借鉴方案
前端
捧 花3 小时前
FastAPI 基础语法:从一个完整接口理解 Web API 的设计
前端·python·fastapi·middleware
Hilaku3 小时前
一行 CSS 新特性干掉 20 行 JavaScript ?
前端·javascript·程序员
风月说与山鬼3 小时前
JS闭包详解
开发语言·javascript
JarvanMo3 小时前
AI 写代码暴增 161 倍,移动开发有没有变得更差?
前端
梦曦i3 小时前
RouterLink v2.5.0:H5端原生能力全面回归
前端·uni-app
小林ixn3 小时前
React + Zustand + JWT:从零实现登录鉴权与请求拦截
前端·react.js·前端框架
葡萄城技术团队3 小时前
下拉多选类型单元格:在 SpreadJS 里接入 xm\-select
前端