Skip to content

Streaming memungkinkan Anda untuk merender teks saat teks tersebut dihasilkan oleh model.

Streaming diaktifkan secara default melalui REST API, tetapi dinonaktifkan secara default di SDK.

Untuk mengaktifkan streaming di SDK, atur parameter stream menjadi True.

Konsep kunci streaming

  1. Mengobrol: Stream pesan asisten parsial. Setiap chunk mencakup content sehingga Anda dapat merender pesan saat mereka tiba.
  2. Berpikir: Model yang mampu berpikir mengeluarkan bidang thinking bersamaan dengan konten reguler di setiap chunk. Deteksi bidang ini di chunk stream yang diterima untuk menampilkan atau menyembunyikan jejak penalaran sebelum jawaban akhir tiba.
  3. Pemanggilan alat: Pantau tool_calls yang di-stream di setiap chunk, jalankan alat yang diminta, dan tambahkan output alat kembali ke percakapan.

Menangani chunk stream yang diterima

Catatan

Perlu mengakumulasi bidang parsial untuk menjaga riwayat percakapan. Hal ini sangat penting untuk pemanggilan alat, di mana proses berpikir, pemanggilan alat dari model, dan hasil eksekusi alat harus dikirimkan kembali ke model pada permintaan berikutnya.

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)
    # kumpulkan berpikir parsial
    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)
    # kumpulkan konten parsial
    content += chunk.message.content

  # tambahkan bidang yang telah dikumpulkan ke pesan untuk permintaan berikutnya
  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)
      // kumpulkan berpikir parsial
      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)
      // kumpulkan konten parsial
      content += chunk.message.content
    }
  }

  // tambahkan bidang yang telah dikumpulkan ke pesan untuk permintaan berikutnya
  new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}

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