3 นาที

การตรวจสอบ ความผิดพลาด และกรณีขอบเขตในระบบที่สร้างโดย AI

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

การตรวจสอบ ความผิดพลาด และกรณีขอบเขตในระบบที่สร้างโดย AI

ความหมายของ “ระบบที่สร้างโดย AI” ในโพสต์นี้

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

สิ่งนี้กว้างกว่าคำว่า “แชทบอท” ในทางปฏิบัติ การสร้างโดย AI อาจแสดงออกมาเป็น:

  • ข้อความหรือข้อมูลที่สร้างขึ้น (สรุป การจัดหมวดหมู่ ฟิลด์ที่สกัดออกมา)
  • โค้ดที่สร้างขึ้น (สแน็ปชอต คอนฟิก SQL เทมเพลต)
  • เวิร์กโฟลว์ที่สร้างขึ้น (แผนทีละขั้นตอน เช็คลิสต์ การตัดสินใจเส้นทาง)
  • พฤติกรรมของเอเยนต์ (โมเดลเลือกเครื่องมือ เรียก API และเชนการกระทำ)
  • ระบบที่ใช้ prompt เป็นหลัก (prompt ออกแบบมาอย่างระมัดระวังที่ทำหน้าที่เหมือน “โค้ดอ่อน”)

ถ้าคุณเคยใช้แพลตฟอร์มสร้างบรรยากาศการเขียนโค้ดอย่าง Koder.ai—ที่การสนทนาแชทสามารถสร้างและพัฒนาแอปเว็บ แบ็กเอนด์ หรือโมบายแอปทั้งชุดได้—แนวคิดที่ว่า “เอาต์พุตของโมเดลกลายเป็น flow ควบคุม” จะชัดเจนมากขึ้น เอาต์พุตของโมเดลไม่ได้เป็นเพียงคำแนะนำ แต่มันสามารถเปลี่ยนเส้นทาง สคีมา การเรียก API การปรับใช้ และพฤติกรรมที่ผู้ใช้เห็นได้

ทำไมการตรวจสอบและข้อผิดพลาดจึงเป็นฟีเจอร์ของผลิตภัณฑ์

เมื่อเอาต์พุตของ AI เป็นส่วนหนึ่งของการควบคุมเส้นทาง กฎการตรวจสอบและการจัดการข้อผิดพลาดกลายเป็นฟีเจอร์ด้านความเชื่อถือได้ที่ผู้ใช้มองเห็นได้ ไม่ใช่รายละเอียดทางวิศวกรรมเพียงอย่างเดียว ฟิลด์ที่ขาด วัตถุ JSON ที่ผิดรูป หรือคำสั่งที่มั่นใจแต่ผิด ไม่ได้เพียงแค่ “ล้มเหลว”—มันอาจสร้าง UX ที่สับสน บันทึกที่ผิด หรือการกระทำที่มีความเสี่ยงได้

ดังนั้นเป้าหมายไม่ใช่ “ไม่ให้ล้มเหลวเลย” เพราะการล้มเหลวเป็นเรื่องปกติเมื่อเอาต์พุตมีความน่าจะเป็น เป้าหมายคือ ล้มเหลวอย่างควบคุมได้: ตรวจจับปัญหาแต่เนิ่นๆ สื่อสารอย่างชัดเจน และกู้คืนอย่างปลอดภัย

สิ่งที่จะครอบคลุมในโพสต์นี้

เนื้อหาที่เหลือจะแบ่งหัวข้อออกเป็นพื้นที่เชิงปฏิบัติ:

  • กฎ ที่ตรวจสอบอินพุตและเอาต์พุต (โครงสร้างและความหมาย)
  • ตัวเลือกการจัดการข้อผิดพลาด (หยุดเร็ว vs. ล้มเหลวอย่างสุภาพ)
  • กรณีขอบเขต ที่ปรากฏในการใช้งานจริงและวิธีลดความประหลาดใจ
  • กลยุทธ์การทดสอบ สำหรับพฤติกรรมที่ไม่แน่นอนสมบูรณ์
  • การมอนิเตอร์และการสังเกตการณ์ เพื่อให้คุณเห็นความล้มเหลว แนวโน้ม และการ regression

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

ทำไมกฎการตรวจสอบจึงเกิดขึ้นตามธรรมชาติเมื่อมีเอาต์พุตจาก AI

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

ความแปรปรวนบังคับให้ข้อสมมติเปิดเผย

กับซอฟต์แวร์แบบเดิม เอาต์พุตมักเป็นแบบตายตัว: ถ้าอินพุตเป็น X คุณคาดว่า Y แต่กับระบบที่สร้างโดย AI คำสั่งเดียวกันอาจให้การพรรณนาที่ต่างกัน รายละเอียดที่ต่างกัน หรือการตีความต่างกัน ความแปรปรวนนั้นไม่ใช่บั๊กในตัวเอง—แต่มันหมายความว่าคุณไม่สามารถพึ่งพาความคาดหวังแบบไม่เป็นทางการ เช่น “น่าจะมีวันที่อยู่” หรือ “โดยปกติจะคืน JSON” ได้

กฎการตรวจสอบเป็นคำตอบเชิงปฏิบัติต่อคำถาม: อะไรต้องเป็นจริงเพื่อให้เอาต์พุตนี้ปลอดภัยและใช้งานได้?

“ดูเหมือนถูกต้อง” กับ “ถูกต้องตามธุรกิจของเรา”

คำตอบของโมเดลอาจดูถูกต้องในเชิงรูปแบบแต่ยังไม่ผ่านความต้องการจริงของคุณ

