Structured output
การบังคับให้โมเดล AI ตอบกลับเป็นข้อมูลตามโครงสร้างที่กำหนดไว้ล่วงหน้า เช่น JSON ตาม schema แทนข้อความอิสระ เพื่อให้ระบบปลายทางอ่านต่อได้แน่นอน
Structured output คือการบังคับให้โมเดล AI ตอบกลับมาเป็นข้อมูลที่มีโครงสร้างตายตัว เช่น JSON ตาม schema ที่คนตั้งไว้ล่วงหน้า แทนที่จะปล่อยให้โมเดลตอบเป็นข้อความอิสระแล้วต้องมานั่งแกะเอาเองว่าฟิลด์ไหนอยู่ตรงไหน โดยทั่วไปคนเขียนโปรแกรมจะกำหนดว่าคำตอบต้องมีฟิลด์อะไรบ้าง แต่ละฟิลด์เป็นชนิดข้อมูลอะไร (ข้อความ ตัวเลข true/false หรือค่าที่เลือกได้จากลิสต์ที่กำหนด) แล้วให้โมเดลตอบให้ตรงตามนั้นทุกครั้ง
ผู้ให้บริการโมเดลรายใหญ่ทำเรื่องนี้คนละชื่อกันแต่หลักการใกล้เคียงกัน ฝั่ง OpenAI เรียกฟีเจอร์นี้ตรงตัวว่า "Structured Outputs" เปิดใช้ผ่านพารามิเตอร์ที่ตั้ง type เป็น json_schema พร้อม strict: true ซึ่งเอกสารของ OpenAI ระบุว่าเมื่อเปิด strict mode แล้ว "the model will always generate responses that adhere to your supplied JSON Schema" ไม่ต้องกลัวโมเดลลืมใส่ฟิลด์ที่บังคับ (required) หรือสร้างค่า enum ที่ไม่มีอยู่จริงขึ้นมาเอง ฟีเจอร์นี้เริ่มใช้ได้ตั้งแต่โมเดลตระกูล GPT-4o เป็นต้นมา แต่ก็มีข้อจำกัดของ schema เช่น รวมกันได้ไม่เกิน 5,000 properties และซ้อนลึกได้ไม่เกิน 10 ชั้น ฝั่ง Anthropic (Claude) มีสองฟีเจอร์คู่กัน คือ "Structured outputs" สำหรับบังคับคำตอบสุดท้ายให้เป็น JSON ตาม schema และ "strict tool use" (ตั้ง strict: true บนนิยาม tool-call) สำหรับบังคับ input ของการเรียกเครื่องมือให้ตรง schema ทั้งสองแบบใช้เทคนิคที่เอกสารเรียกว่า grammar-constrained sampling คือจำกัดทางเลือกของโมเดลตอนสุ่มเลือก token แต่ละตัวให้เลือกได้เฉพาะทางที่ยังทำให้ output ออกมาตรง schema เท่านั้น ฝั่ง Google ก็มีฟีเจอร์ชื่อเดียวกันคือ "Structured outputs" ในตระกูล Gemini ปัจจุบันเอกสารของ Google ให้เปิดใช้ผ่านพารามิเตอร์ response_format ที่ตั้ง mime_type เป็น application/json แล้วแนบ schema เข้าไปด้วยกัน (รูปแบบเดิมที่ยังพบได้ในโค้ดเก่าคือตั้ง response_mime_type คู่กับ response_schema)
คนทำงานจะเจอคำนี้ตอนต้องต่อ llm เข้ากับระบบงานจริง เช่น ให้ AI อ่านอีเมลแล้วดึงชื่อ-เบอร์โทรไปบันทึกลงฐานข้อมูล หรือให้ AI จัดหมวดหมู่ตั๋วซัพพอร์ตแล้วส่งต่อให้ระบบอื่นทำงานต่อแบบอัตโนมัติ ระบบปลายทางแบบนี้ต้องการฟิลด์ที่แน่นอนตายตัว ถ้าปล่อยให้โมเดลตอบอิสระซึ่งมี non-determinism อยู่ในตัวอยู่แล้ว ผลลัพธ์จะแปรผันไปมาจนโค้ดฝั่งรับพังได้ง่าย ข้อควรระวังคือ structured output รับประกันแค่ "รูปแบบ" ไม่ได้รับประกัน "ความถูกต้องของเนื้อหา" เอกสารของ Google ระบุไว้ว่าแม้ output จะเป็น JSON ที่ถูกต้องตามไวยากรณ์ นักพัฒนาก็ยังต้องตรวจค่าข้างในเองอยู่ดีว่าตรงความจริงหรือเปล่า และเตือนเพิ่มว่า JSON Schema ไม่ได้รองรับทุกฟีเจอร์ schema ที่ใหญ่มากหรือซ้อนลึกมากอาจถูกปฏิเสธ และแต่ละผู้ให้บริการก็รองรับ JSON Schema ไม่เท่ากัน เช่น Anthropic ไม่รองรับ schema แบบ recursive และไม่รองรับ constraint บางตัวอย่าง minimum, maximum, minLength ต้องเช็คเอกสารของแต่ละเจ้าก่อนออกแบบ schema จริงเสมอ อีกข้อที่มักถูกมองข้ามคือคำรับประกันเรื่องรูปแบบไม่ได้ครอบคลุมทุกกรณี เอกสารของ OpenAI ระบุไว้เองว่าบางครั้งโมเดลก็ตอบไม่ตรง schema ได้ เช่นเมื่อโมเดลปฏิเสธคำขอ (refusal) หรือเมื่อคำตอบถูกตัดกลางคันเพราะชนเพดาน max tokens ฝั่งรับจึงยังต้องมีโค้ดดักสองกรณีนี้ไว้
ตัวอย่างจากบทสนทนาจริง
ฝ่ายพัฒนาระบบ: "ทำไมเวลาให้ AI สรุปอีเมลแล้วดึงชื่อกับเบอร์โทรลูกค้าไปใส่ฐานข้อมูล บางทีมันตอบมาเป็นย่อหน้ายาวๆ บางทีก็ใส่ field ไม่ครบจนโค้ดฝั่งรับ error" ทีม AI: "เพราะตอนนี้เราปล่อยให้โมเดลตอบเป็นข้อความอิสระ ต้องเปลี่ยนไปใช้ structured output บังคับ schema ไว้เลยว่าต้องมี field name กับ phone เสมอ พอเปิดโหมด strict โมเดลจะตอบกลับเป็น JSON ตาม schema ที่เรากำหนด ไม่ต้องมานั่งเดาสารพัดรูปแบบเหมือนเดิม แต่ยังต้องเหลือทางดักไว้สองกรณีที่เอกสารบอกเองว่าเกิดได้ คือโมเดลปฏิเสธคำขอ กับคำตอบถูกตัดกลางคันเพราะชนเพดาน max tokens"
ระวังสับสนกับ
- tool-call : tool call คือการให้โมเดลเรียกใช้ฟังก์ชันหรือเครื่องมือภายนอกแล้วรอผลลัพธ์กลับมาคุยต่อ ส่วน structured output คือการบังคับรูปแบบของคำตอบ (หรือ input ของ tool call นั้น) ให้ตรง schema ทั้งสองมักใช้กลไกเดียวกันเบื้องหลังแต่เป้าหมายต่างกัน
- context-engineering : context engineering คือการจัดการสิ่งที่ป้อนเข้าไปให้โมเดล (input/context) ส่วน structured output คือการควบคุมรูปแบบของสิ่งที่ออกมาจากโมเดล (output)
Sources (4)
- https://developers.openai.com/api/docs/guides/structured-outputs fetched 2026-08-07
- https://platform.claude.com/docs/en/build-with-claude/structured-outputs fetched 2026-08-07
- https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use fetched 2026-08-07
- https://ai.google.dev/gemini-api/docs/structured-output fetched 2026-08-07
อ่านจบแล้วอยากตามเรื่อง AI แบบนี้ต่อทุกวัน เรามีสรุปข่าวภาษาไทยส่งทาง LINE ทุกเช้า กดเพิ่มเพื่อนไว้ได้เลย ไม่มีค่าใช้จ่าย