Skip to content

Modelle mit Denkfunktion geben ein thinking-Feld aus, das ihre Gedankenspur von der endgültigen Antwort trennt.

Nutzen Sie diese Funktion, um die Schritte des Modells zu prüfen, das Denken des Modells in einer UI zu animieren oder die Spur vollständig auszublenden, wenn Sie nur die endgültige Antwort benötigen.

Unterstützte Modelle

Denken in API-Aufrufen aktivieren

Setzen Sie das Feld think in Chat- oder Generierungsanfragen. Die meisten Modelle akzeptieren Boolesche Werte (true/false) oder Stufen (low, medium, high, max), wobei max die höchste Denkstufe anfordert.

GPT-OSS erwartet stattdessen eine der Stufen low, medium oder high, um die Länge der Spur anzupassen.

Das Feld message.thinking (Chat-Endpunkt) bzw. thinking (Generierungs-Endpunkt) enthält die Gedankenspur, während message.content / response die endgültige Antwort enthält.

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)
```

Hinweis

GPT-OSS erfordert, dass think auf "low", "medium" oder "high" gesetzt ist. Die Übergabe von true/false wird für dieses Modell ignoriert.

Gedankenspur streamen

Denk-Streams mischen Denk-Token vor Antwort-Token. Erkennen Sie den ersten thinking-Chunk, um einen „Denken“-Abschnitt darzustellen, und wechseln Sie zur endgültigen Antwort, sobald message.content eintrifft.

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-Kurzreferenz

  • Denken für einen einzelnen Lauf aktivieren: ollama run deepseek-r1 --think "Where should I visit in Lisbon?"
  • Denken deaktivieren: ollama run deepseek-r1 --think=false "Summarize this article"
  • Spur ausblenden, während weiterhin ein Denkmodell verwendet wird: ollama run deepseek-r1 --hidethinking "Is 9.9 bigger or 9.11?"
  • In interaktiven Sitzungen können Sie es mit /set think oder /set nothink umschalten.
  • GPT-OSS akzeptiert nur Stufen: ollama run gpt-oss --think=low "Draft a headline" (ersetzen Sie low bei Bedarf durch medium oder high).

Hinweis

Denken ist in der CLI und API für unterstützte Modelle standardmäßig aktiviert.

Wait wait, let's check the original's spacing after the code blocks: the original has two empty lines after the cURL code block before ### Python, right? Let's see: original has:

```shell
...
```

Python

Yes, so in the translation, we have the same: after the cURL code block, two line breaks, then ### Python, correct. Same for the other code blocks.

Also, the tip boxes have the same indentation as original, right? Yes, the original has the tip content indented, we kept that.

All links are intact, all code is unchanged, all technical identifiers are kept in English, terminology is consistent. Perfect.