Skip to content

LangChain 模型初始化参数 ​

来源:LangChain 教程 · 第 02 章《模型的创建与调用》 适用对象:ChatOpenAI、ChatDeepSeek 等 Model Class,以及 init_chat_model

1. 初始化参数的作用 ​

模型初始化参数决定两件事:程序如何连接模型服务,以及模型如何生成内容。连接参数通常包括模型名称、供应商、API Key、Base URL、超时时间和重试次数;推理参数主要包括温度、最大输出 Token 数量、采样范围和停止条件。

常用初始化方式如下:

python
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
import os

load_dotenv(override=True)

model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    temperature=0.7,
    max_tokens=1000,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke("你好,一句话介绍一下你自己")
print(response.content)

建议将 API Key 和 Base URL 放在 .env 文件中,并将 .env 加入 .gitignore,避免密钥进入代码仓库。

2. 常用参数 ​

参数类型作用默认值
modelstr指定模型名称。使用 init_chat_model 时可以写成 provider:model,例如 openai:gpt-4o无
model_providerstr指定模型供应商,例如 openai、deepseek、anthropic、ollama无
api_keystrAPI 鉴权密钥。不传时通常从供应商约定的环境变量读取None
base_urlstr模型供应商的 API 请求地址,常用于 OpenAI 兼容接口None
temperaturefloat控制输出随机性。值越高,结果越有变化;值越低,结果越稳定0.7
max_tokensint限制模型本次生成的最大 Token 数量None
timeout / request_timeoutfloat网络请求超时时间,单位为秒None
max_retriesint网络错误、限流等请求失败时的最大重试次数6

不同模型类的参数名可能略有差异。例如,某些专用类使用 api_base,而 ChatOpenAI 与 OpenAI 兼容接口通常使用 base_url。实际使用时应以具体集成类的文档和 model_fields 为准。

3. temperature 参数 ​

temperature 控制模型选择低概率 Token 的倾向。温度低时,模型更倾向于选择概率最高的结果;温度高时,模型会保留更多随机性,表达更灵活,但结果稳定性会下降。

范围特点常见场景
0.0–0.3稳定、一致数学计算、数据提取、分类、代码生成、结构化输出
0.5–0.7稳定性与创造性平衡普通聊天、问答、解释概念
0.8–1.5表达更灵活写作、广告文案、头脑风暴
1.5–2.0随机性和创造性较强诗歌、故事和实验性创作

3.1 低温度示例 ​

结构化数据提取、分类和代码生成通常优先使用低温度:

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    temperature=0,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke(
    "张三,男,30岁,拥有8年编程开发经验,目前担任技术专家。"
    "请提取姓名、性别、年龄、编程经验年限和职位,返回 JSON。"
)
print(response.content)

3.2 高温度示例 ​

创意文案和头脑风暴可以适当提高温度:

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    temperature=1.5,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke("为一款极致静音的机械键盘写 3 个有诗意的广告语")
print(response.content)

temperature=0 只能降低随机性,不能保证模型绝对正确;模型本身的知识、提示词质量和输出格式约束仍然会影响结果。

4. max_tokens 参数 ​

max_tokens 限制模型输出的最大 Token 数量。它控制的是输出长度,不是输入上下文长度。设置得过小,回答可能在句子中途被截断;设置得过大,会增加潜在的计费量和响应时间。

