思考機能を搭載したモデルは、推論トレースと最終回答を分離する thinking フィールドを出力します。
この機能を使用して、モデルのステップを監査したり、UIでモデルの思考をアニメーション化したり、最終回答のみが必要な場合にトレースを完全に非表示にしたりできます。
対応モデル
- Qwen 3
- GPT-OSS (
thinkのレベル:low、medium、highを使用します(トレースを完全に無効化することはできません) - DeepSeek-v3.1
- DeepSeek R1
- thinking models で最新の追加モデルを参照してください
API呼び出しで思考を有効にする
チャットまたは生成リクエストで think フィールドを設定します。ほとんどのモデルは、ブール値(true/false)またはレベル(low、medium、high、max)を受け付けます。max は最高レベルの思考を要求します。
GPT-OSSは、トレースの長さを調整するために low、medium、high のいずれかを受け付けます。
message.thinking(チャットエンドポイント)または thinking(生成エンドポイント)フィールドには推論トレースが含まれ、message.content/response には最終回答が格納されます。
cURL
shell
curl http://localhost:11434/api/chat -d '{
"model": "qwen3",
"messages": [{
"role": "user",
"content": "How many letter r are in strawberry?"
}],
"think": true,
"stream": false
}'Python
python
from ollama import chat
response = chat(
model='qwen3',
messages=[{'role': 'user', 'content': 'How many letter r are in strawberry?'}],
think=True,
stream=False,
)
print('Thinking:\n', response.message.thinking)
print('Answer:\n', response.message.content)JavaScript
javascript
import ollama from 'ollama'
const response = await ollama.chat({
model: 'deepseek-r1',
messages: [{ role: 'user', content: 'How many letter r are in strawberry?' }],
think: true,
stream: false,
})
console.log('Thinking:\n', response.message.thinking)
console.log('Answer:\n', response.message.content)注釈
GPT-OSSでは、thinkを"low"、"medium"、または"high"に設定する必要があります。このモデルではtrue/falseを渡しても無視されます。
推論トレースのストリーミング
思考ストリームは、回答トークンの前に推論トークンを交互に出力します。最初のthinkingチャンクを検出して「思考」セクションをレンダリングし、message.contentが到着したら最終返信に切り替えます。
Python
python
from ollama import chat
stream = chat(
model='qwen3',
messages=[{'role': 'user', 'content': 'What is 17 × 23?'}],
think=True,
stream=True,
)
in_thinking = False
for chunk in stream:
if chunk.message.thinking and not in_thinking:
in_thinking = True
print('Thinking:\n', end='')
if chunk.message.thinking:
print(chunk.message.thinking, end='')
elif chunk.message.content:
if in_thinking:
print('\n\nAnswer:\n', end='')
in_thinking = False
print(chunk.message.content, end='')JavaScript
javascript
import ollama from 'ollama'
async function main() {
const stream = await ollama.chat({
model: 'qwen3',
messages: [{ role: 'user', content: 'What is 17 × 23?' }],
think: true,
stream: true,
})
let inThinking = false
for await (const chunk of stream) {
if (chunk.message.thinking && !inThinking) {
inThinking = true
process.stdout.write('Thinking:\n')
}
if (chunk.message.thinking) {
process.stdout.write(chunk.message.thinking)
} else if (chunk.message.content) {
if (inThinking) {
process.stdout.write('\n\nAnswer:\n')
inThinking = false
}
process.stdout.write(chunk.message.content)
}
}
}
main()CLIクイックリファレンス
- 1回の実行で思考を有効にする:
ollama run deepseek-r1 --think "Where should I visit in Lisbon?" - 思考を無効にする:
ollama run deepseek-r1 --think=false "Summarize this article" - 思考モデルを使用しながらトレースを非表示にする:
ollama run deepseek-r1 --hidethinking "Is 9.9 bigger or 9.11?" - 対話セッション内では、
/set thinkまたは/set nothinkで切り替えられます。 - GPT-OSSはレベルだけを受け付けます:
ollama run gpt-oss --think=low "Draft a headline"(必要に応じてlowをmediumまたはhighに置き換えてください)。
注釈
対応モデルでは、CLIとAPIでデフォルトで思考が有効になっています。