Skip to content

Стрімінг дозволяє відображати текст по мірі його генерації моделлю.

Стрімінг увімкнено за замовчуванням через REST API, але вимкнено за замовчуванням у SDK.

Щоб увімкнути стрімінг у SDK, встановіть для параметра stream значення True.

Основні концепції стрімінгу

  1. Чат: Потокове відображення часткових повідомлень асистента. Кожен фрагмент містить поле content, тому ви можете відображати повідомлення по мірі їх надходження.
  2. Міркування: Моделі, що підтримують міркування, виводять поле thinking разом зі звичайним вмістом у кожному фрагменті. Виявляйте це поле в потокових фрагментах, щоб показувати або приховувати сліди ланцюжка міркувань до отримання остаточної відповіді.
  3. Виклик інструментів: Стежте за потоковими tool_calls у кожному фрагменті, виконуйте запитаний інструмент і додавайте результат роботи інструменту назад до розмови.

Обробка потокових фрагментів

Примітка

Необхідно накопичувати часткові поля, щоб зберігати історію розмови. Це особливо важливо для виклику інструментів, де міркування, виклик інструменту від моделі та результат виконання інструменту потрібно передавати моделі в наступному запиті.

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)
    # накопичувати часткові міркування
    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)
    # накопичувати частковий вміст
    content += chunk.message.content

  # додати накопичені поля до повідомлень для наступного запиту
  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)
      // накопичувати часткові міркування
      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)
      // накопичувати частковий вміст
      content += chunk.message.content
    }
  }

  // додати накопичені поля до повідомлень для наступного запиту
  new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}

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