ตัวอย่างเช่น โมเดลอาจสร้าง:

  • ที่อยู่ที่มีรูปแบบดีแต่ใช้ประเทศผิด
  • ข้อความคืนเงินที่เป็นมิตรแต่ละเมิดนโยบายของคุณ
  • สรุปที่ประดิษฐ์ตัวชี้วัดที่ทีมคุณไม่ติดตาม

ในทางปฏิบัติคุณจะใช้การตรวจสอบสองชั้น:

  1. ความถูกต้องเชิงโครงสร้าง (แยกพาร์สได้ สมบูรณ์ ในฟอร์แมตที่คาด)
  2. ความถูกต้องเชิงธุรกิจ (ได้รับอนุญาต แม่นยำพอ และสอดคล้องกับกฎของคุณ)

ความกำกวมปรากฏในที่ที่คาดได้

เอาต์พุตของ AI มักทำให้รายละเอียดพร่ามัว ซึ่งมนุษย์มักแก้ไขโดยสัญชาตญาณ โดยเฉพาะเรื่อง:

  • ฟอร์แมต: “03/04/2025” (3 มีนาคม หรือ 4 เมษายน?)
  • หน่วย: “20” (นาที ชั่วโมง ดอลลาร์?)
  • ชื่อ: “Alex Chen” (เป็นใครใน CRM ของคุณ?)
  • เขตเวลา: “พรุ่งนี้เช้า” (ในเขตเวลาใคร?)

คิดเป็นสัญญา: อินพุต เอาต์พุต ผลข้างเคียง

วิธีที่ช่วยได้คือการนิยาม "สัญญา" สำหรับแต่ละการโต้ตอบกับ AI:

  • Inputs: ฟิลด์ที่ต้องมี ขอบเขตที่อนุญาต บริบทที่ต้องมี
  • Outputs: คีย์ที่ต้องมี ค่าอนุญาต ระดับความมั่นใจที่ต้องถึง
  • Side effects: การกระทำที่อนุญาต (เช่น “ร่างเท่านั้น” “ห้ามส่งโดยอัตโนมัติ” "ต้องขอการยืนยัน")

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

การตรวจสอบข้อมูลนำเข้า: การเฝ้าประตูหน้า

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

อะไรนับเป็น “อินพุต” ในระบบ AI?

อินพุตไม่ได้มีเพียงช่อง prompt เท่านั้น แหล่งทั่วไปรวมถึง:

  • ข้อความผู้ใช้ (ข้อความแชท prompt ความเห็น)
  • ไฟล์ (PDF รูปภาพ สเปรดชีต เสียง)
  • ฟอร์มโครงสร้าง (ดรอปดาวน์ การลงทะเบียนหลายขั้นตอน)
  • payload ของ API (JSON จากบริการอื่น webhook)
  • ข้อมูลที่ดึงมา (ผลการค้นหา แถวฐานข้อมูล เอาต์พุตจากเครื่องมือ)

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

การตรวจสอบเชิงปฏิบัติที่ป้องกันความล้มเหลวง่ายๆ

การตรวจสอบที่ดีมุ่งไปที่กฎที่ชัดเจนและตรวจสอบได้:

  • ฟิลด์ที่จำเป็น: prompt อยู่ไหม ไฟล์แนบไหม เลือกภาษาหรือไม่
  • ขอบเขตและข้อจำกัด: ขนาดไฟล์สูงสุด จำนวนไอเท็มสูงสุด ค่าตัวเลขขั้นต่ำ/สูงสุด
  • ค่าที่อนุญาต: ฟิลด์แบบ enum (summary | email | analysis) ประเภทไฟล์ที่รับได้
  • ข้อจำกัดความยาว: ความยาว prompt ชื่อเรื่อง ขนาดอาร์เรย์
  • การเข้ารหัสและฟอร์แมต: UTF-8 ถูกต้อง JSON ถูกต้อง ไม่มี base64 เสีย รูปแบบ URL ปลอดภัย

การตรวจสอบเหล่านี้ลดความสับสนของโมเดลและปกป้องระบบด้านหลัง (พาร์เซอร์ ฐานข้อมูล คิว) จากการล่ม

ปรับมาตรฐานก่อนตรวจสอบ (เมื่อคาดเดาได้)

การปรับมาตรฐานเปลี่ยนสิ่งที่ “เกือบถูก” ให้เป็นข้อมูลที่สม่ำเสมอ:

  • ตัดช่องว่างส่วนเกิน; ยุบช่องว่างซ้ำ
  • ปรับตัวพิมพ์เมื่อความหมายไม่เปลี่ยน (เช่น รหัสประเทศ)
  • แยกพาร์สฟอร์แมตโลเคลอย่างระมัดระวัง (จุดกับจุลภาคทศนิยม ลำดับวันที่ต่างกัน)
  • แปลงวันที่เป็นตัวแทนมาตรฐาน (เช่น ISO-8601) หลังการพาร์ส

ปรับเมื่อตกลงได้แน่ชัดเท่านั้น หากไม่แน่ใจว่าผู้ใช้หมายถึงอะไร อย่าทาย

ปฏิเสธ vs แก้ให้อัตโนมัติ: เลือกทางที่ปลอดภัยกว่า

  • ปฏิเสธอินพุต เมื่อการแก้ไขอาจเปลี่ยนความหมาย สร้างความเสี่ยงด้านความปลอดภัย หรือปกปิดความผิดพลาดของผู้ใช้ (เช่น วันที่กำกวม สกุลเงินไม่คาดคิด HTML/JS น่าสงสัย)
  • แก้ให้อัตโนมัติ เมื่อเจตนาย่อมชัดเจนและการเปลี่ยนแปลงย้อนกลับได้ (เช่น ตัดช่องว่าง แก้เครื่องหมายวรรคตอนทั่วไป เปลี่ยน ".PDF" เป็น "pdf")

