ข้าม​ไป​ยัง​เนื้อหา

Error analysis และ​คน​ดู (หัวใจ​ของ​คอร์ส)

บท​ที่ 4 บอกว่า LLM-as-judge ใช้ได้​ก็​ต่อ​เมื่อ calibrate แล้ว บท​ที่ 5 บอกว่า eval set ที่​ดี​ต้อง​มา​จาก​ความ​ล้มเหลว​จริง สอง​ข้อ​นี้​ชี้​ไป​ที่​กิจกรรม​เดียวกัน​ที่​คอร์ส​นี้​ถือว่า​เป็น​หัวใจ — การ​นั่ง​อ่าน trace ที่ ops-copilot ทำงาน​จริง แล้ว​หา​ว่า​อะไร​พัง​จาก​อะไร ไม่ใช่​การ​เปิด dashboard ดู​ตัวเลข​รวม​แล้ว​เดา บท​นี้​ว่าด้วย​วินัย​ของ​การ​อ่าน trace ให้​เป็น​ระบบ (error analysis), การ​ใช้​คนใน loop เพื่อ​จับ​สิ่ง​ที่ automation มอง​ข้าม และ​เหตุผล​ว่า​ทำไม​เกณฑ์ “อะไร​ดี” ถึง​เขียน​ให้​ครบ​ตั้งแต่​วัน​แรก​ไม่​ได้

ประโยค​ที่​สรุป​ทั้ง​บท: judge คือ​เครื่องมือ​ที่​เรา calibrate แล้ว​ต้อง​คอย​เช็ค​ซ้ำ ไม่ใช่ oracle ทุก​เทคนิค​ใน​บท​นี้​มี​ไว้​รักษา​ให้ loop eval ยัง​เชื่อม​กลับ​หา​สายตา​คน​อยู่​เสมอ ไม่​ปล่อย​ให้​ตัวเลข​จาก judge ลอย​ไป​ตัดสิน​เอง​ลำพัง

📦 code ตัวอย่าง (กำลัง​จัด​ทำ)

สเก็ตช์​ใน​บท​นี้​อ้าง​ถึง ops-copilot ที่​คืน​เงิน​ออเดอร์​ใน domain Order จาก repo kaen-food-ordering (กำลัง​จัด​ทำ) — บท​นี้​เป็น​คอร์ส​เชิง​วิธีการ (methodology) สิ่ง​ที่​เห็น​เป็น log ของ open coding, ตาราง confusion matrix และ​ภาพ​วงจร ไม่ใช่ eval harness ที่​รัน​ได้​ทันที ให้​ใช้​เป็น​แบบ​ร่าง​ของ​กระบวนการ ไม่ใช่ code พร้อม​รัน

จุด​เริ่ม​ของ eval ที่​ดี​ไม่ใช่ metric บน​หน้า​จอ แต่​คือ Error AnalysisError Analysisการ​นั่ง​อ่าน trace ที่ agent ทำงาน​จริง​ที​ละ​เคส​เพื่อ​หา​ว่า​อะไร​พัง​จาก​อะไร เน้น​จับ 'ความ​ผิดพลาด​แรก​สุด' ใน​แต่ละ trace ก่อน​เสมอ เพราะ​ความ​ผิดพลาด​ต้นทาง​มัก​ลาก​ให้​พัง​ต่อ​เป็น​ทอด ๆ — เป็น​จุด​เริ่มต้น​ของ eval ที่​ดี ไม่ใช่​การ​มอง​แค่ dashboard ตัวเลข​รวม และ​ควร​ทำซ้ำ​ทุก 2-4 สัปดาห์Process — การ​นั่ง​อ่าน trace ที่ agent ทำงาน​จริง​ที​ละ​เคส เพื่อ​หา​ว่า​อะไร​พัง และ​พัง​จาก​อะไร Hamel Husain กับ Shreya Shankar ย้ำ​ว่า​กระบวนการ​นี้​มา​ก่อน dashboard เสมอ เพราะ​ตัวเลข​รวม (เช่น “success rate 82%”) บอก​แค่​ว่า​พัง​เท่าไร ไม่​ได้​บอกว่า​พังแบบ​ไหน และ​คุณ​แก้ 18% ที่​พัง​ไม่​ได้​ถ้า​ยัง​ไม่รู้​ว่า​มัน​พัง​ด้วย​สาเหตุ​อะไร​บ้าง (ดู Hamel/Shreya, “LLM Evals FAQ”)

