11 คะแนน โดย GN⁺ 2024-08-07 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เพิ่ม "Structured Outputs" ใน API
    • ฟีเจอร์ใหม่ที่ทำให้ผลลัพธ์ของโมเดลตรงตาม JSON schema ที่นักพัฒนากำหนดไว้อย่างแม่นยำ
    • เมื่อปีที่แล้วได้เปิดตัวโหมด JSON ในงาน DevDay แต่ยังไม่ได้รับประกันการตอบกลับที่ตรงกับ schema เฉพาะ
    • Structured Outputs จำกัดผลลัพธ์ของโมเดลให้ตรงตาม schema ที่นักพัฒนาระบุ และฝึกโมเดลให้เข้าใจ schema ที่ซับซ้อนได้ดีขึ้น
  • ความจำเป็นของ Structured Outputs
    • การสร้างข้อมูลแบบมีโครงสร้างจากอินพุตที่ไม่มีโครงสร้างเป็นหนึ่งในกรณีใช้งานหลักของ AI
    • สามารถใช้ OpenAI API ทำงานได้หลากหลาย เช่น ค้นคืนข้อมูล, ตอบคำถาม, ดึงข้อมูล, และสร้างเวิร์กโฟลว์หลายขั้นตอน
    • ก่อนหน้านี้ต้องพึ่งพาเครื่องมือโอเพนซอร์ส, พรอมป์ต์, การลองใหม่ซ้ำ ๆ เป็นต้น เพื่อให้ผลลัพธ์ของโมเดลอยู่ในรูปแบบที่ระบบอื่นนำไปใช้งานร่วมกันได้
    • Structured Outputs เข้ามาแก้ปัญหานี้ด้วยการจำกัดผลลัพธ์ของโมเดลให้สอดคล้องกับ schema ที่นักพัฒนากำหนด
  • การประเมินประสิทธิภาพ
    • ในการทดสอบการทำตาม JSON schema ที่ซับซ้อน โมเดล gpt-4o-2024-08-06 ทำคะแนนได้ 100%
    • โมเดล gpt-4-0613 ทำคะแนนได้ต่ำกว่า 40%
  • วิธีใช้งาน Structured Outputs
    • ใช้ Structured Outputs ผ่านการเรียกฟังก์ชัน: ตั้งค่า strict: true ภายในนิยามฟังก์ชัน
      • ใช้ได้กับโมเดลที่รองรับเครื่องมือทั้งหมด
  • Structured Outputs ที่ปลอดภัย
    • เป็นไปตามนโยบายความปลอดภัยเดิมของ OpenAI
    • โมเดลสามารถปฏิเสธคำขอที่ไม่ปลอดภัยได้
    • การตอบกลับของ API มีค่าสตริงสำหรับการปฏิเสธ ทำให้ตรวจจับทางโปรแกรมได้ว่าโมเดลสร้างการปฏิเสธหรือไม่
  • การรองรับแบบเนทีฟใน SDK
    • Python และ Node SDK รองรับ Structured Outputs แบบเนทีฟ
    • สามารถส่งอ็อบเจ็กต์ Pydantic หรือ Zod เพื่อแปลงเป็น JSON schema และทำ serialization กับ parsing ของการตอบกลับ JSON โดยอัตโนมัติ
  • ข้อจำกัด
    • รองรับเพียงบางส่วนของ JSON schema
    • การตอบกลับ API ครั้งแรกสำหรับ schema ใหม่จะมีความหน่วงเพิ่มขึ้น
    • โมเดลอาจปฏิเสธคำขอที่ไม่ปลอดภัย
    • ไม่รองรับการเรียกฟังก์ชันแบบขนาน
    • Structured Outputs ไม่อยู่ในขอบเขตของ Zero Data Retention (ZDR)
  • การเปิดให้ใช้งาน
    • Structured Outputs พร้อมใช้งานทั่วไปใน API
    • Structured Outputs ผ่านการเรียกฟังก์ชันใช้ได้กับทุกโมเดลที่รองรับ function calling
    • ตัวเลือกรูปแบบการตอบกลับใช้ได้กับโมเดลรุ่นล่าสุด