กฎที่มีประโยชน์: แก้รูปแบบ อัตโนมัติ ปฏิเสธความหมาย

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

การตรวจสอบเอาต์พุต: ตรวจโครงสร้างและความหมาย

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

1) การตรวจสอบเชิงโครงสร้างด้วยสคีมาเอาต์พุต

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

สคีมาใช้งานมักระบุ:

  • คีย์ที่ต้องมี (เช่น answer, confidence, citations)
  • ชนิด (string vs number vs array)
  • enum (เช่น status ต้องเป็นหนึ่งใน "ok" | "needs_clarification" | "refuse")
  • ข้อจำกัด (ความยาวขั้นต่ำ/สูงสุด ช่วงตัวเลข อาร์เรย์ที่ไม่ว่าง)

การตรวจเชิงโครงสร้างจับความล้มเหลวบ่อยๆ: โมเดลคืนเป็นร้อยแก้วแทน JSON ลืมคีย์ หรือคืนตัวเลขในที่ที่คุณต้องการสตริง

2) การตรวจเชิงความหมาย: โครงสร้างไม่พอ

แม้ JSON จะตรงตามสคีมา ก็ยังอาจผิด การตรวจเชิงความหมายทดสอบว่าเนื้อหาสมเหตุผลสำหรับผลิตภัณฑ์และนโยบายของคุณหรือไม่

ตัวอย่างที่ผ่านสคีมาแต่ล้มเหลวด้านความหมาย:

  • ไอดีที่โมเดลประดิษฐ์ขึ้น: คืน customer_id: "CUST-91822" ที่ไม่มีในฐานข้อมูลคุณ
  • การอ้างอิงอ่อน: มี citations แต่มิได้สนับสนุนข้ออ้างจริงๆ หรืออ้างถึงแหล่งที่ไม่ได้ให้มา
  • ยอดรวมเป็นไปไม่ได้: รายการรวมกันเป็น 120 แต่ total เป็น 98; หรือส่วนลดมากกว่ายอดย่อย

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

3) กลยุทธ์ที่ใช้ได้จริงในระบบจริง

  • บังคับใช้สคีมา: ตรวจ JSON ก่อนใช้ ปฏิเสธหรือลองใหม่เมื่อผิด
  • การถอดรหัสจำกัด / เอาต์พุตเชิงโครงสร้าง: จำกัดสิ่งที่โมเดลสามารถส่งออกให้ยากต่อการสร้างค่าที่ไม่ถูกต้อง
  • ตัวตรวจหลัง (post-checkers): รันตัวตรวจ determinisitc (และบางครั้งใช้โมเดลตัวที่สอง) เพื่อตรวจความสอดคล้อง การอ้างอิง และการปฏิบัติตามนโยบาย

เป้าหมายไม่ใช่ลงโทษโมเดล—แต่เป็นการป้องกันไม่ให้ระบบด้านหลังปฏิบัติต่อ “ความมั่นใจที่เป็นความเท็จ” เสมือนเป็นคำสั่ง

พื้นฐานการจัดการข้อผิดพลาด: หยุดเร็วหรือกู้คืนอย่างสุภาพ

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

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

ความล้มเหลวแบบหนัก vs แบบอ่อน

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

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

ข้อความสู่ผู้ใช้: บอกว่าเกิดอะไรขึ้นและต้องทำอย่างไรต่อ

ข้อความที่ผู้ใช้เห็นควรสั้นและปฏิบัติได้:

  • เกิดอะไรขึ้น: “เราไม่สามารถสร้างสรุปที่ถูกต้องสำหรับเอกสารนี้ได้”
  • ต้องทำอย่างไรต่อ: “โปรดลองอีกครั้ง หรืออัปโหลดไฟล์ที่มีขนาดเล็กกว่า”
  • บริบทเสริม (ไม่เชิงเทคนิค): “คำตอบไม่สมบูรณ์”

หลีกเลี่ยงการโชว์ stack trace prompt ภายใน หรือไอดีภายในที่ไม่จำเป็น

แยกข้อความสู่ผู้ใช้จากการวินิจฉัยภายใน

มองข้อผิดพลาดเป็นเอาต์พุตคู่ขนาน:

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

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

จัดหมวดข้อผิดพลาดเพื่อการไต่สวนอย่างรวดเร็ว

พจนานุกรมข้อผิดพลาดง่ายๆ ช่วยให้ทีมตอบสนองได้เร็วขึ้น:

  • Validation: เอาต์พุตไม่ตรงสคีมา ขาดฟิลด์ เนื้อหาไม่ปลอดภัย
  • Dependency: การล้มเหลวของฐานข้อมูล/API ปัญหาสิทธิ์
  • Timeout: โมเดลหรือการเรียกบริการภายนอกเกินเวลาที่กำหนด
  • Logic: บั๊กในโค้ดเชื่อมโยง การแมป หรือกฎธุรกิจ

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

การกู้คืนและ fallback โดยไม่ทำให้แย่ลง

การตรวจสอบจะจับปัญหาได้; การกู้คืนเป็นตัวกำหนดว่าผู้ใช้จะเห็นประสบการณ์ที่เป็นประโยชน์หรือสับสน เป้าหมายไม่ใช่ “สำเร็จเสมอไป” แต่ว่า “ล้มเหลวคาดการณ์ได้ และลดทอนความเสียหาย”

การลองใหม่: มีประโยชน์สำหรับความล้มเหลวชั่วคราว เป็นอันตรายเมื่อคำตอบผิด

ตรรกะการลองใหม่มีประสิทธิภาพเมื่อความล้มเหลวเป็นแบบชั่วคราว:

  • Rate limits (429), ปัญหาเครือข่าย, หรือ timeout ของโมเดล
  • การหยุดชะงักของ upstream ชั่วคราว