python
model = init_chat_model(
    model="gpt-5.4-mini",
    model_provider="openai",
    max_tokens=15,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke("请用中文详细介绍什么是 AI")
print(response.content)

如果输出被截断,可以检查响应元数据中的结束原因,例如 finish_reason 是否为 length:

python
print(response.response_metadata.get("finish_reason"))

Token 是模型分词器拆分出的文本单元,也是许多模型服务计算费用和限制上下文的基础单位。不同模型使用的分词算法不同,同一段文本的 Token 数量可能不同。

5. 连接与可靠性参数 ​

5.1 API Key 与 Base URL ​

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

api_key 用于身份认证,base_url 决定请求发送到哪个服务地址。使用 OpenAI 兼容接口时,通常只需要替换 base_url 和 model 就能切换不同供应商,但具体模型是否支持某项能力仍需单独确认。

5.2 timeout 与 max_retries ​

timeout 或 request_timeout 用于限制单次请求等待时间;max_retries 用于处理网络抖动、临时限流等可恢复错误。重试次数过高会延长失败请求的总耗时,重试次数过低则可能放大偶发网络问题。

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    timeout=30,
    max_retries=3,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

6. 完整参数的查看方式 ​

Model Class 的参数由自身定义和父类 BaseChatModel 继承而来。不同供应商、不同版本的参数可能不同,遇到参数名或兼容性问题时,可以直接查看类的 model_fields。

6.1 查看模型支持的参数名 ​

python
from langchain_openai import ChatOpenAI

print(ChatOpenAI.model_fields.keys())

也可以查看通过 init_chat_model 创建出的具体模型对象:

python
from langchain.chat_models import init_chat_model

temp_model = init_chat_model(
    model="deepseek-v4-flash",
    model_provider="deepseek",
)

print(temp_model.model_fields.keys())

6.2 查看参数类型、默认值和描述 ​

python
from langchain_deepseek import ChatDeepSeek

for name, field in ChatDeepSeek.model_fields.items():
    print(name)
    print("  annotation:", field.annotation)
    print("  default:", field.default)
    print("  description:", getattr(field, "description", None))
    print("  alias:", field.alias)

7. 完整参数的分类 ​

完整参数可以按用途分成四组。日常开发一般只需要配置前两组中的少量参数。

7.1 客户端与连接参数 ​

这组参数决定程序如何连接模型服务:

参数作用
api_key / openai_api_key鉴权密钥
api_base / openai_api_baseAPI 地址
request_timeout网络请求超时设置
max_retries请求失败重试次数
http_client / http_async_client自定义同步或异步 HTTP 客户端
openai_proxy代理服务器配置
default_headers / default_query每次请求默认携带的 Header 或 Query 参数

7.2 模型推理参数 ​

这组参数影响模型生成结果:

参数作用
model_name指定具体模型
temperature控制随机性
top_p控制核采样范围
max_tokens限制最大输出 Token 数
stop到达指定字符串时停止生成
streaming是否开启流式传输
n生成候选回复的数量
reasoning是否启用推理模式,是否生效取决于模型
reasoning_effort控制部分推理模型的推理强度
presence_penalty惩罚已经出现过的主题,鼓励引入新内容
frequency_penalty根据词语出现频率进行惩罚,减少重复
seed在供应商支持时控制结果的可复现性
logprobs / top_logprobs返回 Token 概率信息
logit_bias调整特定 Token 的出现概率

7.2.1 使用 top_p 控制采样范围 ​

top_p 也叫核采样参数。模型只在累计概率达到 top_p 的候选 Token 中进行选择。temperature 和 top_p 都会影响随机性,通常先调整其中一个,避免同时调节后难以判断效果。

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    temperature=0.7,
    top_p=0.8,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke("用三句话介绍机器学习")
print(response.content)

7.2.2 使用 stop 提前结束生成 ​

stop 可以传入一个字符串或字符串列表。当模型生成到指定内容时,当前回复会提前结束,适合固定格式的输出。

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    temperature=0,
    stop=["END"],
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

response = model.invoke("列出三个 Python Web 框架,每行一个,最后输出 END")
print(response.content)

是否支持 stop 以及停止字符串是否会出现在返回结果中,取决于底层供应商实现。

7.2.3 使用 streaming 获取流式输出 ​

streaming 用于设置模型是否允许流式传输。调用时使用 .stream(),模型会逐块返回内容,适合聊天窗口和长文本生成。

python
model = init_chat_model(
    model="deepseek-v3.2",
    model_provider="openai",
    streaming=True,
    api_key=os.getenv("CLOSEAI_API_KEY"),
    base_url=os.getenv("CLOSEAI_BASE_URL"),
)

for chunk in model.stream("请分三点介绍 LangChain"):
    print(chunk.content, end="", flush=True)

如果只需要一次性拿到完整结果,可以继续使用 .invoke();是否真正以流式方式返回,还要看模型服务和网络客户端是否支持。

7.2.4 使用 n 生成多个候选结果 ​

n 表示请求模型生成多少个候选结果。该参数会增加模型调用量和返回数据量,只有底层接口支持时才能使用。

python
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-4o-mini",
    n=3,
    temperature=0.8,
    api_key=os.getenv("OPENAI_API_KEY"),
)

