以ChatDeepSeek为例,完整参数列表由如下几部分构成:
1、客户端与连接参数 (Networking)
这类参数决定了代码“怎么连到服务端”,而不是“让模型怎么生成”。
![图片[1]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-617-1024x568.png)
2、模型推理参数 (Model Inference)
这些是直接传递给 DeepSeek 模型 API 的参数,决定了生成内容的质量和风格。
![图片[2]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-618-1024x812.png)
3、LangChain 框架通用参数
由 LangChain 的BaseChatModel 定义,所有其子类ChatXxx 都具备的,用于管理 LangChain 内部的逻辑(如日志、回调、元数据),仅在内部生效。
![图片[3]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-619.png)
4、高级与特定扩展参数
这类参数通常用于特定场景,或为了保持与 OpenAI 协议的兼容性而存在。
Deepseek 官方文档明确说明见下图:
![图片[4]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-620.png)
![图片[5]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-621-1024x575.png)
![图片[6]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-622.png)
上文输出的字段列表不包含tools字段,因此我们需要通过model_kwargs传递。
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
from rich import print as rprint
# 从.env文件中加载环境变量
load_dotenv(override=True)
model = init_chat_model(
model="deepseek:deepseek-v4-flash",
model_kwargs={"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather of a location, the user should
supply a location first.",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San
Francisco, CA",
}
},
"required": ["location"]
},
}
},
]}
)
# 向模型发送单条数据
response = model.invoke("你好,今天北京的天气如何")
# 打印响应
rprint(response)
输出如下
AIMessage(
content='你好!让我帮你查一下北京今天的天气情况。',
additional_kwargs={
'refusal': None,
'reasoning_content':
'用户想知道北京今天的天气情况。我需要使用get_weather工具来查询北京的天气。让我调用
这个工具。'
},
response_metadata={
'token_usage': {
'completion_tokens': 78,
'prompt_tokens': 303,
'total_tokens': 381,
'completion_tokens_details': {
'accepted_prediction_tokens': None,
'audio_tokens': None,
'reasoning_tokens': 23,
'rejected_prediction_tokens': None
},
'prompt_tokens_details': {'audio_tokens': None,
'cached_tokens': 256},
'prompt_cache_hit_tokens': 256,
'prompt_cache_miss_tokens': 47
},
'model_provider': 'deepseek',
'model_name': 'deepseek-v4-flash',
'system_fingerprint':
'fp_8b330d02d0_prod0820_fp8_kvcache_20260402',
'id': '6d8e4d22-9e0b-4036-9fe0-a3bdf29c2f97',
'finish_reason': 'tool_calls',
'logprobs': None
},
id='lc_run--019e4480-c8df-7f33-87cf-8d978779b0f3-0',
tool_calls=[
{
'name': 'get_weather',
'args': {'location': '北京'},
'id': 'call_00_BT3PTJVDQlb9C2uhhJkc4856',
'type': 'tool_call'
}
],
invalid_tool_calls=[],
usage_metadata={
'input_tokens': 303,
'output_tokens': 78,
'total_tokens': 381,
'input_token_details': {'cache_read': 256},
'output_token_details': {'reasoning': 23}
}
)
可以看到,输出包含了tool_calls 字段,说明工具被模型正确识别了。
参数:extra_body
这里用于存放模型厂商基于OpenAI API协议扩展的字段。
查阅OpenAI Chat Completions文档和DeepSeek对话补全API文档可知, thinking 是DeepSeek扩展的字段,用于控制是否启用思考模式。
![图片[7]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-623-1024x556.png)
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
from rich import print as rprint
# 从.env文件中加载环境变量
load_dotenv(override=True)
model = init_chat_model(
model="deepseek:deepseek-v4-flash",
extra_body={"thinking": {"type": "enabled"}},
)
# 向模型发送单条数据
response = model.invoke("你好,一句话回答")
# 打印响应
rprint(response)
输出如下
AIMessage(
content='你好,请问有什么可以帮你的?',
additional_kwargs={
'refusal': None,
'reasoning_content':
'好的,用户的问题很简单,就是要求“一句话回答”。我需要直接针对用户的指令做出回应,提供
一句简洁的话。用户没有提出具体问题,所以我的回答可以是一个通用的问候或确认,表明我准备
就绪。想到了用“你好,请问有什么可以帮你的?”这句话,既符合“一句话”的要求,又自然地开
启对话,邀请用户提出具体问题。'
},
response_metadata={
'token_usage': {
'completion_tokens': 87,
'prompt_tokens': 8,
'total_tokens': 95,
'completion_tokens_details': {
'accepted_prediction_tokens': None,
'audio_tokens': None,
'reasoning_tokens': 78,
'rejected_prediction_tokens': None
},
'prompt_tokens_details': {'audio_tokens': None,
'cached_tokens': 0},
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 8
},
'model_provider': 'deepseek',
'model_name': 'deepseek-v4-flash',
'system_fingerprint':
'fp_8b330d02d0_prod0820_fp8_kvcache_20260402',
'id': '6da3303d-c432-4a10-b9a3-0b28ab7ccb0d',
'finish_reason': 'stop',
'logprobs': None
},
id='lc_run--019e4485-3a34-7c12-aba8-9a53ce0fd4c5-0',
tool_calls=[],
invalid_tool_calls=[],
usage_metadata={
'input_tokens': 8,
'output_tokens': 87,
'total_tokens': 95,
'input_token_details': {'cache_read': 0},
'output_token_details': {'reasoning': 78}
}
)
输出包含了reasoning_content ,说明启用了思考模式。与extra_body={“thinking”: {“type”:”disabled”}}, 可以对比。
AIMessage(
content='好的,我们一步一步来分析这个数学问题。题目是:\n\n2 + 3 * 2 =
?\n\n根据数学中的运算顺序规则(通常称为“先乘除,后加减”),我们应该先计算乘法部分。
\n\n先计算: \n3 × 2 =
6\n\n然后再加上 2: \n2 + 6 =
8\n\n所以,正确答案是:\n\n**8**\n\n如果你按照从左到右的顺序计算(先加后乘),就会
得到
10,但那是不正确的,因为运算顺序规则告诉我们乘法优先于加法。希望这个解释对你有帮
助!',
additional_kwargs={'refusal': None},
response_metadata={
'token_usage': {
'completion_tokens': 119,
'prompt_tokens': 14,
'total_tokens': 133,
'completion_tokens_details': None,
'prompt_tokens_details': {'audio_tokens': None,
'cached_tokens': 0},
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 14
},
'model_provider': 'deepseek',
'model_name': 'deepseek-v4-flash',
'system_fingerprint':
'fp_8b330d02d0_prod0820_fp8_kvcache_20260402',
'id': 'ffca80fc-cfe8-4cdd-831a-3ed760c713c6',
'finish_reason': 'stop',
'logprobs': None
},
id='lc_run--019e4489-0479-77c0-b4e7-b507956e10cc-0',
tool_calls=[],
invalid_tool_calls=[],
usage_metadata={
'input_tokens': 14,
'output_tokens': 119,
'total_tokens': 133,
'input_token_details': {'cache_read': 0},
'output_token_details': {}
}
)
不包含reasoning_content ,说明没有启用思考模式。
6.3.3 需要记住哪些参数
记住常见参数及用法即可,如果需要精细控制模型输出,可以查阅OpenAI和特定模型供应商的官方文档,通过model_kwargs 或extra_body 传递。
6.4 模型调用中config参数
在调用模型时(如使用 invoke(), ainvoke(), stream(),batch()等方法时),我们可以传入config参数。
def invoke(
self,
input: LanguageModelInput,
config: RunnableConfig | None = None,
*,
stop: list[str] | None = None,
**kwargs: Any,
) -> AIMessage
config参数:允许在调用模型时,动态地配置和控制模型的行为,而无需在初始化时就固定所有参数,
这为应用带来了极大的灵活性和可维护性。
关于config中可配参数的解释参考:
https://reference.langchain.com/python/langchain-core/runnables/config/RunnableConfig
举例:
deepseek_llm.invoke(
"你好",
config={
"run_name": "...", # 在LangSmith中这次运行会显示为指定名
称
"tags": ["test", "development"], # 打上标签便于分类查找
"metadata": {"user_id": "123"}, # 记录用户ID
"callbacks": [custom_handler], # 启用自定义回调函数
"configurable":{
"model": "deepseek-reasoner", # 配置模型参数
"temperature": 0.7, # 配置温度参数
"max_tokens": 100 # 配置最大令牌数
}
}
)
config中支持配置的参数如下:
![图片[8]-6.3.2 模型类的参数构成-大赛人网](https://www.dsrw.com/wp-content/uploads/2026/11/image-624.png)
说明如下:
- config中参数run_name 、tags 、callbacks 主要用在LangSmith中,用于追踪、筛选和调试。
- metadata 可以配置用户指定的一些信息,在工作流开发中,当整个流程被包装为Runnable链时,可以将这些参数传递给后续的链节点使用。
- configurable 中可配置的参数与init_chat_model 初始化模型参数一样,与在初始化模型时设置的参数(如 temperature=0.7)的关键区别在于:
- init_chat_model初始化参数:模型的默认设置,适用于该模型实例的大部分场景。
- 运行时 config: 单次调用的特定设置,优先级更高,针对本次调用进行的特殊调整。
举例1:
当需要处理大量输入时,为了避免对模型服务造成过大压力或触发速率限制,在config中使用
max_concurrency参数控制最大并行数。
large_list_of_inputs = [....,....,....]
model.batch(
large_list_of_inputs,
config={
'max_concurrency': 5 # 限制最大并发数为5
}
)
举例2:
from langchain.chat_models import init_chat_model
from dotenv import load_dotenv
import os
from rich import print as rprint
# 从.env文件中加载环境变量
load_dotenv(override=True)
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
DEEPSEEK_BASE_URL = os.getenv("DEEPSEEK_BASE_URL")
# 1. 初始化模型
model = init_chat_model(
model="deepseek-v4-flash",
model_provider="deepseek",
api_key=DEEPSEEK_API_KEY,
base_url=DEEPSEEK_BASE_URL,
temperature=0.2,
max_tokens=500,
# 指定可调整参数
configurable_fields=("model", "model_provider", "temperature",
"max_tokens"),
)
# 2. 准备 config 字典
config = {
"run_name": "joke_generation", # 在LangSmith中这次运行会显示为
"joke_generation"
"tags": ["tag1", "tag2"], # 打上标签便于分类查找
"metadata": {"user_id": "123"}, # 记录用户ID
"configurable":{
"model": "deepseek-v4-pro", # 配置模型参数
"model_provider": "openai", # 配置模型提供商参数
"temperature": 0.7, # 配置温度参数
"max_tokens": 1000 # 配置最大令牌数
}
}
# 3. 调用模型并传入config
response = model.invoke(
"1 + 2 = ?",
config=config
)
rprint(response)
AIMessage(
content='1 + 2 = 3',
additional_kwargs={'refusal': None},
response_metadata={
'token_usage': {
'completion_tokens': 65,
'prompt_tokens': 11,
'total_tokens': 76,
'completion_tokens_details': {
'accepted_prediction_tokens': None,
'audio_tokens': None,
'reasoning_tokens': 57,
'rejected_prediction_tokens': None
},
'prompt_tokens_details': {'audio_tokens': None,
'cached_tokens': 0},
'prompt_cache_hit_tokens': 0,
'prompt_cache_miss_tokens': 11
},
'model_provider': 'openai',
'model_name': 'deepseek-v4-pro',
'system_fingerprint':
'fp_9954b31ca7_prod0820_fp8_kvcache_20260402',
'id': 'aaccc23c-323e-40e9-a246-66fb4e2356ab',
'finish_reason': 'stop',
'logprobs': None
},
id='lc_run--019e4498-b166-7d51-bd8d-56ec5faac32a-0',
tool_calls=[],
invalid_tool_calls=[],
usage_metadata={
'input_tokens': 11,
'output_tokens': 65,
'total_tokens': 76,
'input_token_details': {'cache_read': 0},
'output_token_details': {'reasoning': 57}
}
)
说明:配置configurable覆盖默认参数时需要在“init_chat_model”初始化模型中指定“configurable_fields”参数来指定模型运行时可替换的参数有哪些。

















请登录后查看评论内容