กระบวนการ​มี​สาม​จังหวะ​ต่อ​กัน: รวบรวม trace ที่​เป็น​ตัวแทน​งาน​จริง → open coding → axial coding → วน​กลับ​ไป​ทำซ้ำ​จน​อิ่มตัว จาก​นั้น​ค่อย​เอา​หมวด​หมู่​ที่​ได้​ไป​ตั้ง​เป็น​เกณฑ์​ให้ judge และ​วน error analysis ใหม่​ทุก 2–4 สัปดาห์ ไม่ใช่​ทำ​ครั้ง​เดียว​จบ

Open CodingOpen Codingเทคนิค​จาก​งาน​วิจัย​เชิง​คุณภาพ​ที่​ยืม​มา​ทำ Error Analysis — อ่าน trace ที​ละ​เคส​แล้ว​เขียน​บรรยาย 'ความ​ผิดพลาด​แรก​สุด' ที่​เห็นด้วย​คำ​พูด​ของ​ตัวเอง โดย​ยัง​ไม่​ยึด​หมวด​หมู่​ตายตัว จนกว่า​จะ​ไล่​ดู​ราว​ร้อย​เคส​แล้ว​เริ่ม​ไม่​เจอ​แพทเทิร์น​ใหม่ จึง​ค่อย​จัด​กลุ่ม​เป็น Failure TaxonomyProcess คือ​เทคนิค​ที่​ยืม​มา​จาก​งาน​วิจัย​เชิง​คุณภาพ: อ่าน trace ที​ละ​เคส แล้ว​เขียน​บรรยายความ​ผิดพลาด​แรก​สุดที่​เห็นด้วย​คำ​พูด​ของ​ตัวเอง โดย​ยัง​ไม่​ยึด​หมวด​หมู่​ตายตัว จุด​สำคัญ​คือ​คำ​ว่า “แรก​สุด” — ใน​ระบบ​หลาย​ขั้นตอน ความ​ผิดพลาด​ต้นทาง​มัก​ลาก​ให้​พัง​ต่อ​เป็น​ทอดๆ ถ้า agent อ่าน orderId ผิด​ตั้งแต่​ต้น ทุก​ก้าว​ถัด​จาก​นั้น​ก็​ผิด​ตาม การ​จด​ทุก​อาการ​ที่​เห็นจะ​ทำให้​นับ​ซ้ำ​เกิน​จริง จึง​จด​แค่​ตัว​จุด​ชนวน​ของ​แต่ละ trace

พอมี log ของ​ความ​ผิดพลาด​แรก​ครบ​พอ จึง​เข้า​จังหวะ​ที่​สอง — axial coding: จัด​กลุ่ม​บันทึก​เหล่า​นั้น​เป็น​หมวด​ที่​ตั้ง​ชื่อ​ได้ แล้วนับ​ความถี่ของ​แต่ละ​หมวด ผลลัพธ์​คือ failure taxonomy ที่​บอกว่า​ควร​ลงมือ​แก้​อะไร​ก่อน (หมวด​ที่​โผล่​บ่อย​สุด = คุ้ม​ค่า​แก้​สุด) พูดสั้นๆ: open coding เปิด​กว้าง​ไม่​ตัดสิน สร้าง​หมวด​จาก​สิ่ง​ที่​เห็น​จริง ส่วน axial coding ปิด​เข้า​หมวด​แล้ว​นับ — ลำดับ​ต้อง​เป็น​แบบ​นี้ ถ้า​เริ่ม​ด้วย​หมวด​สำเร็จรูป​ก่อน​อ่าน คุณ​จะ​เห็น​แต่​สิ่ง​ที่​เตรียม​ใจ​ไว้​แล้ว และ​พลาด​หมวด​ที่​นึก​ไม่​ถึง

รู้​ได้​อย่างไร​ว่า​อ่าน​พอแล้ว? ใช้​เกณฑ์ saturation เป็น​กฎ​คร่าวๆ (rule of thumb ของ Hamel/Shreya): ถ้า​อ่าน trace เพิ่ม​ไป​ราว 20 เคส​ล่าสุด​แล้ว​ยัง​ไม่​โผล่​หมวด​ใหม่​เลย ก็​หยุด​ได้ — แต่​ให้​เริ่ม​ด้วย​การ​อ่าน​อย่าง​น้อย 100 เคส​ก่อน อย่า​เพิ่ง​สรุป​ตอน​อ่าน​ไป​สิบ​เคส (ดู Hamel, “Why is error analysis so important…”)

