cheapaimodel搜尋
所有文章

如何在任何 OpenAI 相容 API 上設定 DeepSeek V4.1 Flash 的推理強度

作者:Nicho

DeepSeek V4.1 Flash 會先推理再回答。除非你另有指定,否則它會以 high 強度進行推理。你可以用一個請求欄位 reasoning_effort 來改變。它是請求主體中的一般欄位,因此你可以透過任何會傳遞它的端點,針對每個請求個別設定,包括我們的端點。你不需要不同的 model ID。

本文涵蓋四個等級、我們在 2026 年 10 月 16 日跑的測試中每個等級的成本、如何從程式碼與常見工具設定這個欄位,以及如何確認第三方端點確實有傳遞它。

簡短版

在 model 旁邊加上 reasoning_effort:

curl https://api.cheapaimodel.ai/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPAIMODEL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-1-flash",
    "reasoning_effort": "low",
    "messages": [{"role": "user", "content": "Summarize this changelog in three bullets: ..."}]
  }'
值 作用
none 關閉推理。模型立刻回答。
low 簡短推理。DeepSeek 建議用於簡單任務。
high 預設值。DeepSeek 建議用於日常 agent 工作。
max 最長的推理,用於較難的問題。

省略這個欄位等同於送出 high。

每個等級的成本

我們送了一道只有一個正確答案的數學題給 https://api.cheapaimodel.ai/v1:有多少對正整數序對 (a, b),兩者都不超過 100,能讓 a² + b² 被 13 整除?(答案是 1,491。)每個等級各跑 8 次,但 none 只跑了 3 次。所有請求皆為非串流。

強度 平均推理 token 範圍 平均時間 正確
none 0 0 14.0 s 3 次中 0 次
low 2,348 925–3,719 17.2 s 8 次中 7 次
high 3,081 2,232–3,629 20.4 s 8 次中 8 次
max 3,530 2,700–5,803 23.2 s 8 次中 7 次

推理 token 以輸出 token 計費。以我們跑測試時的 V4.1 Flash 價格,每百萬輸出 token 0.84 美元計算,平均每個請求在 low 時約花 0.002 美元,在 max 時約花 0.003 美元。

值得注意的地方:

  • 關閉推理時,模型每次都答錯。 有兩次它忽略了「只回覆數字」,在看得見的答案中把問題完整算了一遍,花的時間差不多等於推理。
  • high 和 max 在這道題上很接近。 max 只有一次明顯花更多,就是它選擇思考久得多的時候(那次跑了 5,803 個 token)。
  • low 用的 token 比 high 少約四分之一,但錯了一次。

一道題目不算基準測試。在你決定預設值之前,用自己的提示樣本跑兩個等級,比較 usage.completion_tokens_details.reasoning_tokens 與答案。

從程式碼設定

OpenAI Python SDK

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
)

completion = client.chat.completions.create(
    model="deepseek-v4-1-flash",
    reasoning_effort="low",
    messages=[{"role": "user", "content": "Explain recursion in one sentence."}],
)

print(completion.choices[0].message.content)
print(completion.usage.completion_tokens_details.reasoning_tokens)

reasoning_effort 是一般的引數。它的型別提示在 openai 2.8.0 包含 none,在 2.45.0 包含 max,所以較舊的版本仍會送出這些值,但你的型別檢查器會抱怨。推理文字本身在 completion.choices[0].message.reasoning_content。它不屬於 SDK 的型別,但 SDK 會保留額外欄位,所以該屬性仍可使用。

OpenAI TypeScript SDK

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.cheapaimodel.ai/v1",
  apiKey: process.env.CHEAPAIMODEL_API_KEY,
});

const completion = await client.chat.completions.create({
  model: "deepseek-v4-1-flash",
  reasoning_effort: "max",
  messages: [{ role: "user", content: "Explain recursion in one sentence." }],
});

'none' 和 'max' 從 openai 6.46.0 起可通過型別檢查。reasoning_content 同樣不在 SDK 的型別中,因此若要讀取它,請將訊息轉型為 SDK 的 ChatCompletionMessage 型別與 { reasoning_content?: string } 的交集。