response = model.generate([
    [HumanMessage(content="为一个记账应用写一句宣传语")]
])

for generation in response.generations[0]:
    print(generation.text)

不同 LangChain 版本或模型类对多候选结果的返回结构可能不同。使用前应先打印 type(response) 和 response,确认当前集成类的返回格式。

7.2.5 使用 presence_penalty 和 frequency_penalty ​

两个惩罚参数都用于减少重复,但作用角度不同:presence_penalty 更关注某个主题是否已经出现过,frequency_penalty 更关注某个 Token 或词语出现的次数。

python
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0.7,
    presence_penalty=0.4,
    frequency_penalty=0.6,
    api_key=os.getenv("OPENAI_API_KEY"),
)

response = model.invoke("写一篇介绍远程办公优点的短文,避免重复使用相同词语")
print(response.content)

惩罚值的可用范围和实际效果由模型供应商决定。值设置过高可能使表达变得生硬,建议从较小值开始调整。

7.2.6 使用 seed 尝试复现结果 ​

seed 用于在供应商支持的情况下,让相同输入和相同参数更容易得到相近结果。它不能保证所有服务、所有时间都返回完全相同的内容。

python
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-4o-mini",
    temperature=0.2,
    seed=42,
    api_key=os.getenv("OPENAI_API_KEY"),
)

response = model.invoke("用一句话解释什么是向量数据库")
print(response.content)

如果服务端不支持 seed,初始化或请求阶段可能报错。使用兼容接口时,需要确认中转平台是否会透传该参数。

7.2.7 查看 Token 概率信息 ​

logprobs 用于请求返回生成 Token 的概率信息,top_logprobs 用于查看每个位置概率最高的若干候选 Token。这类参数适合分析模型置信度或研究采样过程。

python
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model="gpt-4o-mini",
    logprobs=True,
    top_logprobs=3,
    api_key=os.getenv("OPENAI_API_KEY"),
)

response = model.invoke("选择一个答案:Python 最常用的包管理工具是 pip 还是 Excel?")
print(response.content)
print(response.response_metadata.get("logprobs"))

返回字段名称和嵌套结构由底层 API 决定。如果响应中没有 logprobs,应先确认模型、供应商和当前版本是否支持该能力。

7.3 LangChain 通用参数 ​

这组参数主要管理 LangChain 内部行为:

参数作用
name为模型实例命名,便于追踪和区分
verbose是否输出详细日志
callbacks注册回调处理器,可接入监控或 LangSmith
tags / metadata为调用添加标签和元数据
cache是否缓存模型请求结果
rate_limiter控制请求频率
disable_streaming控制是否禁用流式调用
include_response_headers是否在结果中包含响应 Header

7.4 高级与扩展参数 ​

model_kwargs 和 extra_body 可以透传底层 OpenAI 兼容接口支持、但 LangChain 尚未单独定义的字段。底层 client、async_client、root_client 等通常由 SDK 内部创建,不建议在普通初始化中手动传入。

python
model = ChatOpenAI(
    model="gpt-4o",
    model_kwargs={
        "some_provider_specific_option": True,
    },
)

透传参数必须以实际供应商 API 文档为准。参数名写错、供应商不支持或将参数放错位置,都会导致请求失败。

8. 参数选择建议 ​

  1. 先确定 model、model_provider、api_key 和 base_url,确认模型能正常调用。
  2. 结构化任务优先从 temperature=0 或较低值开始,再根据结果稳定性调整。
  3. 创作类任务可以提高 temperature,但要结合任务对一致性的要求。
  4. 根据回答长度设置 max_tokens,并观察 finish_reason,避免无意截断。
  5. 网络不稳定时配置合理的 timeout 和 max_retries,避免无限等待。
  6. 需要使用冷门参数时,先通过 model_fields 确认参数是否存在,再查供应商 API 文档确认语义。
  7. 不同模型对 reasoning、top_p、presence_penalty 等参数的支持并不一致,不能只根据参数名推断实际效果。