// สเก็ตช์ log ของ open coding — ไม่ใช่ code ที่รันได้ เป็นตารางบันทึก
// 'ความผิดพลาดแรกสุด' ของแต่ละ trace จาก ops-copilot ที่ไปคืนเงินจริง
const openCodingLog = [
{ trace: "t-001", firstFailure: "เรียก tool refund ด้วย orderId ผิด — คืนเงินออเดอร์ #124 แทน #123" },
{ trace: "t-002", firstFailure: "คืนถูกออเดอร์ แต่จำนวน ฿100 แทน ฿120 (อ่าน subtotal แทน total)" },
{ trace: "t-003", firstFailure: "agent ตอบ 'คืนเงินเรียบร้อย' โดยไม่เคยเรียก tool refund เลย" },
// ... จดต่อจนครบ 100+ trace โดยจดแค่ 'ความผิดพลาดแรก' ของแต่ละอัน ไม่จดทุกอาการ
];
// axial coding: จัดกลุ่ม log ข้างบนเป็นหมวดแล้วนับความถี่ → รู้ว่าจะแก้อะไรก่อน
const axialTally = {
"อ่าน field จำนวนเงินผิด (subtotal/total)": 14,
"orderId ผิดตัว": 11,
"อ้างว่าทำแต่ไม่ได้เรียก tool": 7,
// หมวดที่โผล่บ่อยสุดอยู่บนสุด = คุ้มค่าลงมือแก้ก่อน
};

สังเกต t-003: agent พิมพ์​ว่า “คืน​เงิน​เรียบร้อย” แต่​ฐาน​ข้อมูล​ไม่มี​แถว​คืน​เงิน​เลย นี่​คือ​เหตุผล​ที่​ทั้ง​คอร์ส​ยืนยัน​ว่า outcome check ที่แท้​จริง​คือ “มี​แถว​คืน​เงิน​ของออเดอร์ #123 ใน​ฐาน​ข้อมูล​จริง จำนวน ฿120 หรือ​ยัง” ไม่ใช่ “agent บอกว่า​ทำ​เสร็จ​หรือ​ยัง” — error analysis คือ​ที่​ที่​ความ​ต่าง​นี้​โผล่​มา​ให้​เห็น​กับ​ตา

flowchart LR
  T["เก็บ trace จริง<br/>(100+ เคสจาก ops-copilot)"] --> O["open coding<br/>จด 'ความผิดพลาดแรก' ของแต่ละ trace"]
  O --> A["axial coding<br/>จัดหมวด + นับความถี่"]
  A --> S{"อ่านเพิ่ม ~20 เคส<br/>เจอหมวดใหม่ไหม?"}
  S -->|เจอ| O
  S -->|"ไม่เจอ = saturation"| C["calibrate judge<br/>วัด TPR/TNR กับป้ายของคน"]
  C --> R["กลับมาอ่าน transcript<br/>ทุก 2–4 สัปดาห์"]
  R --> T
  classDef human fill:#16a34a,stroke:#065f46,color:#f8fafc;
  class O,R human;

คำ​บรรยาย​ภาพ: วงจร error analysis ที่​ไม่มี​จุดจบ เก็บ trace จริง → open coding (จด​ความ​ผิดพลาด​แรก) → axial coding (จัด​หมวด+นับ) → เช็ค saturation ถ้า​ยัง​เจอ​หมวด​ใหม่​ก็​วน​กลับ​ไป​อ่าน​ต่อ ถ้า​อิ่มตัว​แล้ว​จึง​เอา​หมวด​ที่​ได้​ไป calibrate judge ด้วย TPR/TNR แล้ว​วน​กลับ​มา​อ่าน transcript ใหม่​ทุก 2–4 สัปดาห์ กล่อง​เขียว​สอง​ใบ (open coding และ​กลับ​มา​อ่าน) คือ​จุด​ที่​ต้อง​มี​สายตา​คน​เสมอ วงจร​นี้​เชื่อม judge กลับ​หา​คน​ตลอด ไม่​ปล่อย​ให้​ตัวเลข​ลอย​ไป​ตัดสิน​เอง

