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
- Mengobrol: Stream pesan asisten parsial. Setiap chunk mencakup
contentsehingga Anda dapat merender pesan saat mereka tiba. - Berpikir: Model yang mampu berpikir mengeluarkan bidang
thinkingbersamaan dengan konten reguler di setiap chunk. Deteksi bidang ini di chunk stream yang diterima untuk menampilkan atau menyembunyikan jejak penalaran sebelum jawaban akhir tiba. - Pemanggilan alat: Pantau
tool_callsyang 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)
```