Skip to content

LangChain Chat Model 常用参数

上一节我们学习了 init_chat_model() 的基本用法。

本节将详细介绍在调用模型时常用的控制参数,帮助你更好地控制模型的行为。


temperature——控制创造性与确定性

temperature 是最常用的参数,取值范围 0 到 2。它控制模型输出的随机程度。

实例

python

from langchain.chat_models import init_chat_model

# 同一问题,不同 temperature 的对比

question = "用一句话介绍菜鸟教程 RUNOOB"

# temperature=0:输出非常确定,几乎每次结果一样

model_low = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)

resp1 = model_low.invoke(question)

resp2 = model_low.invoke(question)

print(f"temperature=0 第1次: {resp1.content}")

print(f"temperature=0 第2次: {resp2.content}")

print(f"两次结果相同: {resp1.content == resp2.content}")

print()

# temperature=1.5:输出多样化,每次可能不同

model_high = init_chat_model("deepseek:deepseek-v4-flash", temperature=1.5)

resp1 = model_high.invoke(question)

resp2 = model_high.invoke(question)

print(f"temperature=1.5 第1次: {resp1.content}")

print(f"temperature=1.5 第2次: {resp2.content}")

运行结果:

python
temperature=0 第1次: 菜鸟教程(RUNOOB)是一个为编程初学者提供免费教程的学习平台。
temperature=0 第2次: 菜鸟教程(RUNOOB)是一个为编程初学者提供免费教程的学习平台。
两次结果相同: True

temperature=1.5 第1次: 菜鸟教程(RUNOOB)是一个简单易懂的编程与网络技术入门学习平台。
temperature=1.5 第2次: RUNOOB(菜鸟教程)是深受编程新手喜爱的中文免费在线技术学习平台。
temperature 值效果适用场景
0 ~ 0.3输出稳定、确定,每次结果几乎一致数据提取、分类、代码生成、翻译
0.5 ~ 0.7适度的创造性,输出自然但不偏离主题日常对话、内容总结
0.8 ~ 1.2输出多样化,有较多发挥空间创意写作、头脑风暴
1.3 ~ 2.0输出非常随机,可能出现意外内容探索性生成(不太推荐用于生产)

temperature=0 不等于"完全相同"。由于模型内部计算的浮点精度差异,极端情况下仍可能有微小差异。如果需要绝对的确定性,有些模型提供了 seed 参数。


max_tokens——控制输出长度与成本

max\_tokens 限制模型输出的最大 Token 数。一个 Token 大约相当于 0.75 个英文单词或 0.5 个中文字。

实例

python

from langchain.chat_models import init_chat_model

model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)

# max_tokens=30:限制输出在 30 个 Token 以内

response_short = model.invoke(

    "详细介绍一下菜鸟教程 RUNOOB 平台",

    max_tokens=30

)

print(f"限制 30 tokens ({len(response_short.content)} 字符):")

print(response_short.content)

print()

# max_tokens=200:允许更长的输出

response_long = model.invoke(

    "详细介绍一下菜鸟教程 RUNOOB 平台",

    max_tokens=200

)

print(f"限制 200 tokens ({len(response_long.content)} 字符):")

print(response_long.content)

运行结果:

python
限制 30 tokens (42 字符):
菜鸟教程(RUNOOB)是一个面向编程初学者的在线学习平台,提供各种编程语言的教程和实例。

限制 200 tokens (306 字符):
菜鸟教程(RUNOOB)是一个面向编程初学者的在线学习平台,提供了丰富的编程教程和参考资料。
该平台涵盖了 HTMLCSS、JavaScript、Python、Java、C、C++PHPSQL 等多种编程语言和技术。
菜鸟教程的特点包括:
1. 内容系统化:从基础到进阶,帮助学习者逐步掌握编程知识
2. 实例丰富:每个知识点都配有可运行的代码示例
3. ...

max_tokens 是对输出长度的硬限制。如果设置过低,模型的回答可能在句中突然截断。一般建议根据场景设置在 100-2000 之间。对于"一句话回答"类场景,30-100 就够了;对于"详细解释"类场景,建议 500-2000。


timeout 与 max_retries——网络可靠性

在生产环境中,网络请求可能因为各种原因失败。这两个参数帮助你控制请求行为。

实例

python

from langchain.chat_models import init_chat_model

# 生产环境推荐配置