ใช้ retries ที่มีขีดจำกัด พร้อม exponential backoff และ jitter หลีกเลี่ยงการลองซ้ำหลายครั้งรวดเร็วเกินไป

การลองใหม่ทำร้ายเมื่อเอาต์พุตโครงสร้างผิดหรือความหมายผิด ถ้าตัวตรวจบอกว่า “ฟิลด์ที่ต้องมีขาด” หรือ “ฝ่าฝืนนโยบาย” การลองอีกครั้งด้วย prompt เดิมมักให้คำตอบที่ยังไม่ถูกต้องและเสียโทเค็นและเวลา ในกรณีเหล่านี้ให้เลือก ซ่อม prompt (ถามใหม่ด้วยข้อจำกัดเข้มงวดขึ้น) หรือใช้ fallback

Fallback ที่ลดทอนอย่างสุภาพ

fallback ที่ดีคือสิ่งที่คุณอธิบายให้ผู้ใช้ฟังได้และวัดผลภายในได้:

  • โมเดลตัวเล็ก/ราคาถูกกว่า สำหรับคำตอบที่ “พอใช้ได้”
  • คำตอบที่แคชไว้ สำหรับคำถามที่ซ้ำและคงที่
  • ฐานะ rule-based (เทมเพลต เฮียวริสติก) สำหรับฟอร์แมตรูปแบบที่คาดได้
  • การตรวจสอบโดยมนุษย์ เมื่อผลของความผิดพลาดมีความรุนแรงสูง

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

ความสำเร็จบางส่วน: คืนผลที่ดีที่สุดพร้อมคำเตือน

บางครั้งคุณสามารถคืนส่วนที่ใช้ได้ (เช่น สกัดเอนทิตีได้แต่ไม่ใช่สรุปเต็ม) ทำเครื่องหมายว่าเป็น บางส่วน ใส่ คำเตือน และหลีกเลี่ยงการเติมช่องว่างด้วยการเดาอย่างเงียบๆ วิธีนี้รักษาความน่าเชื่อถือและยังให้สิ่งที่เรียกใช้ได้แก่ผู้เรียก

การจำกัดอัตรา เวลา และ circuit breakers

ตั้ง timeouts ต่อการเรียกและเดดไลน์โดยรวมของคำขอ เมื่อถูกรับจำกัดอัตรา ให้เคารพ Retry-After หากมี เพิ่ม circuit breaker เพื่อให้ความล้มเหลวซ้ำๆ เปลี่ยนเป็น fallback แทนที่จะกดดัน API/โมเดลต่อไป ซึ่งป้องกันการล่มเป็นลูกโซ่และทำให้พฤติกรรมการกู้คืนคงที่

แหล่งที่มาของกรณีขอบเขตในการใช้งานจริง

กรณีขอบเขตคือสถานการณ์ที่ทีมของคุณไม่เห็นจากเดโม: อินพุตหายาก ฟอร์แมตแปลกๆ prompt ประจัญบาน หรือการสนทนาที่ยาวกว่าที่คาด ด้วยระบบที่สร้างโดย AI พวกมันจะปรากฏเร็วเพราะผู้คนปฏิบัติกับระบบเหมือนผู้ช่วยที่ยืดหยุ่น—แล้วดันมันเลยเส้นทางที่คาดหวัง

1) อินพุตผู้ใช้ที่หายากและรก

ผู้ใช้จริงไม่ได้เขียนเหมือนข้อมูลทดสอบ พวกเขาแปะสกรีนช็อตที่แปลงเป็นข้อความ โน้ตที่ยังไม่เสร็จ หรือเนื้อหาที่คัดลอกจาก PDF ที่มีการขึ้นบรรทัดแปลกๆ พวกเขายังพยายาม prompt "สร้างสรรค์": ขอให้โมเดลละเมิดกฎ เปิดเผยคำสั่งซ่อน หรือส่งออกในฟอร์แมตที่สับสนโดยตั้งใจ

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

2) ค่าขอบเขตที่ทำลายสมมติฐาน

ความล้มเหลวหลายอย่างมาจากค่าที่สุดขีดมากกว่าการใช้งานปกติ:

  • ค่าว่าง: ฟิลด์ว่าง ไฟล์แนบหาย หรือ "N/A" ในช่องสำคัญ
  • ความยาวสูงสุด: ชื่อยาว รายการใหญ่มาก ที่อยู่หลายย่อหน้า หรือประวัติการแชทยาวทั้งชุด
  • ยูนิโค้ดไม่ธรรมดา: อีโมจิ ช่องว่างความกว้างเป็นศูนย์ เครื่องหมายคำพูดอัจฉริยะ ข้อความจากขวาไปซ้าย หรืออักขระผสมที่ดูเหมือนกันแต่เปรียบเทียบต่างกัน
  • ภาษาผสม: ตั๋วเขียนผสมอังกฤษ-สเปน รายการสินค้าที่ชื่อเป็นญี่ปุ่นแต่แอตทริบิวต์เป็นฝรั่งเศส

สิ่งเหล่านี้มักผ่านการตรวจพื้นฐานเพราะดูเหมือนปกติสำหรับมนุษย์แต่ล้มพาร์ส หรือนับ หรือละเมิดกฎด้านหลัง

3) กรณีขอบเขตจากการรวมระบบ (โลกเปลี่ยนใต้เรา)

