今天最新开源deepseek V4版本正式发布
deepseek-v4-flash
deepseek-v4-pro
deepseek-chat (将于 2026/07/24 弃用)
deepseek-reasoner (将于 2026/07/24 弃用)
官方文档:首次调用 API | DeepSeek API Docs()
window本地环境:
- langchain 版本: 1.2.1
- langchain-core 版本: 1.3.0
- langchain-community 版本: 0.4.1
- langchain-ollama 版本: 1.1.0
- langchain-openai 版本:1.2.0
model = ChatOpenAI(
model="deepseek-chat", # 和思考模式deepseek-reasoner 2026年7月24日弃用
api_key=ds_api_key,
base_url="https://api.deepseek.com/v1",
)
出现问题:
- 报错信息:openai.BadRequestError: Error code: 400 - {'error': {'message': 'deepseek-reasoner does not support this tool_choice', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_request_error'}} During task with name 'model' and id '82221c1d-e17f-f468-9038-9ebd5d3e9b8e'
- 警告信息:如下sys:1: UserWarning: WARNING! tool_choice is not default parameter. tool_choice was transferred to model_kwargs. Please confirm that tool_choice is what you intended.
解决方案:
model = ChatOpenAI(
model="deepseek-v4-flash", # 选择 deepseek-V4-flash(284B-13b) 模型 deepseek-v4-pro(1.6T-49b)
api_key=ds_api_key,
base_url="https://api.deepseek.com/v1",
# 解决方法如下:新增两个配置 mode_kwargs/exrta_body
model_kwargs={
"tool_choice": "auto",
},
# 同样建议关闭思考模式
extra_body={"thinking": {"type": "disabled"}},
)
原因:
deepseek-v4-flash 在 chat/completions 标准接口中,思考模式默认是开启的通过上述设置,强制模型使用兼容性更好的标准模式,从而解决冲突。
1️⃣ 用 model_kwargs 包裹 tool_choice
为了确保DeepSeek的 tool_choice 参数能被正确接收。
虽然新版LangChain已原生支持 tool_choice,但其内部可能仍需将参数“下沉”到 model_kwargs 中,再传递给底层API,因此直接作为顶层参数可能传递失效。将其放进 model_kwargs 可以确保参数100%被正确路由,避免警告的同时也保证了兼容性。
2️⃣ 用 extra_body 包裹 thinking
这是DeepSeek API特有的、非OpenAI标准的参数。
根据LangChain官方文档,model_kwargs 用于标准OpenAI API参数,对于自定义参数必须使用 extra_body,否则可能引发API错误thinking参数是DeepSeek专属,只有通过extra_body注入,LangChain才会将它添加到HTTP请求的自定义JSON部分。
⚙️ 配置原则对比
| 参数 | 所属类别 | LangChain配置位置 | 配置原因 |
|---|---|---|---|
tool_choice | OpenAI标准API参数 | model_kwargs | 确保100%被正确路由,避免警告,保证兼容性 |
thinking | DeepSeek特有/非OpenAI标准参数 | extra_body | 必须放在此处,才能被正确传递 |
所以,你发现的方法并不是奇怪的“魔改”,恰恰是最符合LangChain设计哲学的官方用法。它保证了未来切换到官方 langchain-deepseek 包时,代码能无缝迁移