Skip to content

การสตรีมมิ่งช่วยให้คุณแสดงผลข้อความได้ในขณะที่โมเดลกำลังสร้างข้อความนั้นๆ

การสตรีมมิ่งเปิดใช้งานเป็นค่าเริ่มต้นผ่าน REST API แต่ปิดใช้งานเป็นค่าเริ่มต้นใน SDKs

หากต้องการเปิดใช้งานการสตรีมมิ่งใน SDKs ให้ตั้งค่าพารามิเตอร์ stream เป็น True

แนวคิดหลักของการสตรีมมิ่ง

  1. การสนทนา: สตรีมข้อความส่วนที่ยังไม่สมบูรณ์ของผู้ช่วย แต่ละ chunk จะมีฟิลด์ content เพื่อให้คุณแสดงผลข้อความได้ทันทีเมื่อข้อมูลมาถึง
  2. การคิด: โมเดลที่รองรับการคิดจะส่งออกฟิลด์ thinking ร่วมกับเนื้อหาปกติในแต่ละ chunk ตรวจพบฟิลด์นี้ใน chunk ที่สตรีมเข้ามาเพื่อแสดงหรือซ่อนร่องรอยการคิดก่อนที่คำตอบสุดท้ายจะมาถึง
  3. การเรียกใช้เครื่องมือ: ติดตาม 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)
```