แม้ prompt และการตรวจจะมั่นคง การรวมระบบสามารถนำกรณีขอบเขตเข้ามาได้:

  • API ภายนอกเปลี่ยนชื่อฟิลด์ เพิ่มพารามิเตอร์ที่ต้องมี หรือเริ่มคืนโค้ดข้อผิดพลาดใหม่
  • ความไม่ตรงกันด้านสิทธิ์: AI สร้างคำขอเข้าถึงข้อมูลที่ผู้ใช้ไม่ได้รับอนุญาต หรือพยายามกระทำที่บัญชีเซอร์วิสไม่สามารถทำได้
  • drift ของสัญญาข้อมูล: เครื่องมือคาด ISO dates แต่รับ "next Friday" หรือคาดรหัสสกุลเงินแต่ได้สัญลักษณ์

4) “สิ่งที่ไม่รู้ไม่รู้” และทำไมล็อกจึงสำคัญ

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

ความปลอดภัยและการรักษาความปลอดภัย: เมื่อการตรวจสอบคือการป้องกัน

ทดสอบฟลว์ AI โดยไม่ต้องเดา
สร้างชุด prompt ทองคำและการทดสอบสัญญาเพื่อจับการเบนของสคีมาแต่เนิ่นๆ

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

การโจมตีผ่าน prompt injection เป็นปัญหาการตรวจสอบที่มีผลด้านความปลอดภัย

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

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

การตรวจเชิงป้องกันที่ทำหน้าที่เป็นราวกั้น

การรักษาความปลอดภัยที่ดีมักดูเหมือนกฎการตรวจสอบธรรมดา:

  • allowlist ของเครื่องมือ: จำกัดชัดเจนว่าเครื่องมือ/การกระทำใดโมเดลเรียกได้ในบริบทนั้น
  • ข้อจำกัด URL และไฟล์: อนุญาตเฉพาะโดเมนที่ผ่านการอนุมัติ บล็อกเป้าหมายเครือข่ายภายใน บังคับประเภท/ขนาดไฟล์ และหลีกเลี่ยงการอ่านไฟล์โดยไม่จำกัด
  • การลบข้อมูลอ่อนไหว: ตรวจจับและลบความลับ (API keys โทเค็น) ข้อมูลส่วนบุคคล และไอดีภายในก่อนส่งให้โมเดลหรือคืนเอาต์พุต

หากคุณให้โมเดลเรียกดูหรือดึงเอกสาร ตรวจสอบว่าไปที่ไหนได้และนำอะไรกลับมาได้

สิทธิน้อยที่สุดสำหรับเครื่องมือและโทเค็น

ใช้หลักการสิทธิน้อยที่สุด: ให้แต่ละเครื่องมือสิทธิขั้นต่ำ โทเค็นมีขอบเขตแคบ (อายุสั้น จำกัด endpoint และข้อมูล) ดีกว่าที่จะปฏิเสธคำขอแล้วขอการกระทำที่แคบลง มากกว่าจะให้สิทธิ์กว้าง "กันไว้เผื่อ"

การกระทำที่อ่อนไหวต้องมีแรงเสียดทานและติดตามได้

สำหรับการกระทำที่มีผลกระทบรุนแรง (การจ่ายเงิน การเปลี่ยนแปลงบัญชี ส่งอีเมล หรือลบข้อมูล) ให้เพิ่ม:

  • การยืนยันชัดเจน ("คุณกำลังจะโอน $500 ไปยัง X—ยืนยันหรือไม่?")
  • การควบคุมแบบคู่ สำหรับการกระทำวิกฤต (การอนุมัติโดยมนุษย์หรือปัจจัยที่สอง)
  • ร่องรอยตรวจสอบ (ใครขอ อะไรได้รับการดำเนินการ อินพุต การเรียกเครื่องมือ เวลาที่เกิด)

มาตรการเหล่านี้เปลี่ยนการตรวจสอบจากรายละเอียด UX เป็นขอบเขตความปลอดภัยจริง

กลยุทธ์การทดสอบสำหรับพฤติกรรมที่ AI สร้าง

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

ชุดทดสอบแบบเป็นชั้น (เพื่อให้ความล้มเหลวชี้ไปที่การแก้ไขที่ถูกต้อง)

ใช้หลายชั้นที่แต่ละชั้นตอบคำถามต่างกัน:

  • Unit tests: ตรวจโค้ดของคุณเอง (พาร์เซอร์ ตัวตรวจ เส้นทางการรัน prompt) ซึ่งต้อง deterministic และเร็ว
  • Contract tests: ตรวจข้อตกลงรูปแบบกับโมเดล เช่น "ต้องคืน JSON ที่ถูกต้องพร้อมคีย์ X/Y/Z" หรือ "ต้องมีฟิลด์อ้างอิงเมื่อความมั่นใจต่ำ"
  • End-to-end scenarios: รันฟลว์ผู้ใช้ที่สมจริง (รวม retries และ fallback) เพื่อดูว่าระบบยังช่วยได้เมื่อเครียด

กฎที่ดี: ถ้าบั๊กไปถึง end-to-end ให้เพิ่มการทดสอบที่เล็กกว่า (unit/contract) เพื่อจับมันให้เร็วขึ้น

สร้างชุด prompt "ทองคำ"

สร้างชุด prompt คัดสรรขนาดเล็กที่แทนการใช้งานจริง สำหรับแต่ละชิ้น จดบันทึก:

  • Prompt (พร้อม system/developer instructions ถ้ามี)
  • ข้อจำกัดที่ต้องมี (ฟอร์แมต กฎความปลอดภัย กฎธุรกิจ)
  • พฤติกรรมที่คาดหวัง (ไม่ใช่ข้อความที่แน่นอน): เช่น "คืนอ็อบเจ็กต์ที่มี 3 คำแนะนำ" "ปฏิเสธคำขอความลับ" "ถามคำถามชี้แจงเมื่อขาดอินพุต"

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

Fuzzing: ทำให้อินพุตแปลกเป็นเรื่องปกติ