พอได้​หมวด​หมู่​จาก error analysis แล้ว เรา​จึง​เอา​ไป​ตั้ง​เป็น​เกณฑ์​ให้ LLM-as-judge ตรวจ​แทน​คนใน​สเกล​ใหญ่ แต่​ก่อน​ไว้ใจ judge ต้อง​ผ่าน Judge CalibrationJudge Calibrationกระบวนการ​เช็ค​ว่า LLM-as-judge ตัดสิน​ตรง​กับ​ป้าย​ที่​มนุษย์​ผู้เชี่ยวชาญ​ให้​ไว้​แค่​ไหน ก่อน​ปล่อย​ให้ judge ตัดสิน​เอง​เต็ม​รูปแบบ — ต้อง​ดู​อัตรา​ที่ judge จับ​ได้​ถูก​ทั้ง​ฝั่ง 'ผ่าน​จริง' และ 'พัง​จริง' แยก​กัน ไม่ใช่​แค่ % ที่​ตรง​กับ​มนุษย์​รวม ๆ เพราะ​ถ้า​เคส​พัง​มี​น้อย judge ที่​ตอบ 'ผ่าน' มั่ว ๆ ก็​ยัง​ได้​คะแนน​สูง​ลวงตา และ​ต้อง calibrate ซ้ำ​ทุก​ครั้ง​ที่​เปลี่ยน model judge หรือ rubricProcess ก่อน — วัด​ว่า​มัน​ตัดสิน​ตรง​กับ​ป้าย​ที่​คน​ผู้เชี่ยวชาญ​ให้​ไว้​บน​ชุด​ทดสอบ​ที่​กัน​ไว้ (held-out) แค่​ไหน และ​กับดัก​ใหญ่​ที่สุด​ตรง​นี้​คือ​การ​วัด​ด้วย raw agreement (% ที่ judge ตรง​กับคนรวมๆ)

ทำไม​มัน​เป็น​กับดัก? สมมติ​เชิง​ตัวเลข​เพื่อ​ให้​เห็น​ภาพ (ไม่ใช่​ค่าที่​วัด​จาก​ระบบ​จริง): ถ้า​เคส​พัง​เกิด​แค่ 10% ของ traffic แล้ว judge ที่​ขี้เกียจ​ตอบ “ผ่าน” ทุก​เคส จะ​ได้ agreement สูง​ถึง 90% ทั้ง​ที่​มัน​จับ failure ไม่​ได้​เลย​สัก​เคส —

judge บอก “ผ่าน”judge บอก “พัง”
ผ่าน​จริง (90 เคส)900
พัง​จริง (10 เคส)100

agreement = (90 + 0) / 100 = 90% ดู​ดี​ลวงตา แต่ TPR = จับ​พัง​ได้​ถูก / พัง​จริง​ทั้งหมด = 0 / 10 = 0% judge ตัว​นี้​ไร้​ค่า​โดย​สิ้นเชิง​สำหรับ​งาน​ที่​เรา​สร้าง​มัน​มา​ทำ นี่​คือ​เหตุผล​ที่ Hamel/Shreya บอก​ให้​วัด​สอง​ฝั่ง​แยก​กัน — “Focus on achieving high True Positive Rate (TPR) and True Negative Rate (TNR) with your judge on a held out labeled test set.” TPR คือ​อัตรา​ที่ judge จับ “เคส​พัง​จริง” ได้​ถูก และ TNR คือ​อัตรา​ที่​มัน​ปล่อย “เคส​ผ่าน​จริง” ผ่าน​โดย​ไม่​ตี​ตก​ผิด ทั้ง​สอง​ต้อง​สูง​พร้อม​กัน raw agreement ตัว​เดียว​ซ่อน​ความ​ล้มเหลว​นี้​ไว้​ได้​เสมอ​เมื่อ failure เป็น​ของ​หา​ยาก (ดู Hamel/Shreya, “LLM Evals FAQ”)

และ​ย้ำ​จาก​บท​ที่ 4: judge ไม่ใช่​ผู้​ตัดสิน​ที่​เป็นกลาง​โดย​อัตโนมัติ มัน​มี​อคติ​แฝง​ที่​วัด​ได้ (เอน​ตาม​ลำดับ​ที่​เห็น​ก่อน ตาม​ความ​ยาว​คำ​ตอบ และ​ชอบ output จาก model ตระกูล​เดียว​กับ​ตัวเอง) การ calibrate ด้วย TPR/TNR จึง​ไม่ใช่​พิธีกรรม​ครั้ง​เดียว — ต้อง​ทำซ้ำ​ทุก​ครั้ง​ที่​เปลี่ยน model judge หรือ​แก้ rubric judge คือ​เครื่องมือ​ที่​เรา​รักษา​ให้​เที่ยง​ด้วย​การ​เช็ค​ซ้ำ ไม่ใช่​ของ​ที่​ตั้ง​แล้ว​ลืม

