0Pricing
AI Prompt Engineering · บทเรียน

ตัวตรวจสอบสคีมาและกฎ

การบังคับใช้ข้อจำกัด

ตัวตรวจสอบสคีมาและกฎ เป็นบทเรียน AI Prompt Engineering ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Prompt Engineering และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

ตัวตรวจสอบบังคับใช้ข้อตกลง

ตัวตรวจสอบคือกลไกป้องกันที่ตรวจสอบผลลัพธ์เทียบกับข้อกำหนดที่ระบุไว้อย่างชัดเจน เช่น สคีมาเจสัน ชุดกฎทางธุรกิจ หรือทั้งสองอย่าง ต่างจากตัวจำแนกการกลั่นกรอง ตัวตรวจสอบให้ผลที่กำหนดแน่นอนได้และตรวจสอบย้อนหลังได้อย่างสมบูรณ์ ข้อมูลเข้าเดียวกันจะให้คำตัดสินเดียวกันเสมอ

ชั้นตรวจสอบสคีมา

ตัวตรวจสอบตัวแรกยืนยันว่าผลลัพธ์ตรงตามข้อตกลงด้านโครงสร้าง รวบรวมข้อผิดพลาดทั้งหมด ไม่ใช่เพียงข้อผิดพลาดแรก เพื่อให้ข้อมูลป้อนกลับสำหรับการซ่อมแซมมีความครบถ้วน

import jsonschema
def schema_errors(obj, schema):
    v = jsonschema.Draft202012Validator(schema)
    return [f"{list(e.path) or 'root'}: {e.message}"
            for e in v.iter_errors(obj)]

เหนือกว่าสคีมา: กฎทางธุรกิจ

สคีมาไม่สามารถแสดงแทนทุกอย่างได้ สคีมาระบุได้ว่า discount เป็นตัวเลข แต่ไม่สามารถระบุได้ว่าค่านั้นต้องไม่เกินยอดรวมย่อย ตัวตรวจสอบกฎใช้เข้ารหัสค่าคงที่ที่เชื่อมโยงหลายเขตข้อมูลและค่าคงที่ของโดเมนไว้ในโค้ด

RULES = [
  ('discount_le_subtotal', lambda o: o['discount'] <= o['subtotal']),
  ('total_consistent', lambda o: o['total'] == o['subtotal'] - o['discount']),
  ('currency_supported', lambda o: o['currency'] in SUPPORTED)
]
def rule_errors(o):
    return [name for name, fn in RULES if not fn(o)]

โมเดลระบุชนิดข้อมูลในฐานะตัวตรวจสอบ

ไลบรารีโมเดลแบบระบุชนิดข้อมูล เช่น ไพแดนติก สามารถทำหน้าที่เป็นทั้งตัวสร้างสคีมาและตัวตรวจสอบ พร้อมตัวตรวจสอบแบบกำหนดเองสำหรับกฎต่าง ๆ การแยกวิเคราะห์ไม่สำเร็จถือเป็นคำตัดสิน

from pydantic import BaseModel, field_validator

class Order(BaseModel):
    subtotal: float
    discount: float
    total: float

    @field_validator('discount')
    @classmethod
    def discount_ok(cls, v, info):
        if v < 0:
            raise ValueError('discount must be non-negative')
        return v

ตัวตรวจสอบการอิงบริบทและการอ้างอิงแหล่งที่มา

สำหรับผลลัพธ์จาก RAG ให้ตรวจสอบว่าข้อกล่าวอ้างมีบริบทที่ให้มารองรับ กำหนดให้โมเดลอ้างอิงรหัสแหล่งที่มา จากนั้นตรวจสอบว่ารหัสที่อ้างอิงแต่ละรหัสมีอยู่จริง และช่วงข้อความที่ยกมาปรากฏอยู่ในแหล่งที่มาจริง ปฏิเสธคำตอบที่อ้างอิงแหล่งที่มาที่ไม่มีอยู่จริงหรือถูกสร้างขึ้น

def citations_valid(answer, sources):
    for cite in answer['citations']:
        if cite['source_id'] not in sources:
            return False
        if cite['quote'] not in sources[cite['source_id']]:
            return False
    return True

การตรวจสอบการอ้างอิงและข้ามระบบ

กฎบางอย่างจำเป็นต้องค้นหาข้อมูลจากภายนอก เช่น รหัสคำสั่งซื้อที่อ้างอิงมีอยู่จริงหรือไม่ สินค้ามีอยู่ในคลังหรือไม่ วันที่อยู่ในช่วงเวลาที่ถูกต้องหรือไม่ ตัวตรวจสอบเหล่านี้จะเรียกดูข้อมูลจากระบบของคุณ ควรทำให้ทำงานได้รวดเร็ว เช่น ใช้แคชและประมวลผลเป็นชุด เพราะตัวตรวจสอบอยู่บนเส้นทางการตอบกลับ

def order_exists(o):
    return db.exists('SELECT 1 FROM orders WHERE id = %s', o['order_id'])

คำตัดสินที่ติดป้ายระดับความรุนแรง

การละเมิดกฎไม่ได้มีความรุนแรงเท่ากันทั้งหมด ติดป้ายระดับความรุนแรงให้แต่ละกฎ เพื่อให้กระบวนการประมวลผลเลือกการดำเนินการที่เหมาะสม: บล็อกการละเมิดร้ายแรงทันที สร้างผลลัพธ์ใหม่เมื่อพบปัญหาด้านคุณภาพ และอนุญาตให้ผ่านพร้อมคำเตือนสำหรับปัญหาเล็กน้อย

RULE_SEVERITY = {
  'discount_le_subtotal': 'critical',
  'total_consistent': 'critical',
  'tone_professional': 'warning'
}