ระบบ AI มักล้มในขอบที่รก เพิ่ม fuzzing อัตโนมัติที่สร้าง:

  • สตริงสุ่มและการเข้ารหัสผสม
  • JSON เสีย รูปแบบตัดทอน คอมม่าเกิน
  • ค่าที่สุดขีด (ข้อความยาวมาก ฟิลด์ว่าง ตัวเลขใหญ่มาก วันที่แปลก)

การทดสอบเอาต์พุตที่ไม่ deterministic

แทนที่จะ snapshot ข้อความ ให้ใช้ความทนทานและรูบริก:

  • ให้คะแนนผลลัพธ์ตามเช็คลิสต์ (ฟิลด์ที่ต้องมี เนื้อหาที่ห้าม ความยาว)
  • การตรวจเชิงความหมาย (เช่น label การจำแนกต้องอยู่ในชุดที่อนุญาต)
  • เกณฑ์ความคล้ายสำหรับสรุป พร้อมข้อบังคับว่า "ต้องกล่าวถึงข้อเท็จจริงสำคัญ"

วิธีนี้ทำให้เทสต์คงที่ในขณะเดียวกันยังจับ regression จริงได้

การมอนิเตอร์และการสังเกตการณ์สำหรับการตรวจสอบและข้อผิดพลาด

สร้างชุดเริ่มต้นสำหรับตัวตรวจสอบ
ขอชุดเริ่มต้นของ validators สำหรับการนำเข้าและการส่งออกที่ใช้ซ้ำได้ในฟีเจอร์ที่ขับเคลื่อนด้วย AI ทุกชิ้น

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

ควรล็อกอะไร (โดยไม่สร้างปัญหาความเป็นส่วนตัว)

เริ่มจากล็อกที่อธิบายว่าคำขอสำเร็จหรือล้มเหลวอย่างไร—แล้วทำการลบหรือหลีกเลี่ยงข้อมูลอ่อนไหวเป็นค่าเริ่มต้น

  • อินพุตและเอาต์พุต (คำนึงความเป็นส่วนตัว): เก็บแฮช ข้อความตัดทอน หรือฟิลด์เชิงโครงสร้างแทนข้อความดิบเมื่อเป็นไปได้ ถ้าต้องเก็บเนื้อหาดิบเพื่อดีบัก ให้กำหนดระยะเวลาการเก็บที่สั้น บังคับสิทธิ์เข้าถึง และระบุจุดประสงค์ชัดเจน
  • ความล้มเหลวในการตรวจสอบ: ชื่อกฎ เส้นทาง/ฟิลด์ (เช่น address.postcode) และเหตุผลที่ล้มเหลว (ไม่ตรงสคีมา เนื้อหาไม่ปลอดภัย ขาดเจตนาที่จำเป็น)
  • การเรียกเครื่องมือและผลข้างเคียง: เรียกเครื่องมือใด พารามิเตอร์ (แบบ sanitize) โค้ดตอบกลับ และเวลา นี่สำคัญเมื่อความล้มเหลวมาจากภายนอก
  • ข้อยกเว้นและ timeout: stack trace สำหรับข้อผิดพลาดภายใน พร้อมรหัสข้อผิดพลาดที่ปลอดภัยสำหรับผู้ใช้

เมตริกที่ทำนายความน่าเชื่อถือได้จริง

ล็อกช่วยดีบักเหตุการณ์หนึ่ง เมตริกช่วยจับรูปแบบ ติดตาม:

  • อัตราความล้มเหลวของการตรวจสอบ (รวมและแยกตามกฎ)
  • อัตราผ่านสคีมา (เอาต์พุตที่ตรงสคีมา)
  • อัตราการลองใหม่ และ อัตราการกู้คืนสำเร็จ (fallback ทำงานบ่อยไหม)
  • ความหน่วง (end-to-end และต่อการเรียกเครื่องมือ)
  • หมวดข้อผิดพลาดยอดนิยม (เช่น “ขาดฟิลด์” “timeout ของเครื่องมือ” “ละเมิดนโยบาย”)

การแจ้งเตือนเมื่อเกิดการเปลี่ยนแปลง

เอาต์พุต AI สามารถเปลี่ยนได้อย่างค่อยเป็นค่อยไปหลังแก้ prompt อัปเดตโมเดล หรือพฤติกรรมผู้ใช้ใหม่ แจ้งเตือนควรมุ่งที่การเปลี่ยนแปลงไม่ใช่แค่เกณฑ์คงที่:

  • การขึ้นอย่างรวดเร็วของกฎตรวจสอบบางตัว
  • หมวดข้อผิดพลาดใหม่ที่ปรากฏ
  • การเปลี่ยนรูปร่างเอาต์พุต (เช่น ฟิลด์ JSON กลายเป็นข้อความอิสระ)

แดชบอร์ดที่ทีมไม่เชิงเทคนิคใช้ได้

แดชบอร์ดที่ดีตอบคำถาม: "มันทำงานให้ผู้ใช้หรือไม่?" ใส่คะแนนความน่าเชื่อถือแบบง่าย กราฟแนวโน้มของอัตราผ่านสคีมา แยกการล้มเหลาย่อยตามหมวด และตัวอย่างความล้มเหลวยอดนิยม (ลบเนื้อหาอ่อนไหว) ลิงก์ไปยังมุมมองเชิงเทคนิคสำหรับวิศวกร แต่ให้มุมมองระดับบนอ่านง่ายสำหรับผลิตภัณฑ์และทีมสนับสนุน

การปรับปรุงอย่างต่อเนื่อง: เปลี่ยนความล้มเหลวเป็นกฎที่ดีกว่า

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

สร้างวง feedback ที่แน่น

