Lo streaming ti consente di visualizzare il testo mentre viene generato dal modello.
Lo streaming è abilitato per impostazione predefinita tramite l'API REST, mentre è disabilitato per impostazione predefinita negli SDK.
Per abilitare lo streaming negli SDK, imposta il parametro stream su True.
Concetti chiave dello streaming
- Chat: Trasmetti messaggi parziali dell'assistente. Ogni chunk include il campo
contentin modo da poter visualizzare i messaggi man mano che arrivano. - Pensiero: I modelli in grado di effettuare ragionamenti emettono un campo
thinkinginsieme al contenuto normale in ogni chunk. Rileva questo campo nei chunk in streaming per mostrare o nascondere le tracce di ragionamento prima che arrivi la risposta finale. - Chiamata di strumenti: Controlla i
tool_callstrasmessi in ogni chunk, esegui lo strumento richiesto e aggiungi gli output degli strumenti alla conversazione.
Gestione dei chunk in streaming
Nota
È necessario accumulare i campi parziali per mantenere la cronologia della conversazione. Questo è particolarmente importante per la chiamata di strumenti, dove il ragionamento, la chiamata di strumento del modello e il risultato dello strumento eseguito devono essere reinviati al modello nella richiesta successiva.
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)
# accumula il pensiero parziale
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)
# accumula il contenuto parziale
content += chunk.message.content
# aggiungi i campi accumulati ai messaggi per la richiesta successiva
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)
// accumula il pensiero parziale
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)
// accumula il contenuto parziale
content += chunk.message.content
}
}
// aggiungi i campi accumulati ai messaggi per la richiesta successiva
new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}
main().catch(console.error)