เอเจนต์กำลังเป็นหัวข้อหลักในทุกบทสนทนาเกี่ยวกับ AI ในขณะนี้ การสาธิตต่าง ๆ ทำให้พวกมันดูเหมือนผู้ช่วยดิจิทัลแบบอัตโนมัติที่สามารถคิด วางกลยุทธ์ และแก้ปัญหาได้โดยไม่ต้องอาศัยมนุษย์ แต่หากลองเจาะลึกลงไปภายใต้ส่วนติดต่อผู้ใช้งาน (interface) คุณจะพบกับสิ่งที่เรียบง่ายกว่านั้นมาก เอเจนต์เป็นเพียงโมเดลภาษาที่ทำงานอยู่ภายในลูป (loop) เท่านั้น มันคือรูปแบบการออกแบบ (design pattern) ไม่ใช่จิตสำนึก การเข้าใจความแตกต่างนี้เป็นเรื่องสำคัญ เพราะมันจะเปลี่ยนวิธีที่คุณสร้าง ดีบั๊ก และเชื่อมั่นในระบบเหล่านี้

เอเจนต์คืออะไรกันแน่

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

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

วงจรดังกล่าวมีลักษณะดังนี้:

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

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

ReAct: วงจรการคิด-การกระทำ-การสังเกต

วิธีที่นิยมที่สุดในการสร้างลูปนี้คือรูปแบบ ReAct ซึ่งย่อมาจาก Reason (การใช้เหตุผล) บวกกับ Act (การกระทำ) ในทุก ๆ รอบของการทำงานผ่านลูป โมเดลจะผ่านสามขั้นตอนที่แตกต่างกัน

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

ลองดูตัวอย่างง่าย ๆ สมมติว่าคุณขอให้เอเจนต์บอกว่าพรุ่งนี้ที่เมืองออสตินฝนจะตกหรือไม่ โมเดลอาจคิดว่า "ฉันต้องการพยากรณ์อากาศสำหรับเมืองออสติน" การกระทำของมันคือการเรียกใช้ weather API พร้อมกับชื่อเมือง ผลการสังเกตที่ส่งกลับมาจะเป็น JSON ดิบ ซึ่งประกอบด้วยค่าอุณหภูมิและโอกาสเกิดฝน จากนั้นโมเดลจะคิดอีกครั้งว่า "พยากรณ์อากาศแสดงโอกาสที่ฝนจะตกถึงร้อยละเจ็ดสิบ" และการกระทำสุดท้ายของมันคือการสังเคราะห์ข้อมูลนั้นให้เป็นคำตอบภาษาอังกฤษที่เข้าใจง่ายสำหรับคุณ

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

สิ่งที่คุณต้องมีเพื่อสร้างลูปที่เชื่อถือได้

การรันรูปแบบนี้ในระบบที่ใช้งานจริง (production) ต้องใช้มากกว่าแค่การเขียน prompt ที่ชาญฉลาด คุณจำเป็นต้องมีแนวป้องกัน (guardrails) ที่ใช้งานได้จริงสามประการ

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

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