วิธีที่ผมทำให้ AI หยุดมโน (Hallucinate) ใน Codebase ของโปรเจกต์ Fintech อายุ 3 ปีของเรา

เครื่องมือเขียนโค้ดด้วย AI มักจะล้มเหลวเมื่อต้องเจอกับโปรเจกต์ที่ใช้งานจริง (production) พวกมันทำงานได้ดีกับโค้ดใหม่ๆ แต่จะเริ่มพังเมื่อต้องเจอกับ codebase เก่าที่มีประวัติการพัฒนามาอย่างยาวนาน

ผมเรียนรู้เรื่องนี้ด้วยบทเรียนราคาแพงจากโปรเจกต์ fintech ของเรา เรามี React frontend สองตัว, แผงควบคุมสำหรับ admin และ FastAPI backend นอกจากนี้ฐานข้อมูลของเรายังมีความซับซ้อน เพราะต้องเก็บข้อมูลทางการเงินและข้อมูลผู้ใช้ที่มีความละเอียดอ่อน

เราพยายามใช้ AI เพื่อให้ทำงานได้เร็วขึ้น แต่มันล้มเหลวทันที

ผมสั่งให้ AI สร้างตาราง contacts มันกลับสร้างคอลัมน์ใหม่สำหรับชื่อและอีเมล ทั้งที่คอลัมน์เหล่านี้มีอยู่แล้วในตาราง users ของเรา AI ทำการสร้างข้อมูลซ้ำซ้อนแทนที่จะใช้ foreign key เพราะมันไม่รู้เลยว่ามีตาราง users อยู่ในระบบ

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

AI จะเก่งได้เท่ากับบริบท (context) ที่คุณมอบให้เท่านั้น เราจึงทำให้บริบทของเรามีความชัดเจนและเป็นที่ยอมรับสูงสุด (authoritative) และนี่คือระบบที่เราสร้างขึ้น:

• ADR Files: เราสร้างโฟลเดอร์ docs/adrs/ ขึ้นมา ไฟล์เหล่านี้จะบันทึกเหตุผลเบื้องหลังการตัดสินใจด้านสถาปัตยกรรม (architectural decisions) เช่น ไฟล์หนึ่ง (ADR-001) จะบอก AI ว่า: "ตรวจสอบตารางที่มีอยู่ก่อนเสมอ ใช้ foreign key และห้ามสร้างข้อมูลผู้ใช้ซ้ำซ้อนโดยเด็ดขาด"

• context.md: ไฟล์นี้จะอธิบายคำศัพท์เฉพาะทางของเรา โดยบอก AI ว่าแนวคิดต่างๆ ในระบบของเรามีความสัมพันธ์กันอย่างไร

• plot.md: นี่คือแผนผังภาพรวม (high-level map) ที่แสดงให้เห็นว่าส่วนประกอบต่างๆ ของโปรเจกต์เชื่อมต่อกันอย่างไร

• Strict Rules: เราบอก AI ว่าไดเรกทอรี docs คือแหล่งข้อมูลที่ถูกต้องที่สุด และมันต้องปฏิบัติตามกฎเหล่านี้ตามลำดับ

• Mandatory Tests: ทุกๆ API route ใหม่จะต้องมี test cases เสมอ

ระบบนี้ทำให้ AI ทำงานได้อย่างคาดเดาได้

ครั้งหนึ่ง AI ได้ไปแก้ไข shared function จนทำให้ส่วนอื่นๆ ของแอปพังไปถึงแปดจุด แต่เพราะเรามี test ทำให้ AI มองเห็นข้อผิดพลาดนั้น และมันสามารถแก้ไขความผิดพลาดของตัวเองได้ด้วยการสร้าง function เวอร์ชันใหม่ที่รองรับทั้งความต้องการแบบเก่าและแบบใหม่ หากไม่มีการทำ test บั๊กตัวนี้คงหลุดไปถึง production แน่นอน

เลิกโทษ AI ที่ไม่รู้จัก codebase ของคุณ แต่ให้ปฏิบัติกับมันเหมือนพนักงานใหม่ คุณจะไม่โทษพนักงานใหม่ที่ไม่รู้กฎของบริษัท แต่คุณจะให้เอกสารประกอบการทำงานและทำการ onboarding ให้พวกเขาแทน

โครงสร้างของเราเป็นแบบนี้:

docs/

  • context.md (คำศัพท์และความเชื่อมโยง)
  • plot.md (แผนผังภาพรวม)
  • adr/ (กฎเฉพาะทาง เช่น การสร้างตารางหรือโครงสร้าง API)

3 เคล็ดลับสำหรับเวิร์กโฟลว์ของคุณ:

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

สิ่งนี้ไม่ได้ทำให้ AI สมบูรณ์แบบ แต่มันทำให้ AI ทำงานได้อย่างสม่ำเสมอ

Source: https://dev.to/jaskiratanand/how-i-made-ai-stop-hallucinating-on-our-3-year-old-fintech-codebase-3g0h

ชุมชนการเรียนรู้เพิ่มเติม (ไม่บังคับ): https://t.me/GyaanSetuAi