มองความล้มเหลวเป็นข้อมูลไม่ใช่เรื่องเล่า วง feedback ที่ได้ผลมักผสม:

  • รายงานจากผู้ใช้ (ปุ่ม "รายงานปัญหา" + สกรีนช็อตหรือไอดีเอาต์พุต)
  • คิวการตรวจโดยมนุษย์ สำหรับกรณีที่กำกวม อันตราย หรือดูผิด
  • การติดป้ายอัตโนมัติ (regex/scheme failures, toxicity flags, การตรวจจับภาษา, สัญญาณความไม่แน่นอนสูง)

ให้แต่ละรายงานผูกกับอินพุต เวอร์ชันโมเดล/prompt และผลการตรวจเพื่อให้สามารถทำซ้ำได้ภายหลัง

การแก้จริงเกิดขึ้นอย่างไร

การปรับปรุงส่วนใหญ่เกิดจากการเคลื่อนไหวที่ทำซ้ำได้ไม่กี่แบบ:

  • ขันสคีมาให้เข้มขึ้น: หากคาด JSON ให้ระบุคีย์ที่ต้องมี enums และชนิด ข reject "almost JSON"
  • เพิ่มตัวตรวจที่มุ่งเป้า: บังคับหน่วย, ฟอร์แมตวันที่, ขอบเขตราคา, ข้อบังคับว่าต้องมี
  • ปรับ prompt: ชี้แจงลำดับความสำคัญ ("ถ้าไม่แน่ใจ ให้บอกว่าไม่รู้"), เพิ่มตัวอย่าง และลดคำสั่งกำกวม
  • เพิ่ม fallback: ลองใหม่ด้วย prompt ที่เข้มงวดกว่า เปลี่ยนเป็นเทมเพลตปลอดภัย หรือส่งไปให้คนตรวจ—โดยไม่เติมช่องว่างด้วยการเดา

เมื่อแก้กรณีหนึ่ง ให้ถามด้วยว่า: “กรณีที่ใกล้เคียงกันอันไหนยังรอดผ่าน?” ขยายกฎให้ครอบคลุมกลุ่มเล็กๆ แทนที่จะปิดกรณีเดียว

การเวอร์ชันและการเปิดตัวอย่างปลอดภัย

เวอร์ชัน prompt, validators และโมเดล เหมือนโค้ด เปิดตัวการเปลี่ยนแปลงแบบ canary หรือ A/B ติดตามเมตริกหลัก (อัตราปฏิเสธ ความพึงพอใจผู้ใช้ ต้นทุน/ความหน่วง) และเก็บเส้นทาง rollback ไว้เร็ว

นี่คือที่เครื่องมือของผลิตภัณฑ์ช่วยได้: แพลตฟอร์มอย่าง Koder.ai สนับสนุน snapshot และ rollback ระหว่างการทำซ้ำแอป ซึ่งสอดคล้องกับการเวอร์ชัน prompt/validator เมื่ออัปเดตเพิ่มอัตราผ่านสคีมาลดลงหรือทำลายการรวมระบบ การย้อนกลับอย่างรวดเร็วเปลี่ยนเหตุการณ์ใน production ให้กลายเป็นการกู้คืนที่เร็ว

เช็กลิสต์เชิงปฏิบัติ

  • เราสามารถทำซ้ำปัญหาที่ผู้ใช้รายงานจากล็อกได้หรือไม่?
  • ความล้มเหลวถูกส่งไปยังถังที่ถูกต้องหรือไม่ (ลองใหม่, fallback, ตรวจโดยมนุษย์, หยุดหนัก)?
  • เราอัปเดตสคีมา/validators และ prompt พร้อมกันหรือไม่?
  • เราเพิ่มกรณีทดสอบสำหรับความล้มเหลวครั้งนี้หรือไม่เพื่อไม่ให้มันกลับมา?
  • การเปลี่ยนแปลงถูกเปิดตัวแบบ canary และเราติดตามผลกระทบหรือไม่?

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

อะไรถือเป็น “ระบบที่สร้างโดย AI” ในโพสต์นี้?

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

มันกว้างกว่าการคุยโต้ตอบ: อาจรวมถึงข้อมูลที่สร้างขึ้น โค้ดที่สร้างขั้นตอนเวิร์กโฟลว์ หรือการตัดสินใจของเอเยนต์/เครื่องมือได้ด้วย

ทำไมการตรวจสอบและการจัดการข้อผิดพลาดจึงถูกมองว่าเป็นฟีเจอร์ของผลิตภัณฑ์?

เพราะเมื่อเอาต์พุตของ AI กลายเป็นส่วนหนึ่งของเส้นการควบคุม ความน่าเชื่อถือกลายเป็นประเด็นประสบการณ์ผู้ใช้ การตอบกลับ JSON ผิดรูป ข้อมูลที่ขาด หรือคำสั่งที่ผิดพลาดสามารถ:

  • สร้างสถานะ UI ที่สับสน
  • เขียนเรคคอร์ดผิดพลาด
  • กระตุ้นผลข้างเคียงที่ไม่ปลอดภัย

การออกแบบเส้นทางการตรวจสอบและข้อผิดพลาดตั้งแต่ต้นทำให้ความล้มเหลวถูกควบคุมแทนที่จะวุ่นวาย

ความแตกต่างระหว่างความถูกต้องเชิงโครงสร้างกับความถูกต้องเชิงธุรกิจคืออะไร?

ความถูกต้องเชิงโครงสร้างหมายถึงเอาต์พุตสามารถแยกวิเคราะห์ได้และมีรูปร่างตามที่คาด (เช่น JSON ที่ถูกต้อง คีย์ที่ต้องมี ประเภทข้อมูลถูกต้อง)