สรุปโดย GN⁺

  • Structured Outputs ฟีเจอร์ใหม่ของ OpenAI ช่วยให้ผลลัพธ์ของโมเดลตรงกับ JSON schema ได้อย่างแม่นยำ
  • นักพัฒนาจึงทำงานอย่างการค้นคืนข้อมูล, ตอบคำถาม, และดึงข้อมูลได้อย่างน่าเชื่อถือมากขึ้น
  • มีการรองรับแบบเนทีฟใน Python และ Node SDK ทำให้พัฒนาได้ง่ายขึ้น
  • ยังมีกรณีใช้งานเพิ่มเติมอีกหลากหลาย เช่น การดึงข้อมูลแบบมีโครงสร้างจากข้อมูลที่ไม่มีโครงสร้าง
  • ใช้เทคนิค constrained decoding เพื่อจำกัดผลลัพธ์ของโมเดลและทำให้สร้างได้เฉพาะ JSON ที่ถูกต้อง

2 ความคิดเห็น

 
bluejoyq 2024-08-08

ฟีเจอร์นี้น่าสนใจดีนะ

 
GN⁺ 2024-08-07
ความคิดเห็นบน Hacker News
  • ใช้ GPT-4o เพื่อสร้าง UI แบบไดนามิกและโค้ด

    • ใช้โหมด JSON แล้วทำงานได้เสถียร
    • ใน GPT-4o-mini น่าจะช่วยแก้ปัญหาเรื่องรูปแบบได้
    • ในโหมด function calling อัตราความสำเร็จต่ำกว่าโหมด JSON
    • คาดหวังกับฟีเจอร์นี้มาก
  • การเปลี่ยนแปลงสำคัญของ gpt-4o-2024-08-06

    • โทเค็นเอาต์พุตเพิ่มจาก 4k เป็น 16k
    • ต้นทุนอินพุตลดลง 50% และเอาต์พุตลดลง 33%
    • เป็นการเปลี่ยนแปลงสำคัญสำหรับผู้ใช้ API
  • ประสบการณ์ใช้งาน Outlines Structured Output ของ vLLM

    • ให้ความสามารถที่ก้าวหน้ากว่า Structured Output ของ OpenAI
    • รองรับประเภทฟิลด์อย่างจำกัด
      • OpenAI รองรับแค่ประเภทพื้นฐานอย่าง String, Number, Boolean เป็นต้น
      • Outlines สามารถกำหนดแพตเทิร์น regular expression ได้
    • มีต้นทุนในการตั้งค่าสคีมาสูงและมีความหน่วง
      • vLLM และ Outlines แทบไม่มีต้นทุน
      • OpenAI ใช้เวลาในการสร้างไวยากรณ์ที่ไม่มีบริบท
    • เป็นก้าวแรกที่ดีของ OpenAI แต่ยังต้องพัฒนาอีก
  • ความเห็นเกี่ยวกับประสิทธิภาพของ AI

    • การให้ AI ระบุรูปแบบเอาต์พุตเป็นวิธีแก้ปัญหาแบบเดิม
    • ความสามารถด้านการประมวลผลภาษาธรรมชาติและการแก้ปัญหาพัฒนาอย่างน่าทึ่ง
    • แต่ต้องใช้การคำนวณมหาศาลเพื่อให้ได้ผลลัพธ์นี้
  • ความเห็นเกี่ยวกับแนวทางของ OpenAI

    • เลิกใช้แนวทาง fine-tuning สำหรับ structured output
    • llama.cpp เคยทำฟีเจอร์นี้ได้แล้วตั้งแต่ 1.5 ปีก่อน
  • ความสับสนเกี่ยวกับตัวเลือก "strict: true"

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

  • ความกังวลเรื่องผลของการล็อกอินกับระบบเมื่อใช้ฟีเจอร์ของ OpenAI

    • ย้ายไปใช้ LLM ตัวอื่นได้ไม่ง่าย
    • แนะนำให้ใช้เฉพาะเมื่อ text prompt อย่างเดียวไม่เพียงพอ
  • ข้อสังเกตเกี่ยวกับข้อผิดพลาดของรูปแบบ JSON

    • {“val{“:2} เป็น JSON ที่ถูกต้อง
  • ข้อสงสัยว่าทำไมระดับบนสุดต้องเป็นอ็อบเจ็กต์

    • ต้องห่ออาร์เรย์ด้วยอ็อบเจ็กต์ ซึ่งไม่สะดวก