Responses API

Responses API 在 reasoning 物件中接受同樣的四個值:

response = client.responses.create(
    model="deepseek-v4-1-flash",
    reasoning={"effort": "low"},
    input="Explain recursion in one sentence.",
)

print(response.output_text)
print(response.usage.output_tokens_details.reasoning_tokens)

使用 "effort": "none" 時,回應中沒有推理項目,且 reasoning_tokens 為 0。

關閉推理

有兩個開關。reasoning_effort: "none" 是可攜的那個。DeepSeek 也有自己的 thinking 物件,OpenAI Python SDK 會透過 extra_body 送出:

completion = client.chat.completions.create(
    model="deepseek-v4-1-flash",
    messages=[{"role": "user", "content": "..."}],
    extra_body={"thinking": {"type": "disabled"}},
)

在 TypeScript SDK 中,thinking 不在型別裡。用 // @ts-expect-error 註解把它加進去,這也是 SDK 的 README 對未記載參數的建議。不要為此使用每次請求的 body 選項:它會取代整個請求主體,而不是新增一個欄位。

使用其中一個開關就好。當我們兩個都送時,thinking 在兩種情況下都勝出:disabled 搭配 high 沒有推理,而 enabled 搭配 none 則有。

在框架中

我們把每個函式庫指向一個會記錄請求的本機伺服器,並檢查它實際送出的主體。每一個都能送出該欄位,但有好幾個的預設值不會送。

LangChain(Python)

import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="deepseek-v4-1-flash",
    base_url="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    reasoning_effort="low",
)

llm.invoke("Explain recursion in one sentence.", reasoning_effort="max")  # per call
  • 用 extra_body={"thinking": {...}} 送出 thinking。把它放在 model_kwargs 會引發 TypeError。
  • 傳入 reasoning={"effort": ...} 而非 reasoning_effort 會悄悄把 ChatOpenAI 切換到 Responses API。
  • ChatOpenAI 會丟棄 reasoning_content。token 數量會保留在 usage_metadata["output_token_details"]["reasoning"] 中。如果你需要文字,從 langchain-deepseek 取得的 ChatDeepSeek 會在 additional_kwargs["reasoning_content"] 中回傳它。

LlamaIndex

import os
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="deepseek-v4-1-flash",
    api_base="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    is_chat_model=True,
    additional_kwargs={"reasoning_effort": "low"},
)
  • 使用 additional_kwargs。建構子也有 reasoning_effort= 參數,但它只會對 OpenAI 自家的推理模型送出,所以搭配 V4.1 Flash 時它會無聲無息地不做任何事。它也會拒絕 "max"。
  • thinking 要再往下一層:additional_kwargs={"extra_body": {"thinking": {...}}}。

Vercel AI SDK

import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
import { generateText } from "ai";

const cheapaimodel = createOpenAICompatible({
  name: "cheapaimodel",
  baseURL: "https://api.cheapaimodel.ai/v1",
  apiKey: process.env.CHEAPAIMODEL_API_KEY,
});

const { text, reasoningText } = await generateText({
  model: cheapaimodel("deepseek-v4-1-flash"),
  prompt: "Explain recursion in one sentence.",
  providerOptions: { cheapaimodel: { reasoningEffort: "low" } },
});
  • providerOptions 底下的鍵是你給供應商的 name。用 camelCase 寫 reasoningEffort:那裡的 reasoning_effort 會被無聲丟棄。
  • AI SDK 7 也有頂層的 reasoning: "low" 選項,會送出同一個欄位。
  • thinking 在同一個鍵底下有效:providerOptions: { cheapaimodel: { thinking: { type: "disabled" } } }。

LiteLLM

import os
import litellm

response = litellm.completion(
    model="openai/deepseek-v4-1-flash",
    api_base="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    reasoning_effort="low",
    messages=[{"role": "user", "content": "Explain recursion in one sentence."}],
)
  • 保留 openai/ 前綴。使用 deepseek/ 時,LiteLLM 會把 effort 變成 DeepSeek 的開/關切換並丟掉層級,所以 low 和 max 都會變成單純的「thinking on」。
  • 在 LiteLLM Proxy 上,於模型的 litellm_params 底下設定 reasoning_effort。用戶端送出的值會覆寫它。

在程式開發工具與應用程式中

大多數工具只在你要求時才會送出該欄位。如果工具什麼都沒送,DeepSeek 會以 high 執行。

工具 設定位置 可達到的層級
Codex CLI config.toml 中的 model_reasoning_effort 全部四種
Continue 模型上的 requestOptions.extraBodyProperties 全部四種
Aider --reasoning-effort,在宣告設定之後(見下文) 全部四種
Open WebUI Model → Advanced Params → Reasoning Effort,設為 Custom 全部四種
Zed available_models 中模型上的 reasoning_effort 全部四種
OpenClaw 模型的 compat 設定(見下文) 全部四種
n8n OpenAI Chat Model → Options → Extra Body 全部四種
Cline OpenAI Compatible 設定中的 Reasoning Effort,或 --thinking none、low、high
Dify Reasoning effort,在設定 Thinking Mode Support 之後(見下文) none、low、high
Cursor 使用自訂 Base URL 時無法使用 僅預設

以 Codex CLI 0.163.0、Continue CLI 1.5.47、Aider 0.86.2、Cline CLI 3.0.71 和 OpenClaw 2026.10.4 測試;Open WebUI 0.12.2、Zed 1.24.2、Dify OpenAI-API-compatible plugin 0.0.68 和 n8n 2.43.6 則是從原始碼判讀。

Codex CLI 只透過 Responses API 與自訂供應商溝通,因此它會送出 reasoning.effort。同時請設定 model_reasoning_summary = "none"。否則 Codex 會加上 reasoning.summary,而 cheapaimodel 上的 V4.1 Flash 會以 400 拒絕。

model_reasoning_effort = "low"
model_reasoning_summary = "none"

如果你沒有設定 model_reasoning_effort,Codex 的橫幅會顯示「reasoning effort: none」,但它實際上不會送出任何 effort,因此模型會以 high 執行。

Continue 對 OpenAI 相容模型沒有 effort 選項,但它會加入你列出的任何 body 欄位:

models:
  - name: DeepSeek V4.1 Flash
    provider: openai
    model: deepseek-v4-1-flash
    apiBase: https://api.cheapaimodel.ai/v1
    apiKey: YOUR_API_KEY
    requestOptions:
      extraBodyProperties:
        reasoning_effort: low

Aider 對它不認識的模型會忽略 --reasoning-effort,並印出警告。請在 .aider.model.settings.yml 中宣告此設定:

- name: openai/deepseek-v4-1-flash
  accepts_settings: ["reasoning_effort"]

接著執行 aider --model openai/deepseek-v4-1-flash --reasoning-effort low,或在對話中輸入 /reasoning-effort low。不要把該欄位直接放進 extra_params:Aider 會在那裡把它丟掉。

OpenClaw 會把任何自訂 Base URL 當成 Proxy,除非模型項目註明它支援,否則不會送出 effort。請將下列欄位加入我們 OpenClaw 指南 中的項目:

{
  id: "deepseek-v4-1-flash",
  // ...the rest of the entry
  reasoning: true,
  compat: {
    supportsUsageInStreaming: true,
    supportsReasoningEffort: true,
    supportedReasoningEfforts: ["none", "low", "high", "max"],
  },
}

接著在 agents.defaults.models["cheapaimodel/deepseek-v4-1-flash"].params.thinking 中設定預設值,例如 "high"。若沒有設定,新的工作階段會從 low 開始,而 OpenClaw 會把它未列出的層級往下捨入,因此 medium 會變成 low。

n8n 只會對 OpenAI 模型名稱顯示內建的 Reasoning Effort 選項。請改用 Extra Body,並讓欄位與該節點使用的 API 相符。開啟 Use Responses API(預設)時,請寫 {"reasoning": {"effort": "low"}}。關閉時,請寫 {"reasoning_effort": "low"}。

