0Pricing
AI Agents · บทเรียน

การส่งการตอบกลับแบบสตรีม (SSE)

ส่งผลลัพธ์ของ LLM แบบสตรีมทีละโทเค็นผ่านเหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ เพื่อให้ส่วนติดต่อผู้ใช้ตอบสนองฉับไวและแสดงความคืบหน้าได้

การส่งการตอบกลับแบบสตรีม (SSE) เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องสตรีม

หากไม่สตรีม คุณต้องรอการตอบกลับทั้งหมดก่อนจึงจะแสดงผลได้ สมมติว่าการตอบกลับมี 50 โทเคนและใช้เวลา 5 วินาที ผู้ใช้จะไม่เห็นอะไรเลยเป็นเวลา 5 วินาที

การสตรีมจะแสดงโทเคนทันทีที่มาถึง — ใช้เวลารวมเท่าเดิม แต่ประสบการณ์ผู้ใช้ให้ความรู้สึกเหมือนตอบสนองทันที

เหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ (SSE)

OpenAI และ Anthropic สตรีมผ่าน SSE — โพรโทคอล HTTP แบบทางเดียวที่เซิร์ฟเวอร์ส่งเหตุการณ์ด้วยรูปแบบ data: {...}\n\n

ชุดพัฒนาซอฟต์แวร์ส่วนใหญ่ซ่อน SSE ไว้เบื้องหลังอินเทอร์เฟซตัววนซ้ำ

การสตรีมด้วย OpenAI

กำหนด stream=True แล้ววนซ้ำกับการตอบกลับ:

stream = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=messages,
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end='', flush=True)

การรวบรวมการตอบกลับทั้งหมด

สะสมส่วนต่างเพื่อสร้างสตริงสุดท้าย:

buf = []
for chunk in stream:
    delta = chunk.choices[0].delta.content or ''
    buf.append(delta)
    print(delta, end='', flush=True)

full_text = ''.join(buf)
messages.append({'role': 'assistant', 'content': full_text})

การสตรีมด้วย Anthropic

ใช้รูปแบบเดียวกัน แต่ API แตกต่างเล็กน้อย:

with client.messages.stream(
    model='claude-sonnet-4-5',
    max_tokens=1024,
    messages=messages,
) as stream:
    for text in stream.text_stream:
        print(text, end='', flush=True)

    final = stream.get_final_message()
    print('\ndone, tokens:', final.usage.output_tokens)

การสตรีมการเรียกใช้เครื่องมือ

การเรียกใช้เครื่องมือก็สตรีมได้เช่นกัน สำหรับ OpenAI ชื่อฟังก์ชันและอาร์กิวเมนต์จะมาถึงเป็นส่วน ๆ:

for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.tool_calls:
        for tc in delta.tool_calls:
            # tc.function.name and tc.function.arguments arrive as partial strings
            pass

การควบคุมแรงดันย้อนกลับและการยกเลิก

หากผู้ใช้ปิดหน้าเว็บ ให้ยกเลิกสตรีมเพื่อหยุดการใช้โทเคนโดยไม่จำเป็น:

try:
    for chunk in stream:
        if request_was_cancelled():
            stream.close()
            break
finally:
    stream.close()

การสตรีมผ่านเว็บเซิร์ฟเวอร์

สำหรับ FastAPI ให้ใช้ StreamingResponse:

from fastapi.responses import StreamingResponse

def token_generator():
    for chunk in stream:
        delta = chunk.choices[0].delta.content or ''
        yield f'data: {delta}\n\n'

return StreamingResponse(token_generator(), media_type='text/event-stream')

การบัฟเฟอร์ประโยค

สำหรับการแปลงข้อความเป็นเสียงพูดหรือการแสดงผลเป็นส่วน ๆ ให้บัฟเฟอร์จนกว่าประโยคจะจบ:

buf = ''
for chunk in stream:
    buf += chunk.choices[0].delta.content or ''
    while '. ' in buf:
        sentence, buf = buf.split('. ', 1)
        speak(sentence + '.')

การแยกวิเคราะห์ JSON ที่สตรีม

สำหรับเอาต์พุต JSON คุณไม่สามารถแยกวิเคราะห์ระหว่างการสตรีมได้ ตัวเลือกมีดังนี้:

  • บัฟเฟอร์เอาต์พุตทั้งหมด แล้วแยกวิเคราะห์เพียงครั้งเดียว
  • ใช้ตัวแยกวิเคราะห์ JSON แบบสตรีม (ijson) เพื่อส่งฟิลด์ออกมาเมื่อสร้างเสร็จ

เมตริกเวลาแฝง: TTFT และ TPS

  • TTFT — เวลาจนถึงโทเคนแรก (การตอบสนองที่ผู้ใช้รับรู้)
  • TPS — โทเคนต่อวินาที (อัตราการประมวลผล)

การสตรีมช่วยเพิ่มประสิทธิภาพ TTFT ไม่ใช่เวลารวม ตั้งเป้าให้ TTFT < 500ms เพื่อประสบการณ์แชตที่ดี

เหตุใดจึงต้องสตรีม

ประโยชน์หลักของการสตรีมคืออะไร

สรุปทบทวน

การสตรีมช่วยยกระดับประสบการณ์ผู้ใช้ ไม่ได้ทำให้เร็วขึ้น ใช้การสตรีมกับเอเจนต์ทุกตัวที่สื่อสารกับมนุษย์แบบเรียลไทม์

คำถามที่พบบ่อย

บทเรียน “การส่งการตอบกลับแบบสตรีม (SSE)” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การส่งการตอบกลับแบบสตรีม (SSE)” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การส่งการตอบกลับแบบสตรีม (SSE)”

ส่งผลลัพธ์ของ LLM แบบสตรีมทีละโทเค็นผ่านเหตุการณ์ที่ส่งจากเซิร์ฟเวอร์ เพื่อให้ส่วนติดต่อผู้ใช้ตอบสนองฉับไวและแสดงความคืบหน้าได้ คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การส่งการตอบกลับแบบสตรีม (SSE)” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม

ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเรียกใช้ OpenAI API: chat.completions
  2. การเรียกใช้ Anthropic API: messages
  3. การส่งการตอบกลับแบบสตรีม (SSE)
  4. ตระหนักถึงต้นทุน: การนับโทเค็นและงบประมาณ
← กลับไปที่ AI Agents