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
- Chatten: Stroom gedeeltelijke assistentberichten. Elk chunk bevat de
content, zodat je berichten kunt weergeven zodra ze binnenkomen. - 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. - Hulpprogramma-oproepen: Let op streamende
tool_callsin 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)
```