บทนำ: ทำไม Structured Output ถึงสำคัญในยุค AI
ในโลกของการพัฒนาแอปพลิเคชัน AI นั้น การที่ LLM ตอบกลับมาในรูปแบบที่คาดเดาได้และตรงตามโครงสร้างที่ต้องการ เป็นสิ่งที่จำเป็นอย่างยิ่ง โดยเฉพาะเมื่อนำไปประมวลผลต่อด้วยโค้ดโปรแกรม ไม่ว่าจะเป็นระบบ E-commerce ที่ต้องการวิเคราะห์รีวิวลูกค้า ระบบ RAG ขององค์กรที่ต้องการ metadata ที่เป็นมาตรฐาน หรือโปรเจกต์อิสระที่ต้องการ data pipeline ที่เชื่อถือได้
จากประสบการณ์ตรงในการพัฒนาระบบ AI สำหรับแพลตฟอร์ม E-commerce แห่งหนึ่ง ซึ่งต้องประมวลผลรีวิวลูกค้ากว่า 50,000 รายการต่อวัน พบว่าการใช้ JSON Schema เพื่อกำหนดโครงสร้าง output ช่วยลดอัตราความผิดพลาดในการ parse ข้อมูลได้ถึง 98% เมื่อเทียบกับการใช้ prompt ธรรมดา
บทความนี้จะอธิบายวิธีการใช้ Structured Output ผ่าน JSON Schema อย่างละเอียด พร้อมตัวอย่างโค้ดที่พร้อมใช้งานจริงกับ
HolySheep AI ผู้ให้บริการ API ราคาประหยัดกว่า 85% เมื่อเทียบกับ OpenAI พร้อมความเร็วในการตอบกลับต่ำกว่า 50ms
กรณีศึกษา: ระบบ AI วิเคราะห์รีวิวลูกค้า E-commerce
สมมติว่าคุณพัฒนาระบบ AI สำหรับแพลตฟอร์ม E-commerce ที่ต้องวิเคราะห์รีวิวลูกค้าแต่ละรายการเพื่อดึงข้อมูลสำคัญ เช่น คะแนนความพึงพอใจ หมวดหมู่ปัญหา และระดับความรุนแรงของปัญหา หากไม่มีการกำหนดโครงสร้าง output ที่ชัดเจน ผลลัพธ์ที่ได้อาจอยู่ในรูปแบบที่แตกต่างกันทุกครั้ง ทำให้การ parse และประมวลผลต่อเป็นไปอย่างยุ่งยาก
{
"openapi": "3.1.0",
"info": {
"title": "E-commerce Review Analyzer",
"version": "1.0"
},
"response_format": {
"type": "json_schema",
"json_schema": {
"type": "object",
"properties": {
"sentiment_score": {
"type": "number",
"description": "คะแนนความรู้สึกตั้งแต่ 0-10",
"minimum": 0,
"maximum": 10
},
"category": {
"type": "string",
"enum": ["product_quality", "shipping", "customer_service", "price", "other"],
"description": "หมวดหมู่หลักของรีวิว"
},
"issue_severity": {
"type": "string",
"enum": ["positive", "neutral", "negative_mild", "negative_severe"],
"description": "ระดับความรุนแรงของปัญหา"
},
"key_phrases": {
"type": "array",
"items": {"type": "string"},
"description": "วลีสำคัญจากรีวิว"
},
"actionable": {
"type": "boolean",
"description": "รีวิวนี้มีข้อมูลที่นำไปปฏิบัติได้หรือไม่"
}
},
"required": ["sentiment_score", "category", "issue_severity", "actionable"]
}
}
}
โครงสร้าง JSON Schema ข้างต้นกำหนดให้ LLM ต้องตอบกลับเป็น object ที่มี field ที่จำเป็นครบถ้วน และแต่ละ field มี type และ constraints ที่ชัดเจน ทำให้การ validate ข้อมูลที่ได้รับเป็นไปอย่างง่ายดาย
การเรียกใช้ Structured Output กับ HolySheep AI
ต่อไปนี้คือตัวอย่างโค้ดที่พร้อมใช้งานจริงในการเรียก API ของ HolySheep AI เพื่อวิเคราะห์รีวิวลูกค้าด้วย Structured Output
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
review_analysis_schema = {
"name": "review_analysis",
"description": "ผลการวิเคราะห์รีวิวลูกค้าอีคอมเมิร์ซ",
"type": "object",
"properties": {
"sentiment_score": {
"type": "number",
"description": "คะแนนความพึงพอใจ 0-10",
"minimum": 0,
"maximum": 10
},
"category": {
"type": "string",
"enum": ["product_quality", "shipping", "customer_service", "price", "other"],
"description": "หมวดหมู่ของประเด็นหลัก"
},
"issue_severity": {
"type": "string",
"enum": ["positive", "neutral", "negative_mild", "negative_severe"],
"description": "ระดับความรุนแรงของปัญหา"
},
"key_phrases": {
"type": "array",
"items": {"type": "string"},
"minItems": 1,
"maxItems": 5,
"description": "วลีสำคัญที่พบในรีวิว"
},
"summary": {
"type": "string",
"description": "สรุปประเด็นสำคัญ 1-2 ประโยค"
},
"requires_action": {
"type": "boolean",
"description": "ต้องมีการดำเนินการจากทีมหรือไม่"
}
},
"required": ["sentiment_score", "category", "issue_severity", "summary", "requires_action"]
}
review_text = """
สินค้าจัดส่งเร็วมาก แต่คุณภาพผ้าไม่ดีเท่าที่คาดหวัง
สีที่ได้ต่างจากในรูปเลย ผิดหวังนิดหน่อย
"""
message = client.messages.create(
model="claude-sonnet-4.5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": f"""วิเคราะห์รีวิวลูกค้าต่อไปนี้และแปลงผลลัพธ์เป็น JSON ตาม schema ที่กำหนด:
รีวิว: {review_text}
กรุณาวิเคราะห์และส่งผลลัพธ์ในรูปแบบ JSON ที่ตรงกับ schema ที่ให้ไว้"""
}
],
tools=[
{
"name": "analyze_review",
"description": "วิเคราะห์รีวิวลูกค้าอีคอมเมิร์ซ",
"input_schema": review_analysis_schema
}
]
)
print(message.content[0].input)
จากตัวอย่างโค้ดจะเห็นได้ว่าเรากำหนด JSON Schema ผ่าน tools parameter และบังคับให้ LLM ตอบกลับในรูปแบบที่ตรงกับ schema โดยใช้ base_url ของ HolySheep AI ซึ่งให้ความเร็วในการตอบกลับต่ำกว่า 50ms ทำให้เหมาะสำหรับการประมวลผลจำนวนมาก
ตัวอย่างการใช้งานจริง: ระบบ RAG ขององค์กร
อีกกรณีการใช้งานที่สำคัญคือการสร้างระบบ RAG (Retrieval-Augmented Generation) สำหรับองค์กร โดยปกติแล้วเมื่อ query ข้อมูลจาก knowledge base ผลลัพธ์ที่ได้อาจมีรูปแบบที่ไม่แน่นอน ทำให้ยากต่อการนำไปแสดงผลหรือประมวลผลต่อ การใช้ Structured Output ช่วยให้ได้ผลลัพธ์ที่มีโครงสร้างชัดเจน
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
rag_response_schema = {
"name": "rag_retrieval",
"description": "ผลลัพธ์การค้นหาจากระบบ RAG",
"type": "object",
"properties": {
"answer": {
"type": "string",
"description": "คำตอบที่สรุปจากเอกสาร"
},
"confidence": {
"type": "number",
"description": "ระดับความมั่นใจ 0-1",
"minimum": 0,
"maximum": 1
},
"source_documents": {
"type": "array",
"items": {
"type": "object",
"properties": {
"doc_id": {"type": "string"},
"title": {"type": "string"},
"relevance_score": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"excerpt": {"type": "string"}
}
},
"minItems": 1,
"maxItems": 5
},
"requires_escalation": {
"type": "boolean",
"description": "คำถามต้องการผู้เชี่ยวชาญหรือไม่"
},
"related_topics": {
"type": "array",
"items": {"type": "string"},
"description": "หัวข้อที่เกี่ยวข้องสำหรับการค้นหาเพิ่มเติม"
}
},
"required": ["answer", "confidence", "source_documents", "requires_escalation"]
}
query = "นโยบายการคืนเงินสำหรับสินค้าที่ชำรุดเสียหายเป็นอย่างไร?"
message = client.messages.create(
model="claude-sonnet-4.5",
max_tokens=2048,
messages=[
{
"role": "user",
"content": f"""ค้นหาข้อมูลจาก knowledge base และตอบคำถามต่อไปนี้:
คำถาม: {query}
ส่งผลลัพธ์ในรูปแบบ JSON ตาม schema ที่กำหนด พร้อมระบุแหล่งอ้างอิง"""
}
],
tools=[
{
"name": "rag_query",
"description": "ค้นหาข้อมูลจาก knowledge base องค์กร",
"input_schema": rag_response_schema
}
]
)
import json
result = message.content[0].input
print(json.dumps(result, ensure_ascii=False, indent=2))
ผลลัพธ์ที่ได้จะมีโครงสร้างที่แน่นอน ประกอบด้วยคำตอบ ระดับความมั่นใจ แหล่งอ้างอิงพร้อม relevance score และข้อมูลว่าต้องส่งต่อผู้เชี่ยวชาญหรือไม่ ทำให้การนำไปใช้งานเป็นไปอย่างราบรื่น
การ Validate และ Parse ผลลัพธ์
เมื่อได้รับผลลัพธ์จาก LLM แล้ว ขั้นตอนสำคัญคือการ validate ว่าข้อมูลตรงกับ JSON Schema ที่กำหนดไว้หรือไม่ เพื่อป้องกันข้อผิดพลาดที่อาจเกิดขึ้นจากการตีความผิดของ LLM
import anthropic
from jsonschema import validate, ValidationError
import json
client = anthropic.Anthropic(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
review_schema = {
"type": "object",
"properties": {
"sentiment_score": {
"type":
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง