ตัวตรวจสอบสคีมาและกฎ
การบังคับใช้ข้อจำกัด
ตัวตรวจสอบสคีมาและกฎ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำความเข้าใจรั้วป้องกัน
- การกรองข้อมูลเข้าและข้อมูลออก
- ตัวตรวจสอบสคีมาและกฎ
- การตรวจสอบด้วยการวิจารณ์ตนเอง