AI Prompt Engineering · บทเรียน

สคีมา JSON ในพรอมต์

การกำหนดรูปแบบผลลัพธ์ให้อยู่ในขอบเขต

บทเรียน 2 จาก 413 ขั้นตอน

สคีมา 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุผลที่ควรใช้ผลลัพธ์แบบมีโครงสร้าง
  2. สคีมา JSON ในพรอมต์
  3. สคีมาของเครื่องมือและฟังก์ชัน
  4. วงจรการซ่อมแซมและตรวจสอบ
← กลับไปที่ AI Prompt Engineering