ในวันที่อยากได้กำลังใจแต่ไม่มีที่ให้ชวนคุย เลยเริ่มสร้างมันขึ้นมาเอง ตอนนี้ผมอยู่ ม.6 และออกแบบกับดูแลระบบทั้งหมดคนเดียว
สามารถเข้าไปลองคุยได้ทันทีแบบ guest โดยไม่ต้องสมัครหรือกรอกอีเมล พอเข้าไปแล้ว AIRU จะทักถามสารทุกข์สุกดิบก่อน และจดจำบทสนทนาไว้ พอกลับมาอีกครั้งก็จะเรียกชื่อคุณและคุยต่อจากเรื่องเดิม
ความต่างจากบริการเดิม
ผู้ช่วยอเนกประสงค์อย่าง ChatGPT มักตอบเหมือนเพิ่งเจอผู้ใช้เป็นครั้งแรกทุกครั้ง ส่วนบริการสาย character chat หลายตัวก็มักถูกออกแบบมาเพื่อเพิ่มการมีส่วนร่วมและระยะเวลาการใช้งาน AIRU เดินคนละทาง — ยึดความต่อเนื่อง (ความทรงจำ) เป็นแกนหลัก แต่ให้นิยามความสำเร็จว่าเป็นการที่ผู้ใช้ต้องการบริการนี้น้อยลง พร้อมทั้งห้ามการใช้ถ้อยคำชักจูงให้พึ่งพาและ dark pattern
รายละเอียดทางเทคนิค
เกตหักเห-สะท้อน: ถ้าส่งคำพูดอย่าง "ช่วยหาว่าทำไมใจฉันถึงเป็นแบบนี้" ไปค้นหาเพียงเพราะเห็นคีย์เวิร์ด ("ช่วยหา") ก็จะทำลายช่วงเวลาที่ผู้ใช้ต้องการการปลอบโยน ดังนั้นคำขอที่ติดคีย์เวิร์ดทริกเกอร์จะถูกประเมินเจตนาใหม่ด้วยการเรียก LLM ขนาดจิ๋วก่อนรันจริงทันที และถ้าเป็นข้อความเชิงสนทนาก็จะยกเลิกการค้นหา หากตัดสินไม่สำเร็จจะคงผลตัดสินจากคีย์เวิร์ดเดิมไว้ (fail-open) โครงสร้างนี้ไม่ใช่การกรองหลังสร้างคำตอบ แต่เป็นการประเมินใหม่ก่อนเรียกใช้เครื่องมือ
ความทรงจำ: แยก structured memory (ชื่อ ความชอบ บริบทความคืบหน้า) ออกจากคลังข้อความต้นฉบับ (SQLite + การค้นหาความคล้ายด้วย 2-gram ภาษาเกาหลี) และบทสนทนาที่อ่อนไหวจะไม่ถูกบันทึกเป็นค่าเริ่มต้น โดยผู้ใช้สามารถดู แก้ไข และลบได้เอง
ความปลอดภัย: เมื่อตรวจพบสัญญาณวิกฤต จะให้ข้อมูลหน่วยงานผู้เชี่ยวชาญก่อนเป็นอันดับแรก (สายด่วนป้องกันการฆ่าตัวตายแบบบูรณาการ 109) และรักษาเส้นแบ่งว่าไม่ใช่บริการด้านสุขภาพจิตโดยเฉพาะ ทั้งในหน้าจอและ persona
สแตก: FastAPI + Vanilla JS, โมเดลจัดหาผ่าน API (model-agnostic), Docker/Caddy บน droplet เดียว, regression test 296 รายการ, และมีการวัด retention ของ anonymous cohort ในตัว
ยังเป็นเบต้าในช่วงแรก จึงยังมีจุดที่ขาดอยู่มาก โดยเฉพาะกำลังปรับปรุงคุณภาพของบทสนทนาแรกและอัตราการเปลี่ยนผ่านของหน้าทางเข้า หากได้ลองใช้แล้วพบจุดที่ยังดูไม่เป็นธรรมชาติ บอกมาได้เลยแล้วผมจะนำไปปรับใช้ ผมไม่ได้ดูข้อความเต็มของบทสนทนาส่วนตัว และตรวจสอบเฉพาะตัวชี้วัดแบบไม่ระบุตัวตนเท่านั้น
กรณีใช้งานจริง
ครั้งหนึ่งเมื่อผู้ใช้ถามถึงเพลงหนึ่ง AIRU ค้นเว็บแล้วก็ยังตอบผิดประเด็นอยู่เรื่อย ๆ พอดู log ก็พบว่าการค้นหาถูกรันจริง แต่ปัญหาอยู่ที่คำค้น ในคำถามต่อเนื่องว่า "ช่วยบอกหน่อยว่าเพลงนั้นพูดถึงเรื่องอะไร" ระบบกำลังค้นหาด้วยคำว่า "เพลงนั้นพูดถึงเรื่อง" โดยไม่มีหัวข้อจากบทสนทนาก่อนหน้า (ชื่อเพลง) รวมอยู่ด้วย ตอนนี้แก้แล้วให้เมื่อเจอคำชี้เฉพาะ ("เพลงนั้น") ระบบจะไปหาหัวข้อจากข้อความก่อนหน้าแล้วนำมาประกอบ ระหว่างดูแลระบบนี้ผมได้เรียนรู้ว่าการสร้างคำค้นสำหรับคำถามต่อเนื่องเป็นโจทย์ยากที่ซ่อนอยู่ของบริการประเภทนี้
กลไกสำหรับการดูแลระบบคนเดียว
เพราะเป็นการดูแลระบบคนเดียว จึงทำให้กฎระเบียบมาทำงานแทนคน ก่อน deploy จะมีการทำ data snapshot และตรวจสอบความถูกต้องอัตโนมัติ มีการแยก log ทางกายภาพของทราฟฟิกผู้ใช้จริง/การประเมิน/ผู้ดูแลระบบ/บอต (เพราะเคยมีครั้งที่การทดสอบของผมเองทำให้ตัวชี้วัดปนเปื้อน) และรัน regression test ทั้งหมดก่อน deploy ทุกครั้ง
ยังไม่มีความคิดเห็น