สคีมา JSON ในพรอมต์
การกำหนดรูปแบบผลลัพธ์ให้อยู่ในขอบเขต
สคีมา JSON ในพรอมต์ เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
โครงร่างในฐานะสัญญาผลลัพธ์
โครงร่าง JSONอธิบายรูปแบบของผลลัพธ์ที่ถูกต้องในเชิงประกาศ ได้แก่ ชนิดข้อมูล คีย์ที่จำเป็น ข้อจำกัดของค่า และการซ้อนกัน เมื่อส่งให้ส่วนติดต่อโปรแกรมประยุกต์สำหรับผลลัพธ์แบบมีโครงสร้าง โครงร่างจะกลายเป็นสัญญาที่บังคับใช้จริง แต่เมื่อฝังไว้ในคำสั่ง โครงร่างจะกลายเป็นคำแนะนำที่เข้มงวด
การเชี่ยวชาญการเขียนโครงร่างคือทักษะหลักของการสร้างผลลัพธ์แบบมีโครงสร้าง
ตัวเลือกความเข้มงวดเปลี่ยนทุกอย่าง
ในโหมดเข้มงวด ผู้ให้บริการกำหนดให้ ทุกช่องข้อมูลต้องระบุไว้ใน required และ additionalProperties ต้องเป็น false ช่องข้อมูลที่ไม่บังคับจะแสดงด้วยการรวมชนิดข้อมูลกับ null ไม่ใช่การละเว้น
{
'type': 'object',
'properties': {
'name': {'type': 'string'},
'nickname': {'type': ['string', 'null']}
},
'required': ['name', 'nickname'],
'additionalProperties': False
}การจำกัดค่าสเกลาร์
ย้ายการตรวจสอบความถูกต้องเข้าไปไว้ในโครงร่างแทนการประมวลผลภายหลัง:
enumสำหรับตัวเลือกที่กำหนดไว้ตายตัวminimum/maximumสำหรับช่วงค่าตัวเลขpatternสำหรับข้อความที่ตรวจสอบด้วยนิพจน์ปกติformatสำหรับคำใบ้ เช่นdate-timeหรือemail
{
'rating': {'type': 'integer', 'minimum': 1, 'maximum': 5},
'sku': {'type': 'string', 'pattern': '^[A-Z]{3}-[0-9]{4}$'},
'created': {'type': 'string', 'format': 'date-time'}
}อาร์เรย์และทูเพิล
ใช้ items สำหรับอาร์เรย์ที่มีสมาชิกชนิดเดียวกัน และเพิ่ม minItems/maxItems เพื่อจำกัดความยาว สำหรับทูเพิลตามตำแหน่ง ให้ส่งอาร์เรย์ของโครงร่างผ่าน prefixItems
{
'tags': {
'type': 'array',
'items': {'type': 'string'},
'minItems': 1,
'maxItems': 5
}
}ยูเนียนที่จำแนกด้วย oneOf
สร้างแบบจำลองผลลัพธ์หลายรูปแบบด้วย oneOf ร่วมกับช่องข้อมูลตัวจำแนก แบบจำลองจะเลือกสาขาเพียงหนึ่งสาขา และตัวแปลงข้อมูลของคุณจะสลับการทำงานตามแท็ก
{
'oneOf': [
{'type': 'object', 'properties': {
'kind': {'const': 'email'},
'address': {'type': 'string', 'format': 'email'}},
'required': ['kind', 'address']},
{'type': 'object', 'properties': {
'kind': {'const': 'phone'},
'number': {'type': 'string'}},
'required': ['kind', 'number']}
]
}สร้างโครงร่างจากชนิดข้อมูล
การเขียนโครงร่างด้วยมือมีโอกาสเกิดข้อผิดพลาดสูง จงสร้างโครงร่างจากแบบจำลองที่ระบุชนิดข้อมูล เพื่อไม่ให้โครงร่างกับโค้ดของคุณคลาดเคลื่อนจากกัน
from pydantic import BaseModel
class Invoice(BaseModel):
total: float
currency: str
paid: bool
schema = Invoice.model_json_schema()
# pass schema directly to response_formatคำอธิบายก็เป็นคำชี้นำเช่นกัน
description ทุกแห่งในโครงร่างจะถูกอ่านโดยแบบจำลอง จงใช้คำอธิบายเพื่อ ชี้นำความหมาย ไม่ใช่เพียงบันทึกช่องข้อมูล
ตัวอย่างเช่น คำอธิบายอย่าง 'รหัสประเทศ ISO-3166 แบบอัลฟา-2 ตัวพิมพ์ใหญ่' ช่วยเพิ่มความแม่นยำของช่องข้อมูลได้อย่างมีนัยสำคัญ ให้ถือว่าคำอธิบายเป็นคำชี้นำขนาดเล็กที่ฝังอยู่ในสัญญา
{
'country': {
'type': 'string',
'description': 'ISO-3166 alpha-2 code, uppercase, e.g. US, TR, DE'
}
}การฝังโครงร่างในคำสั่ง
เมื่อผู้ให้บริการไม่มีการรองรับในตัว ให้ฝังโครงร่างไว้ในคำสั่งและกำชับให้ทำตามโครงร่าง ใช้ตัวอย่างในบริบทเพียงหนึ่งตัวอย่างร่วมกับคำสั่งที่ชัดเจนว่า เฉพาะ JSON เท่านั้น ไม่มีข้อความร้อยแก้ว
SYSTEM = (
'You output ONLY JSON matching this schema. No markdown, no commentary.\n'
'Schema:\n' + json.dumps(schema) + '\n'
'If a value is unknown, use null.'
)การหลีกเลี่ยงโครงร่างที่พองโต
โครงร่างที่ซ้อนลึกหรือแตกแขนงมากเกินไปทำให้แบบจำลองสับสนและเพิ่มค่าใช้จ่ายโทเค็น แนวทางมีดังนี้:
- รักษาการซ้อนกันให้ตื้น และทำให้แบนราบเมื่อเป็นไปได้
- เลือกใช้ค่าแจกแจงแทนข้อความอิสระ
- แบ่งโครงร่างขนาดใหญ่ออกเป็นการเรียกใช้หลายครั้งที่เน้นคนละเรื่อง
- ผู้ให้บริการบางรายจำกัดความลึกของการซ้อนและจำนวนช่องข้อมูลทั้งหมด โปรดตรวจสอบข้อจำกัด
การอ้างอิงและการนำกลับมาใช้
ใช้ $defs และ $ref เพื่อนำโครงร่างย่อยกลับมาใช้ (เช่น Address ที่ใช้ทั้งในการเรียกเก็บเงินและการจัดส่ง) โปรดทราบว่าโหมดเข้มงวดบางโหมดจำกัดความลึกของการเรียกตัวเอง ดังนั้นควรตรวจสอบการรองรับก่อนพึ่งพาการอ้างอิงที่อ้างถึงตัวเอง
{
'$defs': {
'Address': {'type': 'object', 'properties': {
'city': {'type': 'string'}}, 'required': ['city'],
'additionalProperties': False}
},
'type': 'object',
'properties': {
'billing': {'$ref': '#/$defs/Address'},
'shipping': {'$ref': '#/$defs/Address'}
},
'required': ['billing', 'shipping'],
'additionalProperties': False
}ตรวจสอบความถูกต้องของโครงร่างเอง
ประเภทข้อบกพร่องที่สังเกตได้ยากอย่างหนึ่งคือ โครงร่าง มีรูปแบบไม่ถูกต้อง ไม่ใช่ผลลัพธ์ ตรวจสอบและยืนยันความถูกต้องของโครงร่างในระบบผสานรวมอย่างต่อเนื่องโดยเทียบกับเมตาโครงร่าง JSON และส่งออบเจ็กต์ตัวอย่างผ่านตัวตรวจสอบความถูกต้องของคุณแบบไปกลับก่อนนำออกใช้งาน
import jsonschema
jsonschema.Draft202012Validator.check_schema(schema)
# also: validate a known-good sample
jsonschema.validate(sample_obj, schema)ตรวจสอบอย่างรวดเร็ว
ในโหมดโครงร่าง JSON แบบเข้มงวดของผู้ให้บริการ จะระบุช่องข้อมูลที่ไม่บังคับใช้อย่างถูกต้องได้อย่างไร
ทบทวน
ขณะนี้คุณสามารถเขียนโครงร่างที่แม่นยำได้แล้ว:
- โหมดเข้มงวดกำหนดให้ทุกช่องข้อมูลเป็นช่องที่จำเป็น และ additionalProperties เป็นเท็จ
- จำกัดค่าสเกลาร์ด้วยค่าแจกแจง ช่วงค่า รูปแบบ และชนิดการจัดรูปแบบ
- สร้างแบบจำลองหลายรูปแบบด้วยตัวจำแนก oneOf
- สร้างโครงร่างจากแบบจำลองที่ระบุชนิดข้อมูล และใช้คำอธิบายเป็นคำชี้นำขนาดเล็ก
- ตรวจสอบความถูกต้องของโครงร่างเองในระบบผสานรวมอย่างต่อเนื่อง
ถัดไป: การนำโครงร่างไปใช้กับการเรียกใช้เครื่องมือและฟังก์ชัน
เรียนรู้ AI Prompt Engineering ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 53
- บทเรียน
- 199
คำถามที่พบบ่อย
บทเรียน “สคีมา JSON ในพรอมต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “สคีมา JSON ในพรอมต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “สคีมา JSON ในพรอมต์”
การกำหนดรูปแบบผลลัพธ์ให้อยู่ในขอบเขต คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “สคีมา JSON ในพรอมต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม
ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุผลที่ควรใช้ผลลัพธ์แบบมีโครงสร้าง
- สคีมา JSON ในพรอมต์
- สคีมาของเครื่องมือและฟังก์ชัน
- วงจรการซ่อมแซมและตรวจสอบ