# 调整思考强度 (/docs/cloud/services/model/guides/reasoning)



同一个“低”档，在 Chat、Messages 和 Google 中使用不同字段。先选模型支持的协议与档位，再查看响应中的思考用量；档位是提示，实际消耗以 usage 为准。

## 选择协议与档位 [#选择协议与档位]

打开[控制台 → 模型目录](https://console.deepraxis.ai/models)，点进模型详情的「协议与思考档位」。期望：看到该模型支持的调用方式和思考选项；没有“关闭”时，不要发送关闭思考的设置。

用 `GET /model/v1/models` 的 `supported_apis` 确认协议；Chat 目录 `GET /openai/v1/models?api=chat` 的 `reasoning.supported_efforts` 和 `reasoning.mandatory` 可用于程序检查。2026-10-13 的 Chat 目录将 `glm-5.3`、`glm-5.3-flash` 和 `kimi-k3` 标为 `mandatory=true`，即不能关闭思考；调用前仍需重查目录。不要假设每个模型都有全部档位。下列用量字段是本页所选模型实测返回的字段，不保证所有模型都提供明细。

| 调用方式                   | 设置思考的入口                                                                 | 本页读取的用量                                            |
| ---------------------- | ----------------------------------------------------------------------- | -------------------------------------------------- |
| Chat Completions       | `reasoning_effort`；也接受 `reasoning` 对象                                   | `usage.completion_tokens_details.reasoning_tokens` |
| Anthropic Messages     | `thinking` 控制模式，`output_config.effort` 选择档位                             | `usage.output_tokens_details.thinking_tokens`      |
| Google generateContent | `generationConfig.thinkingConfig` 中的 `thinkingBudget` 或 `thinkingLevel` | `usageMetadata.thoughtsTokenCount`                 |

Chat 的档位范围从 `none` 到 `max`，实际可选项以模型为准；`none` 表示关闭，不是“低”。Messages 的 `enabled`、`adaptive`、`disabled` 分别表达预算思考、自适应思考和关闭，不能把 `thinking.effort` 当作档位字段。Google 的预算和档位随模型而异，不要同时发送两种控制。

完整字段定义见 [Chat](/docs/api/compatible/openai/createChatCompletion)、[Messages](/docs/api/compatible/anthropic/createMessage)、[Google](/docs/api/compatible/google/generateContent)。

## 1. 准备终端 [#1-准备终端]

准备 Python 3.10+ 和 [uv](https://docs.astral.sh/uv/getting-started/installation/)。将 [Praxis 云 API Key](/docs/cloud/account/api-keys) 放入环境变量 `PRAXIS_API_KEY`，不要写入代码或日志。

```bash
test -n "$PRAXIS_API_KEY"
```

期望：退出码为 0。退出码 1 表示变量未设置，先设置再继续。示例默认使用 `https://api.deepraxis.ai`。切换环境时，将 `PRAXIS_API_BASE` 设为相应 API 域名，不带末尾斜杠或 API 路径。

## 2. Chat：设为低并读取用量 [#2-chat设为低并读取用量]

`deepseek-flash` 支持 Chat 和 `low`。

保存为 `reasoning-chat.py`，运行 `uv run -q --no-project --with openai --with anthropic --with google-genai python reasoning-chat.py`。

```python
import os
from openai import OpenAI

client = OpenAI(api_key=os.environ['PRAXIS_API_KEY'],
    base_url=os.environ.get('PRAXIS_API_BASE', 'https://api.deepraxis.ai') + '/openai/v1')
response = client.chat.completions.create(
    model='deepseek-flash', reasoning_effort='low', max_tokens=2048,
    messages=[{'role': 'user', 'content': 'What is 17 times 23? Answer briefly.'}])
assert response.choices[0].finish_reason == 'stop'
assert '391' in (response.choices[0].message.content or '')
details = response.usage.completion_tokens_details
assert details is not None and details.reasoning_tokens is not None, 'Reasoning usage was not reported'
print('X-Request-Id:', response._request_id)
print('answer:', response.choices[0].message.content)
print('reasoning_tokens:', details.reasoning_tokens)
```

期望：回答包含 `391`，终态为 `stop`，打印实际 `reasoning_tokens`，退出码 0。数字会随调用变化。

## 3. Messages：设为低并读取用量 [#3-messages设为低并读取用量]

这里选用 `claude-opus-5`，因为本次验证中它会返回思考 token 明细。`deepseek-flash` 的 Messages 响应未返回该明细；缺失不等于 0，也不能用 `output_tokens` 代替。

保存为 `reasoning-messages.py`，运行 `uv run -q --no-project --with openai --with anthropic --with google-genai python reasoning-messages.py`。

```python
import os
from anthropic import Anthropic

client = Anthropic(api_key=os.environ['PRAXIS_API_KEY'],
    base_url=os.environ.get('PRAXIS_API_BASE', 'https://api.deepraxis.ai') + '/anthropic')
raw = client.messages.with_raw_response.create(
    model='claude-opus-5', max_tokens=2048,
    thinking={'type': 'adaptive'}, output_config={'effort': 'low'},
    messages=[{'role': 'user', 'content': 'What is 17 times 23? Answer briefly.'}])
response = raw.parse()
answer = ''.join(block.text for block in response.content if block.type == 'text')
assert response.stop_reason == 'end_turn' and '391' in answer
usage = response.usage.model_dump()
details = usage.get('output_tokens_details') or {}
assert details.get('thinking_tokens') is not None, 'Thinking usage was not reported'
print('X-Request-Id:', raw.headers.get('x-request-id'))
print('answer:', answer)
print('thinking_tokens:', details['thinking_tokens'])
```

期望：回答包含 `391`，终态为 `end_turn`，打印实际 `thinking_tokens`，退出码 0。

## 4. Google：按模型选预算或档位 [#4-google按模型选预算或档位]

以下依次调用两个模型：`gemini-2.5-flash` 使用预算，`gemini-3.1-flash-lite-preview` 使用低档。使用 HTTP 是为了直接展示 Google 的字段名。

保存为 `reasoning-google.py`，运行 `uv run -q --no-project --with openai --with anthropic --with google-genai python reasoning-google.py`。

```python
import json
import os
import httpx

base = os.environ.get('PRAXIS_API_BASE', 'https://api.deepraxis.ai')
with httpx.Client(timeout=120) as client:
    for model, thinking in [
        ('gemini-2.5-flash', {'thinkingBudget': 1024}),
        ('gemini-3.1-flash-lite-preview', {'thinkingLevel': 'low'}),
    ]:
        response = client.post(base + '/google/v1beta/models/' + model + ':generateContent',
            headers={'Authorization': 'Bearer ' + os.environ['PRAXIS_API_KEY']},
            json={'contents': [{'role': 'user', 'parts': [{'text': 'What is 17 times 23? Answer briefly.'}]}],
                  'generationConfig': {'maxOutputTokens': 2048, 'thinkingConfig': thinking}})
        print('X-Request-Id:', response.headers.get('x-request-id'))
        response.raise_for_status()
        data = response.json()
        candidate = data['candidates'][0]
        answer = ''.join(part.get('text', '') for part in candidate['content']['parts'])
        assert candidate['finishReason'] == 'STOP' and '391' in answer
        assert 'thoughtsTokenCount' in data['usageMetadata'], 'Thinking usage was not reported'
        print(model, answer, json.dumps(data['usageMetadata']))
```

期望：两次回答都包含 `391`，终态为 `STOP`，各自打印 `thoughtsTokenCount`，退出码 0。

## 如何比较结果 [#如何比较结果]

保持模型和问题一致，多次采样，比较实际思考 token、完整回答、耗时与质量。预算不是跨模型统一的硬上限；“低”不保证每次都比“高”少用 token，也不保证更快。不要根据一条响应推断单调关系。用量字段缺失时，保留“未报告”，不要填 0。

## 实测失败与处理 [#实测失败与处理]

`glm-5.3` 设置 `reasoning_effort="none"` 返回 HTTP 400，错误码 `thinking_disable_unsupported`：

> glm-5.3 cannot disable thinking; omit the thinking setting or choose a level.

省略关闭设置或选择模型支持的档位，再请求。不要靠换成另一个协议的“关闭”字段绕过限制。

[API 参考 →](/docs/api/compatible/openai) · [Cookbook →](/docs/cookbook)
