Streaming ermöglicht es Ihnen, Text anzuzeigen, während er vom Modell generiert wird.
Streaming ist standardmäßig über die REST-API aktiviert, in den SDKs jedoch standardmäßig deaktiviert.
Um Streaming in den SDKs zu aktivieren, setzen Sie den Parameter stream auf True.
Wichtige Streaming-Konzepte
- Chat: Streamen Sie partielle Assistentennachrichten. Jeder Chunk enthält das Feld
content, sodass Sie Nachrichten anzeigen können, sobald sie eintreffen. - Denken: Modelle mit Denkfähigkeit senden in jedem Chunk neben dem regulären Inhalt das Feld
thinking. Erkennen Sie dieses Feld in Streaming-Chunks, um Gedankenspuren vor Eintreffen der endgültigen Antwort ein- oder auszublenden. - Tool-Aufrufe: Achten Sie auf gestreamte
tool_callsin jedem Chunk, führen Sie das angeforderte Tool aus und fügen Sie die Tool-Ausgaben wieder zur Konversation hinzu.
Verarbeitung von gestreamten Chunks
Hinweis
Es ist notwendig, die partiellen Felder zu akkumulieren, um den Konversationsverlauf beizubehalten. Dies ist besonders wichtig bei Tool-Aufrufen, da das Denken, der Tool-Aufruf des Modells und das ausgeführte Tool-Ergebnis in der nächsten Anfrage wieder an das Modell übergeben werden müssen.
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)
# akkumuliere das partielle 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)
# akkumuliere den partiellen Inhalt
content += chunk.message.content
# füge die akkumulierten Felder zu den Nachrichten für die nächste Anfrage hinzu
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)
// akkumuliere das partielle 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)
// akkumuliere den partiellen Inhalt
content += chunk.message.content
}
}
// füge die akkumulierten Felder zu den Nachrichten für die nächste Anfrage hinzu
new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}
main().catch(console.error)
```