การสตรีมมิ่งช่วยให้คุณแสดงผลข้อความได้ในขณะที่โมเดลกำลังสร้างข้อความนั้นๆ
การสตรีมมิ่งเปิดใช้งานเป็นค่าเริ่มต้นผ่าน REST API แต่ปิดใช้งานเป็นค่าเริ่มต้นใน SDKs
หากต้องการเปิดใช้งานการสตรีมมิ่งใน SDKs ให้ตั้งค่าพารามิเตอร์ stream เป็น True
แนวคิดหลักของการสตรีมมิ่ง
- การสนทนา: สตรีมข้อความส่วนที่ยังไม่สมบูรณ์ของผู้ช่วย แต่ละ chunk จะมีฟิลด์
contentเพื่อให้คุณแสดงผลข้อความได้ทันทีเมื่อข้อมูลมาถึง - การคิด: โมเดลที่รองรับการคิดจะส่งออกฟิลด์
thinkingร่วมกับเนื้อหาปกติในแต่ละ chunk ตรวจพบฟิลด์นี้ใน chunk ที่สตรีมเข้ามาเพื่อแสดงหรือซ่อนร่องรอยการคิดก่อนที่คำตอบสุดท้ายจะมาถึง - การเรียกใช้เครื่องมือ: ติดตาม
tool_callsที่สตรีมเข้ามาในแต่ละ chunk รันเครื่องมือที่ถูกเรียกใช้ และเพิ่มผลลัพธ์ของเครื่องมือกลับไปยังบทสนทนา
การจัดการ chunk ที่สตรีมเข้ามา
ข้อสังเกต
จำเป็นต้องรวบรวมฟิลด์ส่วนที่ยังไม่สมบูรณ์เพื่อให้สามารถรักษาประวัติบทสนทนาได้ สิ่งนี้มีความสำคัญอย่างยิ่งสำหรับการเรียกใช้เครื่องมือ โดยที่การคิดของโมเดล การเรียกใช้เครื่องมือจากโมเดล และผลลัพธ์ของเครื่องมือที่รันแล้วต้องถูกส่งกลับไปยังโมเดลในคำขอถัดไป
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
# เพิ่มฟิลด์ที่รวบรวมแล้วไปยัง messages สำหรับคำขอถัดไป
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
}
}
// เพิ่มฟิลด์ที่รวบรวมแล้วไปยัง messages สำหรับคำขอถัดไป
new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}
main().catch(console.error)
```