ข้ามไปที่เนื้อหาหลัก

พื้นฐาน

Structured output ของ AI คืออะไร

การขอให้โมเดลตอบเป็น JSON คือคำขอ ไม่ใช่การรับประกัน คำตอบยังคงกลับมาผิดรูปแบบได้ อะไรจำกัดเอาต์พุตของโมเดลจริงๆ ทำไมบางกลไกบังคับใช้ในขณะที่บางกลไกแค่ขอ และทำไมการตรวจสอบยังสำคัญไม่ว่าจะแบบไหน

บทความทั้งหมด · ตรวจสอบล่าสุด:

โครงสร้างหมายความว่าโค้ดที่ตามมาไว้ใจรูปแบบได้

Structured output จำกัดคำตอบให้อยู่ในรูปแบบที่กำหนดไว้ เช่น ชุดฟิลด์คงที่ ประเภทข้อมูลเฉพาะ รายการค่าที่อนุญาต แทนที่จะเป็นย่อหน้าข้อความอิสระ ประเด็นไม่ใช่เรื่องสไตล์ แต่โปรแกรมที่อ่านคำตอบสามารถดึงค่าจากพาธที่รู้จักได้แทนที่จะแยกวิเคราะห์ประโยคและเดาความหมาย

มีสองวิธีที่แตกต่างกันในการขอสิ่งนี้

วิธีแรกอิงตามพรอมต์ คำสั่งบอกโมเดลให้ตอบเป็น JSON ที่ตรงกับรูปแบบที่อธิบายไว้เท่านั้น วิธีนี้ใช้ได้กับแทบทุกโมเดลและไม่ต้องมีการรองรับ API พิเศษ แต่เป็นคำขอที่โมเดลยังคงเพิกเฉยได้ ทำผิดบางส่วนได้ หรือห่อด้วยข้อความอธิบายที่คุณไม่ได้ขอ วิธีที่สองถูกบังคับใช้โดยผู้ให้บริการ ผู้ให้บริการบางรายมีโหมดที่มักเรียกว่า structured output หรือ JSON mode ซึ่งกระบวนการสร้างเองถูกจำกัดเพื่อให้แต่ละขั้นตอนสามารถสร้างได้เฉพาะโทเค็นที่สอดคล้องกับสคีมาเท่านั้น นี่เป็นกลไกที่แข็งแกร่งกว่าคำสั่ง ไม่ใช่แค่ฟังดูเข้มงวดกว่า และเป็นฟีเจอร์ที่แยกจากการเรียกใช้เครื่องมือ (ดูที่การเรียกใช้เครื่องมือใน AI ทำงานอย่างไรจริงๆ) ซึ่งกำหนดรูปแบบอาร์กิวเมนต์ของฟังก์ชันที่มีชื่อ ไม่ใช่คำตอบของโมเดลเอง

คำสั่งในพรอมต์คือคำขอ ไม่ใช่การรับประกัน

เมื่อโครงสร้างมาจากถ้อยคำในพรอมต์เท่านั้น โมเดลยังคงสามารถสร้างเอาต์พุตที่ไม่ตรงกันได้ เช่น ฟิลด์เกิน ฟิลด์ขาด ข้อความก่อน JSON ค่าที่มีประเภทผิด ระบบใดก็ตามที่พึ่งพาโครงสร้างจากพรอมต์เพียงอย่างเดียวต้องมีแผนจริงสำหรับกรณีที่การแยกวิเคราะห์ล้มเหลว ไม่ใช่สมมติว่าจะไม่มีวันเกิดขึ้น

โครงสร้างที่ผู้ให้บริการบังคับใช้เป็นการรับประกันคนละแบบ

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

รูปแบบที่ถูกต้องไม่ใช่สิ่งเดียวกับคำตอบที่ถูกต้อง

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

การแยกวิเคราะห์สำเร็จไม่ใช่สิ่งเดียวกับการไว้ใจได้

ไม่ว่าโครงสร้างจะมาจากพรอมต์หรือจากการบังคับใช้ของผู้ให้บริการ การแยกวิเคราะห์คำตอบสำเร็จยืนยันเพียงว่าปฏิบัติตามรูปแบบเท่านั้น ไม่ได้บอกอะไรเลยว่าค่าฟิลด์นั้นถูกต้อง อยู่ในช่วงที่เหมาะสม หรือสมเหตุสมผลหรือไม่ การถือว่าออบเจกต์ที่แยกวิเคราะห์แล้วเป็นข้อมูลที่ตรวจสอบแล้ว แทนที่จะเป็นข้อกล่าวอ้างที่ต้องตรวจสอบ คือจุดที่ระบบ structured output มักผิดพลาดมากที่สุดในการใช้งานจริง

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

Structured output เหมือนกับการเรียกใช้เครื่องมือหรือไม่
ไม่เหมือน การเรียกใช้เครื่องมือเสนอฟังก์ชันที่มีชื่อและอาร์กิวเมนต์ของมันที่แอปพลิเคชันของคุณอาจดำเนินการ ส่วน structured output จัดรูปแบบคำตอบของโมเดลเองให้เป็นรูปแบบที่กำหนดไว้ กลไกทั้งสองสามารถใช้แยกกันหรือร่วมกันได้
การขอ JSON จากโมเดลในพรอมต์รับประกันว่าจะได้ JSON ที่ถูกต้องกลับมาหรือไม่
ไม่รับประกัน นี่คือคำขอที่โมเดลยังคงทำผิดได้ เช่น ข้อความเกิน ฟิลด์ขาด ประเภทไม่ถูกต้อง ระบบที่พึ่งพาถ้อยคำในพรอมต์เพียงอย่างเดียวต้องมีทางเลือกสำรองที่ชัดเจนสำหรับกรณีที่การแยกวิเคราะห์ล้มเหลว ไม่ใช่สมมติว่าจะสำเร็จเสมอ
ถ้าผู้ให้บริการบังคับใช้สคีมา ผลลัพธ์รับประกันว่าถูกต้องหรือไม่
รับประกันว่ามีรูปแบบถูกต้องตามสคีมา คือฟิลด์ที่ถูกต้อง ประเภทที่ถูกต้อง แต่ไม่รับประกันว่าค่าภายในฟิลด์เหล่านั้นแม่นยำหรือสมเหตุสมผล การบังคับใช้จำกัดรูปแบบ ไม่ใช่ความจริง
ฉันยังต้องตรวจสอบคำตอบแบบมีโครงสร้างก่อนใช้งานหรือไม่
ใช่ การแยกวิเคราะห์คำตอบสำเร็จยืนยันว่ารูปแบบตรงกัน ไม่ใช่ว่าเนื้อหาถูกต้อง การตรวจสอบช่วง ประเภท และความสมเหตุสมผลของค่ายังคงจำเป็น ไม่ว่าโครงสร้างจะถูกสร้างขึ้นอย่างไร

ลองใช้ดีกว่าอ่านเฉยๆ

ฟีเจอร์ judge ของ ClawAI ขอให้โมเดลตอบเป็นรูปแบบ JSON ที่กำหนดไว้ผ่านคำสั่งในพรอมต์ และย้อนกลับไปยังสถานะ "แยกวิเคราะห์ล้มเหลว" ที่กำหนดไว้แทนการเดา เมื่อคำตอบไม่ตรงกัน ซึ่งเป็นตัวอย่างที่ใช้งานได้จริงและตรงไปตรงมาว่าสคีมาที่ขอในพรอมต์คือคำขอ ไม่ใช่การรับประกัน