ความถูกต้องเชิงธุรกิจหมายถึงเนื้อหาตรงตามกฎขององค์กร (เช่น ไอดีต้องมีอยู่ ยอดรวมต้องตรง ข้อความคืนเงินต้องเป็นไปตามนโยบาย) โดยปกติคุณต้องมีทั้งสองชั้นนี้

การออกแบบการโต้ตอบกับ AI ในฐานะ “สัญญา” หมายความว่าอย่างไร?

สัญญาเชิงปฏิบัติคือการกำหนดเงื่อนไขที่ต้องเป็นจริงในสามจุด:

  • Inputs: ฟิลด์ที่ต้องมี ขอบเขตที่อนุญาต บริบทที่ต้องการ
  • Outputs: คีย์ที่ต้องมี ค่าและเกณฑ์ที่อนุญาต (เช่น ระดับความมั่นใจ)
  • Side effects: การกระทำที่อนุญาต (เช่น “ร่างเท่านั้น” เมื่อต้องยืนยันก่อนส่ง)

เมื่อมีสัญญาแล้ว ตัวตรวจสอบก็เป็นเพียงการบังคับใช้สัญญาโดยอัตโนมัติ

ควรตรวจสอบข้อมูลนำเข้าอะไรบ้างในเวิร์กโฟลว์ AI?

ถือว่าการนำเข้าเป็นวงกว้าง: ข้อความผู้ใช้ ไฟล์ ฟอร์ม โครงสร้าง payload ของ API และข้อมูลที่ดึงมา

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

เมื่อไหร่ควรแก้ไขข้อมูลนำเข้าอัตโนมัติแทนที่จะปฏิเสธ?

ทำการปรับมาตรฐานเมื่อเจตนาไม่คลุมเครือน้อยและการเปลี่ยนแปลงย้อนกลับได้ (เช่น ตัดช่องว่าง ปรับตัวพิมพ์ของรหัสประเทศ)

ปฏิเสธเมื่อการ “แก้ไข” อาจเปลี่ยนความหมายหรือปกปิดข้อผิดพลาด (เช่น วันที่กำกวมอย่าง “03/04/2025” สกุลเงินที่ไม่คาดคิด โค้ด HTML/JS ที่น่าสงสัย)

กฎง่ายๆ: แก้ไขอัตโนมัติสำหรับรูปแบบ ปฏิเสธสำหรับความหมาย

เราจะตรวจสอบเอาต์พุตของโมเดลให้ปลอดภัยได้อย่างไร?

เริ่มจากสคีมาเอาต์พุตชัดเจน:

  • คีย์ที่ต้องมี (เช่น answer, status)
  • ประเภท (string/number/array)
  • enum และข้อจำกัด (ความยาว/ช่วงค่า)

แล้วเพิ่มการตรวจสอบเชิงความหมาย (ไอดีต้อง resolve ยอดรวมต้องตรง วันที่ต้องสมเหตุผล แหล่งอ้างอิงสนับสนุนข้ออ้าง) หากตรวจสอบไม่ผ่าน อย่าเอาผลลัพธ์ไปใช้ต่อ—ลองใหม่ด้วยข้อกำหนดเข้มงวดขึ้นหรือใช้ fallback

เราจะเลือกเมื่อใดควร fail fast และเมื่อใดควร fail gracefully?

หยุดเร็ว (fail fast) เมื่อการดำเนินต่อไปมีความเสี่ยง: แยกวิเคราะห์ไม่ได้ ขาดฟิลด์ที่ต้องมี ฝ่าฝืนนโยบาย

ทำให้ล้มเหลวอย่างสุภาพเมื่อมีทางกู้คืนปลอดภัย: timeout ชั่วคราว rate limit หรือปัญหาการจัดรูปแบบเล็กน้อย

ในทั้งสองกรณี แยกผลลัพธ์เป็น:

  • ข้อความสู่ผู้ใช้: สั้น ชัดเจน ไม่ใช่เทคนิค
  • การวินิจฉัยภายใน: รหัสข้อผิดพลาด เอาต์พุตดิบ (อย่างปลอดภัย) ผลการตรวจสอบ เวลา ไอดีการเชื่อมโยง
เมื่อใดที่การลองใหม่และ fallback ช่วยได้—และเมื่อใดที่ทำให้แย่ลง?

การลองใหม่ช่วยเมื่อความล้มเหลวเป็นแบบชั่วคราว (timeouts, 429, หยุดชะงักชั่วคราว) — ใช้ retries ที่จำกัดพร้อม exponential backoff และ jitter

การลองใหม่ไม่เหมาะเมื่อเป็น “คำตอบผิด” เช่น mismatch ของสคีมา ขาดฟิลด์ที่จำเป็น หรือฝ่าฝืนนโยบาย ควรซ่อม prompt (กำชับคำสั่ง) ใช้เทมเพลตที่กำหนด หรือส่งให้คนตรวจสอบแทน

กรณีขอบเขตมักมาจากไหนในผลิตภัณฑ์ AI จริงๆ?

กรณีขอบเขตมักมาจาก:

  • ข้อมูลผู้ใช้ที่รกจริงๆ (คัดลอกจาก PDF ขึ้นบรรทัดแปลกๆ บริบทยาว)
  • ค่าขอบเขต (ฟิลด์ว่าง ยาวสุดๆ ยูนิโค้ดพิเศษ ภาษาผสม)
  • การเปลี่ยนแปลงของการรวมระบบ (API เปลี่ยนชื่อฟิลด์ สิทธิ์ไม่ตรงกัน)

ค้นพบ “สิ่งที่ไม่รู้” ผ่านล็อกที่คำนึงความเป็นส่วนตัว เพื่อจับว่า rule ไหนล้มเหลวและเส้นทางการกู้คืนใดถูกรัน

Related posts