Skip to content

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

  1. Chat: Trasmetti messaggi parziali dell'assistente. Ogni chunk include il campo content in modo da poter visualizzare i messaggi man mano che arrivano.
  2. Pensiero: I modelli in grado di effettuare ragionamenti emettono un campo thinking insieme 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.
  3. Chiamata di strumenti: Controlla i tool_calls trasmessi 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)