การส่งการตอบกลับแบบสตรีม (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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียกใช้ OpenAI API: chat.completions
- การเรียกใช้ Anthropic API: messages
- การส่งการตอบกลับแบบสตรีม (SSE)
- ตระหนักถึงต้นทุน: การนับโทเค็นและงบประมาณ