Skip to content

Streamen stelt je in staat om tekst weer te geven terwijl deze door het model wordt gegenereerd.

Streamen is standaard ingeschakeld via de REST API, maar standaard uitgeschakeld in de SDK's.

Om streamen in de SDK's in te schakelen, stel je de parameter stream in op True.

Belangrijke streamingconcepten

  1. Chatten: Stroom gedeeltelijke assistentberichten. Elk chunk bevat de content, zodat je berichten kunt weergeven zodra ze binnenkomen.
  2. Denken: Modellen die denken ondersteunen, geven een thinking-veld uit samen met de reguliere content in elk chunk. Detecteer dit veld in streamende chunks om redeneringssporen te tonen of te verbergen voordat het eindantwoord binnenkomt.
  3. Hulpprogramma-oproepen: Let op streamende tool_calls in elk chunk, voer het gevraagde hulpprogramma uit en voeg de uitvoer van het hulpprogramma toe aan de conversatie.

Streamende chunks verwerken

Opmerking

Het is noodzakelijk om de gedeeltelijke velden te accumuleren om de conversatiegeschiedenis te behouden. Dit is met name belangrijk voor hulpprogramma-oproepen, waarbij het denken, de hulpprogramma-oproep van het model en het uitgevoerde hulpprogrammaresultaat in de volgende aanvraag opnieuw naar het model moeten worden gestuurd.

Python

```python
from ollama import chat

stream = chat(
  model='qwen3',
  messages=[{'role': 'user', 'content': 'What is 17 × 23?'}],
  stream=True,
)

in_thinking = False
content = ''
thinking = ''
for chunk in stream:
  if chunk.message.thinking:
    if not in_thinking:
      in_thinking = True
      print('Thinking:\n', end='', flush=True)
    print(chunk.message.thinking, end='', flush=True)
    # accumuleer het gedeeltelijke denken
    thinking += chunk.message.thinking
  elif chunk.message.content:
    if in_thinking:
      in_thinking = False
      print('\n\nAnswer:\n', end='', flush=True)
    print(chunk.message.content, end='', flush=True)
    # accumuleer de gedeeltelijke content
    content += chunk.message.content

  # voeg de geaccumuleerde velden toe aan de berichten voor de volgende aanvraag
  new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
```

JavaScript

```javascript
import ollama from 'ollama'

async function main() {
  const stream = await ollama.chat({
    model: 'qwen3',
    messages: [{ role: 'user', content: 'What is 17 × 23?' }],
    stream: true,
  })

  let inThinking = false
  let content = ''
  let thinking = ''

  for await (const chunk of stream) {
    if (chunk.message.thinking) {
      if (!inThinking) {
        inThinking = true
        process.stdout.write('Thinking:\n')
      }
      process.stdout.write(chunk.message.thinking)
      // accumuleer het gedeeltelijke denken
      thinking += chunk.message.thinking
    } else if (chunk.message.content) {
      if (inThinking) {
        inThinking = false
        process.stdout.write('\n\nAnswer:\n')
      }
      process.stdout.write(chunk.message.content)
      // accumuleer de gedeeltelijke content
      content += chunk.message.content
    }
  }

  // voeg de geaccumuleerde velden toe aan de berichten voor de volgende aanvraag
  new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}

main().catch(console.error)
```