model = init_chat_model(

    "deepseek:deepseek-v4-flash",

    # 单次请求最多等待 30 秒

    timeout=30,

    # 失败后最多重试 3 次(总共 4 次请求机会)

    max_retries=3,

)

# 模拟正常调用

try:

    response = model.invoke("菜鸟教程 RUNOOB 是什么?")

    print(f"调用成功: {response.content[:50]}...")

except Exception as e:

    print(f"调用失败: {e}")
参数说明建议值
timeout单次请求的最大等待时间(秒)。None 表示不限制30~60(太短容易超时,太长用户体验差)
max_retries失败后的重试次数。0 表示不重试2~3(足够处理偶发网络问题)

设置 timeout 和 max_retries 的费时分析:

python
假设 timeout=30, max_retries=3
单次成功: ~2s
第1次失败+重试成功: ~2s + ~2s = ~4s
全部失败: 4次 × 30s = 最多 120s 才抛出异常

base_url——自定义 API 地址

base_url 参数在你需要通过代理、中转服务或私有部署访问模型时非常有用。

实例

python

from langchain.chat_models import init_chat_model

# 场景 1:通过代理访问 OpenAI

model = init_chat_model(

    "deepseek:deepseek-v4-flash",

    base_url="https://your-proxy-domain.com/v1",  # 代理地址

)

# 场景 2:使用兼容 OpenAI 接口的第三方服务

# 很多国产模型提供了 OpenAI 兼容接口

model = init_chat_model(

    "deepseek:deepseek-v4-flash",           # provider 写 openai

    base_url="https://api.third-party.com/v1",  # 但实际指向第三方

    api_key="your-third-party-key",  # 第三方 API Key

)

# 场景 3:连接本地模型(如 vLLM、Ollama)

model = init_chat_model(

    "openai:qwen2.5",               # 本地模型名

    base_url="http://localhost:8000/v1",  # 本地服务地址

    api_key="not-needed",           # 本地通常不需要 Key

)

base_url 改变的是 API 端点的地址,但 provider 参数决定了行为模式。比如 provider="openai" 会使用 OpenAI 的消息格式,即使 base_url 指向的是别的服务。确保目标服务兼容你指定的 provider 格式。


其他常用参数

top_p——核采样

实例

python

from langchain.chat_models import init_chat_model

# top_p 是另一种控制随机性的方式

# 模型只会从累积概率达到 top_p 的词中采样

# top_p=0.1 表示只从最高概率的 10% 的词中选择

model = init_chat_model(

    "deepseek:deepseek-v4-flash",

    top_p=0.9,       # 只考虑累积概率前 90% 的词

)

response = model.invoke("介绍菜鸟教程 RUNOOB")

print(response.content[:100])

一般建议只调整 temperature 或 top_p 中的一个,不要同时调节。如果同时设置,模型的行为可能难以预测。

stop——停止序列

实例

python

from langchain.chat_models import init_chat_model

model = init_chat_model("deepseek:deepseek-v4-flash")

# stop 参数指定停止序列,模型遇到这些词时会立即停止生成

response = model.invoke(

    "列出五个编程学习网站,每个一行",

    stop=["\n"]  # 遇到换行就停止,只返回第一个

)

print(f"限制 stop=['\\n']: {response.content}")

运行结果:

python
限制 stop=['\n']: 1. 菜鸟教程(RUNOOB

seed——可重复性(部分模型支持)

实例

python

from langchain.chat_models import init_chat_model

# 某些模型支持 seed 参数,用于获得确定性的输出

# 相同的 seed + 相同的输入 = 相同的输出

model = init_chat_model("deepseek:deepseek-v4-flash", seed=42, temperature=0)

resp1 = model.invoke("介绍菜鸟教程")

resp2 = model.invoke("介绍菜鸟教程")

print(f"seed=42, 结果相同: {resp1.content == resp2.content}")

参数速查表

参数类型默认值何时使用
temperaturefloat因模型而异任务需要稳定性时设为 0~0.3,需要创造性时设为 0.7~1.0
max_tokensint模型上限输出长度需要控制时
timeoutint/floatNone生产环境建议始终设置
max_retriesint因模型而异网络不稳定时建议 2~3
base_urlstr官方地址使用代理、中转或本地服务时
top_pfloat1.0需要核采样控制时(替代 temperature)
stoplist[str]需要精确控制输出结尾时

AI 思考中...

LangChain 模型调用 — init_chat_model() 函数

LangChain Chat Model 高级用法

基于 VitePress 构建,部署于 GitHub Pages