ต่อ​ให้ judge ผ่าน calibration แล้ว ก็​ยัง​ต้อง​มี Human-in-the-loopHuman-in-the-loopการ​ให้​มนุษย์​เข้า​มา​ตรวจสอบ​หรือ​ให้​ป้าย​ใน​จุด​สำคัญ​ของ​กระบวนการ eval เช่น สุ่ม​ตรวจ​ผล​ตัดสิน​ของ LLM-as-judge หรือ​อนุมัติ​ก่อน agent ทำ​สิ่ง​ที่​ย้อน​กลับ​ไม่​ได้ — มนุษย์​ยัง​จับ​สิ่ง​ที่ automation มอง​ข้าม​ได้​เสมอ (เช่น agent เลือก​แหล่ง​ข้อมูล​ที่​ดู SEO ดี​แต่​ไม่​น่า​เชื่อถือ) จึง​เป็น​สิ่ง​ที่​รักษา​คุณภาพ eval ไว้​ไม่​ให้​พึ่งพา judge เพียง​ลำพังProcess — คน​คอย​อ่าน transcript จริง​เป็น​ระยะ เพราะ judge ตรวจ​ได้​เฉพาะ​เกณฑ์​ที่​เราเขียน​สั่ง​มัน​ไว้​แล้วเท่านั้น ความ​ล้มเหลว​ชนิด​ที่​เรา​ยัง​นึก​ไม่​ถึง มัน​มอง​ไม่​เห็น ตัวอย่าง​จริง​จาก Anthropic: “human testers noticed that our early agents consistently chose SEO-optimized content farms over authoritative but less highly-ranked sources like academic PDFs or personal blogs” — agent เลือก​แหล่ง​ข้อมูล​ที่​ทำ SEO เก่ง​แต่​ไม่​น่า​เชื่อถือ แทน​แหล่ง​ที่​น่า​เชื่อถือ​กว่า​อย่าง PDF วิชาการ​หรือ block ส่วนตัว นี่​เป็น​ความ​ล้มเหลว​ที่​ไม่มี metric ไหน​จับ​ได้ เพราะ​ไม่มี​ใคร​คิด​จะ​เขียน​เกณฑ์ “ห้าม​ชอบ content farm” ไว้​ก่อน คน​อ่าน​เจอ แล้ว​จึง​กลาย​เป็นการ​แก้ prompt ที่​เป็น​รูปธรรม (ดู Anthropic, “How we built our multi-agent research system”)

นี่​ไม่ใช่​คำ​แนะนำ​จาก​ฝั่ง​นัก​วิจัย​เท่านั้น — คู่มือ​ฝั่ง​วิศวกร​ของ Anthropic เอง​ปิด​ท้าย​ด้วย​ประ​โยคสั้นๆ ประโยค​เดียว: “Read the transcripts!” (ดู Anthropic, “Demystifying evals for AI agents”) สำหรับ ops-copilot ก็​เช่น​กัน — dashboard อาจ​บอกว่า success rate นิ่ง​ดี แต่​การ​นั่ง​อ่าน transcript สิบ​เคส​อาจ​เจอ​ว่า agent เริ่ม​ถาม​ยืนยัน​ซ้ำซาก​จน​ลูกค้า​รำคาญ หรือ​คืน​เงิน​ถูก​จำนวน​แต่​ใช้ 8 ก้าว​ทั้ง​ที่​ควร​ใช้ 2 — สิ่ง​ที่ automation ยัง​ไม่​ถูก​สอน​ให้​จับ

criteria drift — ทำไม​เขียน​เกณฑ์​ให้​ครบ​ตั้งแต่​วัน​แรก​ไม่​ได้

หัวข้อ​ที่​มีชื่อ​ว่า “criteria drift — ทำไม​เขียน​เกณฑ์​ให้​ครบ​ตั้งแต่​วัน​แรก​ไม่​ได้”