Dify 是最需要注意的一個。使用預設的 Thinking Mode Support「Only Non-Thinking Mode」時,Dify 不會送出 effort,只是把推理過程從回覆中隱藏。模型仍會以 high 進行推理,你仍然要為那些 token 付費。若要真正關閉推理,請選擇包含 thinking 的模式,並將 Reasoning effort 設為 none。

Cursor 對自訂 Base URL 後方的模型不會送出 effort,因此它們會以 high 執行。

在其他 OpenAI 相容端點上

上述一切適用於任何在 OpenAI 相容 Base URL 後方提供 V4.1 Flash 的供應商。差別在於端點如何處理這個欄位。在你依賴它之前:

  1. 檢查它有沒有送達。 用 none 和 max 送出同樣的提示詞。使用 none 時,reasoning_tokens 應該是 0,而且訊息不應該帶有 reasoning_content。如果兩個請求回來的結果看起來一樣,代表端點把這個欄位丟掉了,你拿到的是它的預設值。
  2. 檢查模型清單。 有些閘道會把每個等級各自暴露成一個 model ID,例如帶有 -max 或 -none 後綴。如果你的閘道是這樣,就用那些 ID。cheapaimodel 只有一個 ID,deepseek-v4-1-flash,由欄位來決定。
  3. 檢查打錯字會怎樣。 在 cheapaimodel 上,"reasoning_effort": "turbo" 會回傳 400 並附帶 "code": "InvalidParameter",所以打錯字會大聲失敗。會把不認識的值丟掉的端點,則會默默以預設值執行。
  4. 只用 none、low、high 和 max。 DeepSeek 自家的 API 也接受 OpenAI 的 minimal、medium 和 xhigh,並把它們對應到最接近的等級,但端點們的對應方式不見得都一樣。在我們的測試中,minimal 的行為更像 high,而不是 low。
  5. 不要假設規則都通用。 供應同一個模型的供應商,在細節上會有差異。DeepSeek 的文件說,它的 API 在思考模式下對 tool_choice: "required" 會回傳 400,對於丟掉 reasoning_content 的工具對話也是如此。在 cheapaimodel 上,我們的測試中兩個請求都順利通過。請把你的程式碼寫成能在更嚴格的規則下運作。

三個容易讓人踩雷的地方

max_tokens 包含推理內容

使用 reasoning_effort: "high" 和 max_tokens: 100 時,我們得到 finish_reason: "length" 和空的 content。100 個 token 全都用在推理上。如果你限制了輸出,記得留空間給它。當你沒有設定 max_tokens 時,DeepSeek 的 API 在思考模式下預設為 64K,在 max 時預設為 128K。

在工具對話中保留 reasoning_content

當模型呼叫工具時,它的訊息會帶著 reasoning_content 以及 tool_calls。DeepSeek 的 API 要求你在該對話後續的每個請求中,原封不動地把它送回去。在 OpenAI Python SDK 中,把回傳的訊息物件附加進去就能做到:

messages.append(completion.choices[0].message)

各函式庫在這點上做法不同。OpenAI 的 SDK、加上 openai/ 前綴的 LiteLLM,以及 Vercel AI SDK,在你把回傳的訊息送回去時會保留 reasoning_content。LangChain 的 ChatOpenAI 和 ChatDeepSeek,以及 LlamaIndex 的 OpenAILike,則會在下一個請求中把它漏掉。在 cheapaimodel 上,我們的測試中漏掉它並沒有造成錯誤,但在會強制執行 DeepSeek 規則的端點上,請求會以 400 失敗。

在沒有工具的對話中,你不需要把它送回去。DeepSeek 會忽略它。

溫度不會引導推理

在思考模式下,temperature 沒有作用,而低於 0.95 的 top_p 會被當成 0.95。想讓回答更快或更謹慎,請改為調整 effort 等級。

在 cheapaimodel 上檢查

在控制台開啟 日誌 並點選一個請求。如果你送了 reasoning_effort,詳細資料會在 Reasoning effort 底下顯示它。如果沒有這一列,代表該請求是以預設值 high 執行。

價格與上下文限制在 DeepSeek V4.1 Flash 模型頁面。想取得 Key 並發出你的第一次呼叫,請參閱快速開始。DeepSeek 自家的參考文件是它的思考模式指南。

所有文章