ประกอบตัวตรวจสอบตามลำดับ

เรียกใช้ตัวตรวจสอบจากต้นทุนต่ำสุดก่อน และหยุดการทำงานทันทีเมื่อพบความล้มเหลวร้ายแรง: ตรวจสอบสคีมา จากนั้นตรวจสอบกฎในหน่วยความจำ ต่อด้วยการค้นหาจากภายนอก แล้วจึงตรวจสอบโดยโมเดลตัดสิน วิธีนี้ช่วยลดต้นทุนบนเส้นทางการปฏิเสธที่เกิดขึ้นเป็นส่วนใหญ่

def validate_all(obj):
    errs = schema_errors(obj, SCHEMA)
    if errs: return Reject(errs, 'critical')
    errs = rule_errors(obj)
    if errs: return Reject(errs, max_severity(errs))
    if not order_exists(obj): return Reject(['order_id'], 'critical')
    return Accept()

ตัวตรวจสอบขับเคลื่อนข้อมูลป้อนกลับเพื่อการซ่อมแซม

คุณค่าของตัวตรวจสอบจะเพิ่มขึ้นอย่างมากเมื่อข้อความจากตัวตรวจสอบถูกส่งเข้าไปในวงจรการซ่อมแซม สร้างข้อผิดพลาดที่เครื่องนำไปดำเนินการได้ โดยระบุเส้นทางเขตข้อมูล กฎที่ไม่ผ่าน และค่าที่ก่อให้เกิดปัญหา เพื่อให้โมเดลแก้ไขได้อย่างแม่นยำภายในการทำงานครั้งเดียว

{'errors': [
  {'path': 'discount', 'rule': 'discount_le_subtotal',
   'got': 120, 'limit': 100}
]}

ทดสอบตัวตรวจสอบเอง

ตัวตรวจสอบที่มีข้อผิดพลาดอาจปล่อยให้ผลลัพธ์ที่ไม่ถูกต้องผ่านไปโดยไม่แจ้งเตือน หรือบล็อกผลลัพธ์ที่ถูกต้อง ทดสอบหน่วยของแต่ละกฎด้วยชุดข้อมูลทดสอบที่แสดงกรณีผ่านและไม่ผ่าน และเพิ่มการทดสอบตามคุณสมบัติสำหรับค่าคงที่เชิงตัวเลข ชุดการทดสอบของตัวตรวจสอบเป็นโค้ดที่สำคัญต่อระบบจริง ไม่ใช่เพียงสคริปต์

def test_discount_rule():
    assert rule_errors({'discount':10,'subtotal':100,'total':90}) == []
    assert 'discount_le_subtotal' in rule_errors(
        {'discount':120,'subtotal':100,'total':-20})

ตัวตรวจสอบเทียบกับการถอดรหัสแบบมีข้อจำกัด

การถอดรหัสแบบมีข้อจำกัดป้องกันข้อผิดพลาดด้านโครงสร้างตั้งแต่เวลาสร้างผลลัพธ์ แต่ไม่สามารถบังคับใช้ความหมายได้ เพราะไม่รู้กฎทางธุรกิจของคุณ ตัวตรวจสอบจะตรวจจับการละเมิดด้านความหมายภายหลัง ใช้ทั้งสองอย่างร่วมกัน: ใช้การถอดรหัสเพื่อควบคุมรูปแบบโครงสร้าง ใช้ตัวตรวจสอบเพื่อควบคุมความหมาย และใช้วงจรการซ่อมแซมเพื่อปรับแก้ให้สอดคล้องกัน

ตรวจสอบอย่างรวดเร็ว

สคีมาเจสันระบุว่า discount และ subtotal เป็นตัวเลข โมเดลส่งคืน discount เท่ากับ 120 โดยมี subtotal เท่ากับ 100 ชั้นใดควรตรวจจับปัญหานี้

สรุปทบทวน

ตัวตรวจสอบสคีมาและกฎ:

  • การตรวจสอบสคีมาครอบคลุมโครงสร้าง ส่วนตัวตรวจสอบกฎครอบคลุมความหมาย
  • โมเดลแบบระบุชนิดข้อมูลสามารถสร้างสคีมาและตรวจสอบได้ในที่เดียว
  • เพิ่มการตรวจสอบการอิงบริบท การอ้างอิงแหล่งที่มา และการอ้างอิงข้อมูลสำหรับ RAG และกระแสข้อมูล
  • ติดป้ายระดับความรุนแรง ประกอบตัวตรวจสอบจากต้นทุนต่ำสุดก่อน และส่งข้อผิดพลาดที่แม่นยำเข้าสู่การซ่อมแซม
  • ทดสอบตัวตรวจสอบในฐานะโค้ดที่สำคัญต่อระบบจริง

ถัดไป: การตรวจสอบด้วยการวิจารณ์ตนเอง ซึ่งโมเดลจะตรวจสอบผลลัพธ์ของตนเอง

คำถามที่พบบ่อย

บทเรียน “ตัวตรวจสอบสคีมาและกฎ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวตรวจสอบสคีมาและกฎ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Prompt Engineering ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Prompt Engineering มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวตรวจสอบสคีมาและกฎ”

การบังคับใช้ข้อจำกัด คุณปฏิบัติ AI Prompt Engineering ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Prompt Engineering หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Prompt Engineering บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวตรวจสอบสคีมาและกฎ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน AI Prompt Engineering นี้ได้ไหม

ได้ บทเรียน AI Prompt Engineering ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การทำความเข้าใจรั้วป้องกัน
  2. การกรองข้อมูลเข้าและข้อมูลออก
  3. ตัวตรวจสอบสคีมาและกฎ
  4. การตรวจสอบด้วยการวิจารณ์ตนเอง
← กลับไปที่ AI Prompt Engineering