มี​เหตุผล​เชิง​ลึก​กว่า​นั้น​ว่า​ทำไม​คน​ถึง​ถอด​ออก​จาก loop ไม่​ได้ Shankar และ​คณะ​ใน​งาน “Who Validates the Validators?” ตั้ง​ชื่อ​ปรากฏการณ์​นี้​ว่า Criteria DriftCriteria Driftปรากฏการณ์​ที่​เกณฑ์ 'อะไร​คือ​คำ​ตอบ​ที่​ดี' ค่อย ๆ ชัด​ขึ้น​หรือ​เปลี่ยน​ไป​เอง​ระหว่าง​มนุษย์​ตรวจ​เคส​จริง​ไป​เรื่อย ๆ เพราะ​คน​เรา​มัก​รู้​ว่า 'ดี' หมาย​ถึง​อะไร​ก็​ต่อ​เมื่อ​ได้​เห็น output จริง​จำนวน​มาก​แล้ว​เท่านั้น ไม่ใช่​คิด​เกณฑ์​ครบ​ตั้งแต่​วัน​แรก — เหตุผล​ที่ Rubric ต้อง​รักษา​ความ​สอดคล้อง​ด้วย​การ​ปรับปรุง​ซ้ำ​ได้​เรื่อย ๆProcess: เกณฑ์​ที่​ว่า “อะไร​คือ​คำ​ตอบ​ที่​ดี” ค่อยๆ ชัด​ขึ้น​และ​เปลี่ยน​ไป​ระหว่าง​ที่​คนลงมือ grade เคส​จริง ไม่ใช่​สิ่ง​ที่​คิด​ครบ​ได้​ตั้งแต่​วัน​แรก คน​เรา​มัก​รู้​ว่า “ดี” หมาย​ถึง​อะไร​ก็​ต่อ​เมื่อ​ได้​เห็น output จริง​จำนวน​มาก​แล้ว​เท่านั้น — เห็น​เคส​ที่ agent คืน​เงิน​ก่อน​ขอ​อนุมัติ​ผู้จัดการ ถึง​จะ​นึก​ได้​ว่า “อ๋อ นี่​ก็​เป็น​เกณฑ์​ที่​ต้อง​มี” (ดู Shankar et al., “Who Validates the Validators?” (arXiv 2404.12272))

นัย​ของ criteria drift คือ rubric ต้อง​เป็น​ของ​ที่​แก้ไข​ซ้ำ​ได้​เรื่อยๆ ไม่ใช่​เขียน​ทิ้ง​ไว้​ตายตัว และ​วงจร error analysis ต้อง​วน​ไม่​หยุด เพราะ​ทุก​ครั้ง​ที่​คน​อ่าน trace ใหม่ เกณฑ์​อาจ​คม​ขึ้น​อีก ซึ่ง​แปล​ว่า​ต้อง​กลับ​ไป calibrate judge ใหม่​ด้วย​เกณฑ์​ที่​คม​ขึ้น​นั้น — วงจร​ใน​ภาพ​ด้าน​บน​จึง​ไม่มี​ปุ่ม “เสร็จ​แล้ว”

error analysis คือ​หัวใจ​ของ​คอร์ส​นี้​เพราะ​มัน​คือ​จุด​ที่​ทุก​อย่าง​เชื่อม​กัน: อ่าน trace จริง​ด้วย open coding เพื่อ​จับ​ความ​ผิดพลาด​แรก, จัด​หมวด​และ​นับ​ด้วย axial coding จน​อิ่มตัว, เอา​หมวด​ที่​ได้​ไป calibrate judge โดย​วัด TPR/TNR ไม่ใช่ raw agreement, แล้ว​ยัง​ต้อง​มี​คน​คอย​อ่าน transcript เพราะ​ทั้ง judge และ dashboard มอง​ข้าม​ความ​ล้มเหลว​ที่​เรา​ยัง​ไม่​ได้​เขียน​เกณฑ์​ไว้ และ​เพราะ criteria drift ทำให้​เกณฑ์​ยัง​งอก​ใหม่​ได้​เสมอ judge จึง​เป็น​เครื่องมือ​ที่​เรา calibrate แล้ว​คอย​เช็ค​ซ้ำ ไม่ใช่ oracle ที่​ปลด​คน​ออก​จาก loop ได้ บท​ที่ 7 จะ​เอา​วินัย​นี้​ไป​วาง​บน​สอง​สนาม — offline eval ก่อน​ปล่อย กับ online eval บน​โปร​ดัก​ชัน​จริง


🔗 อ้างอิง​ต้นทาง​ของ​บท​นี้

บท​นี้​สังเคราะห์​จาก​แหล่ง​หลัก​ด้าน​ล่าง อ่าน​ต่อ​ได้ที่​ต้นทาง​โดยตรง:

เช็กความเข้าใจ — บทที่ 6

ข้อ 1 / 3

open coding กับ axial coding ต่างกันอย่างไรในกระบวนการ error analysis?