เผยแพร่: 13 พฤษภาคม 2025
โมเดลภาษาขนาดใหญ่ (LLM) ขึ้นชื่อเรื่องคำตอบที่ยาวเป็นบางครั้ง แม้ว่าคุณจะบอกให้โมเดลตอบกลับด้วยคำว่า "จริง" หรือ "เท็จ" เท่านั้น แต่โมเดลก็อาจตอบกลับด้วยเอาต์พุตที่เข้าใจง่ายและมากกว่าที่คุณถาม เช่น "คำตอบคือ "จริง"
Prompt API ช่วยให้คุณระบุรูปแบบเอาต์พุต JSON ของคำตอบของโมเดลได้โดยส่ง JSON Schema ไปยังเมธอด LanguageModel.prompt()
และ LanguageModel.promptStreaming()
การรองรับ Structured Output พร้อมใช้งานใน Chrome เวอร์ชัน 137
สคีมา JSON คืออะไร
สคีมา JSON คือคําศัพท์ที่ช่วยให้ข้อมูล JSON มีความสอดคล้อง ถูกต้อง และใช้งานร่วมกันได้ในวงกว้าง สคีมา JSON โดดเด่นในฐานะมาตรฐานที่มีประสิทธิภาพในการกำหนดโครงสร้างและกฎของข้อมูล JSON โดยจะใช้ชุดคีย์เวิร์ดเพื่อกำหนดพร็อพเพอร์ตี้ของข้อมูล
JSON Schema เป็นมาตรฐานอุตสาหกรรมสำหรับการรับประกันเอาต์พุตที่มีโครงสร้าง ซึ่งใช้โดย OpenAI API และ Gemini API ร่วมกับมาตรฐานอื่นๆ
เช่น คุณแจ้งให้โมเดลกำหนดแฮชแท็กไม่เกิน 3 รายการสำหรับโพสต์ในโซเชียลเน็ตเวิร์กออนไลน์ เช่น Mastodon เอาต์พุตที่เหมาะสมอาจมีลักษณะคล้ายกับ JSON ต่อไปนี้
{
"hashtags": [
"#pottery",
"#dyi"
]
}
สคีมา JSON ที่สอดคล้องกันสำหรับรูปร่างออบเจ็กต์เอาต์พุตที่ขอนี้จึงจะมีลักษณะดังนี้
{
"type": "object",
"properties": {
"hashtags": {
"type": "array",
"maxItems": 3,
"items": {
"type": "string",
"pattern": "^#[^\\s#]+$"
}
}
},
"required": ["hashtags"],
"additionalProperties": false
}
สคีมา JSON นี้กําหนดโครงสร้างสําหรับออบเจ็กต์ที่ต้องมีช่อง hashtags
ที่มีข้อจํากัดต่อไปนี้
"type": "object"
: ค่ารูทต้องเป็นออบเจ็กต์ JSON"properties": { "hashtags": ... }
: ออบเจ็กต์สามารถ (และในกรณีนี้ต้อง) มีพร็อพเพอร์ตี้ชื่อhashtags
"hashtags":
"type": "array"
: ค่าต้องเป็นอาร์เรย์"maxItems": 3
: อาร์เรย์มีรายการได้สูงสุด 3 รายการ"items": { "type": "string", "pattern": "^#[^\\s#]+$" }
: แต่ละรายการในอาร์เรย์ต้องเป็นสตริงที่ตรงกับรูปแบบนิพจน์ทั่วไปที่ระบุ^#[^\\s#]+$
ดังนี้^#
→ ต้องขึ้นต้นด้วย#
[^\\s#]+
→ ตามด้วยอักขระอย่างน้อย 1 ตัวที่ไม่ใช่เว้นวรรค (\s
) หรือ#
อื่น$
→ ต้องสิ้นสุดที่นั่น
"required": ["hashtags"]
: ออบเจ็กต์ต้องมีพร็อพเพอร์ตี้hashtags
"additionalProperties": false
: ไม่อนุญาตให้ใช้พร็อพเพอร์ตี้อื่นๆ นอกเหนือจากแฮชแท็ก
อ่านเอกสารประกอบพื้นฐานของ JSON Schema เพื่อดูคำอธิบายความสามารถของรูปแบบอย่างละเอียด
อันที่จริงแล้ว LLM สามารถสร้างสคีมา JSON ได้ดี อธิบายข้อจำกัดเป็นภาษาที่เป็นธรรมชาติในพรอมต์และระบุออบเจ็กต์ JSON ตัวอย่างที่ถูกต้อง คุณก็เสร็จไปครึ่งทางแล้ว จากนั้นตรวจสอบออบเจ็กต์ JSON กับสคีมา JSON ที่สร้างขึ้นด้วยโปรแกรมตรวจสอบสคีมา JSON อย่างใดอย่างหนึ่ง เช่น โปรแกรมตรวจสอบสคีมา JSON ของ Newtonsoft ทางออนไลน์
ส่งสคีมา JSON ไปยัง Prompt API
คุณต้องส่งสคีมา JSON เป็นอาร์กิวเมนต์ไปยังออบเจ็กต์ options ของเมธอด prompt()
หรือ promptStreaming()
เป็นค่าของช่อง responseConstraint
เพื่อให้โมเดลเป็นไปตามสคีมา JSON ที่ขอ
ต่อไปนี้คือตัวอย่าง JSON Schema พื้นฐานมากที่ช่วยให้มั่นใจว่าโมเดลจะตอบกลับด้วย true
หรือ false
ในการจำแนกว่าข้อความหนึ่งๆ เช่น โพสต์ Mastodon นี้เกี่ยวกับเครื่องปั้นดินเผาหรือไม่
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended- but that's
how it goes with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
รองรับเอาต์พุตที่คาดการณ์ได้
การรองรับเอาต์พุตที่มีโครงสร้างสำหรับ Prompt API ทําให้คาดการณ์คําตอบของ LLM ได้แม่นยํามากขึ้น ตอนนี้นักพัฒนาซอฟต์แวร์สามารถถือว่าการตอบกลับของโมเดลเป็น JSON ที่ถูกต้องได้โดยไม่ต้องดึงข้อมูลออบเจ็กต์จากการตอบกลับของมาร์กดาวน์หรือกระบวนการหลังการประมวลผลอื่นๆ
การดำเนินการนี้ช่วยให้ AI ในตัวเข้าใกล้ API ที่ใช้ระบบคลาวด์ขึ้นอีกขั้น พร้อมทั้งได้รับประโยชน์ทั้งหมดจากการใช้ AI ฝั่งไคลเอ็นต์ในเครื่อง