"ไม่มีคำถามไหนโง่" เป็นหนึ่งในคำพูดใจดีที่เรามักพูดกันเอง และสำหรับมนุษย์แล้วมันก็เป็นความจริง เพื่อนร่วมทีมใหม่ที่ถามว่าโค้ดส่วนการเรียกเก็บเงินอยู่ที่ไหนกำลังเรียนรู้โครงสร้างของระบบ คำถามนั้นสร้างบริบทร่วมกัน และคำตอบก็ใช้เวลาแค่นาทีเดียว แต่เอเจนต์อัตโนมัติไม่ใช่เพื่อนร่วมทีมใหม่ที่กำลังปรับตัว มันสามารถอ่านทั้งรีโพซิทอรีได้ในเวลาที่คุณใช้อ่านประโยคนี้ สำหรับเอเจนต์แล้ว คำถามบางอย่างนั้นโง่จริง ๆ และคำถามที่โง่ที่สุดคือคำถามที่มันสามารถตอบได้เองเพียงแค่ลองดู
คำถามโง่สำหรับเอเจนต์คืออะไร
คำถามโง่คือคำถามที่คำตอบอยู่ในโค้ดเบสอยู่แล้ว "โค้ดที่จัดการเรื่องนี้อยู่ที่ไหน" "คำสั่งบิลด์คืออะไร" "เรามีรูปแบบสำหรับเรื่องแบบนี้อยู่แล้วหรือยัง" มนุษย์อาจถามคำถามเหล่านี้ได้อย่างสมเหตุสมผลในวันแรกที่เข้าทำงาน แต่เอเจนต์ที่ถามคำถามเหล่านี้กำลังประกาศว่ามันอยากให้ใครป้อนบริบทให้มากกว่าจะไปหาเอง ทั้งที่การไปหาคือสิ่งเดียวที่มันเก่งกว่าคุณอย่างไม่ต้องสงสัย
สัญญาณบ่งชี้คือคำตอบนั้นสามารถค้นพบได้ ถ้าเอเจนต์สามารถเข้าถึงมันได้ด้วยการอ่านไฟล์ grep ต้นไม้โค้ด ตรวจสอบการตั้งค่า CI หรืออ่านคอมมิตล่าสุดที่แตะต้องส่วนนั้น การถามคุณจึงไม่ใช่ความรอบคอบ แต่เป็นการโยนงานที่มันควรทำเองกลับมาให้คุณ
เอเจนต์แบบอะซิงโครนัสจ่ายค่าคำถามเป็นวัน ๆ เต็ม ๆ
สำหรับผู้ช่วยแชทที่นั่งอยู่ข้างคุณ คำถามมีต้นทุนต่ำ คุณอยู่ตรงนั้น คุณตอบ มันก็ทำงานต่อ แต่ TaskGoblin ไม่ได้นั่งอยู่ข้างคุณ มันถูกกระตุ้นด้วยการมอบหมายอิชชู การกล่าวถึง หรือเมิร์จรีเควสต์ใหม่ และทำงานในแซนด์บ็อกซ์ขณะที่คุณอยู่ในที่ประชุม กำลังหลับ หรืออยู่คนละโซนเวลา ในโลกแบบนั้น คำถามไม่ใช่การหยุดพักชั่วคราว แต่เป็นการหยุดสนิท
เอเจนต์ที่ถามว่า "ควรใส่สิ่งนี้ไว้ใน services/ หรือ lib/" แล้วรอคำตอบ ได้เปลี่ยนการรันงานที่อาจเสร็จได้ภายในไม่กี่นาทีให้กลายเป็นงานที่จะเสร็จก็ต่อเมื่อคุณบังเอิญกลับมาดูเธรดนั้นอีกครั้ง คำถามใช่/ไม่ใช่เพียงข้อเดียวที่ถูกถามผิดจังหวะ อาจทำให้เสียเวลาจริงไปทั้งวันเพื่อแลกกับการคิดจริง ๆ เพียงสามสิบวินาที โมเดลแบบอะซิงโครนัสที่ไม่มีมนุษย์อยู่ในลูปซึ่งทำให้เอเจนต์มีคุณค่านั้น เป็นโมเดลเดียวกันกับที่ทำให้คำถามที่หลีกเลี่ยงได้กลายเป็นสิ่งที่มีต้นทุนสูงลิ่ว
การระบุรายละเอียดมากเกินไปคือความผิดพลาดเดียวกัน เพียงแค่ย้ายมาไว้ก่อนหน้า
แนวทางป้องกันตามสัญชาตญาณต่อเอเจนต์ที่ชอบถามคำถามคือการตอบทุกอย่างล่วงหน้า วางโครงสร้างไดเรกทอรีลงในพรอมต์ ระบุคำสั่งทั้งหมด สะกดกฎการตั้งชื่อให้ครบถ้วน รวมถึงแนบตัวอย่างรูปแบบที่ต้องทำตาม มันดูเหมือนเป็นความรับผิดชอบ แต่จริง ๆ แล้วมันคือความผิดพลาดเดียวกันที่แค่สวมหน้ากาก
บริบทที่เขียนด้วยมือจะล้าสมัยทันทีที่โค้ดพัฒนาต่อไป เมื่อคุณใส่ข้อมูลไว้ในพรอมต์ล่วงหน้าว่า "เราเก็บ repository ไว้ใน app/Repositories" คุณกำลังพนันว่ามันยังคงเป็นจริง ว่าคุณจำรายละเอียดที่เกี่ยวข้องได้ครบทุกอย่าง และไม่มีสิ่งใดในนั้นที่ทำให้เอเจนต์เอนเอียงไปทางแนวทางของเมื่อวาน โดยปกติแล้วอย่างน้อยหนึ่งในการพนันเหล่านั้นจะผิดพลาด และตอนนี้เอเจนต์กำลังสร้างงานอย่างมั่นใจบนข้อเท็จจริงที่คุณให้มา แทนที่จะเป็นความจริงที่มันสามารถอ่านได้เอง คุณได้แทนที่งานที่แท้จริง—การเข้าใจสถานะปัจจุบันของระบบ—ด้วยงานที่ เกี่ยวกับ งานนั้น และทำให้ผลลัพธ์แย่ลงไปด้วย
เอเจนต์ที่ดีตอบคำถามของตัวเองได้
ทางออกไม่ใช่พรอมต์ที่ดีกว่า แต่คือเอเจนต์ที่มองคำสั่งของคุณเป็นเป้าหมาย แล้วไปหาข้อเท็จจริงด้วยตัวเอง
นั่นคือเหตุผลที่การรันงานของ TaskGoblin เริ่มต้นด้วยการโคลนทั้งรีโพซิทอรีลงในแซนด์บ็อกซ์ ไม่ใช่แค่ diff ที่กำลังตรวจสอบ แต่คือทรีการทำงานทั้งหมด เพื่อให้ข้อเท็จจริงพื้นฐานพร้อมให้อ่านตรงนั้น มันอ่านไฟล์ อ่านประวัติของส่วนที่กำลังเปลี่ยนแปลง อ่านอิชชูที่กระตุ้นให้มันทำงานพร้อมการสนทนาเกี่ยวกับอิชชูนั้น และหน่วยความจำส่งต่อจากการรันงานก่อนหน้าในเธรดเดียวกัน มันสามารถรันคำสั่งของโปรเจกต์เองในแซนด์บ็อกซ์เพื่อดูว่าอะไรบิลด์ผ่านและทดสอบผ่านได้จริง แทนที่จะเชื่อคำสั่งบิลด์ที่ใครบางคนพิมพ์ไว้ในพรอมต์เมื่อหกสัปดาห์ก่อน เมื่อมันต้องการสถานะสดจากเครื่องมือของคุณ มันจะอ่านโดยตรงผ่านการเชื่อมต่อระบบของมัน แทนที่จะขอให้คุณส่งต่อให้
ผลลัพธ์คือเอเจนต์เข้าใจในระดับเดียวกับที่วิศวกรฝีมือดีจะเข้าใจได้หลังจากอ่านนานหนึ่งชั่วโมง เพียงแต่มันทำได้ในไม่กี่วินาที และทำโดยอิงจากโค้ดตามที่เป็นอยู่ในวันนี้ ไม่ใช่ตามที่ใครบางคนจำได้
เมื่อไหร่ที่มันควรถามอยู่ดี
ทั้งหมดนี้ไม่ได้หมายความว่าเอเจนต์ไม่ควรถามอะไรเลย คำถามที่คุ้มค่าที่จะถามคือคำถามที่โค้ดไม่สามารถตอบได้จริง ๆ เช่น คุณต้องการพฤติกรรมแบบไหนจริง ๆ ในสองแบบที่ยอมรับได้ การย้ายระบบที่มีความเสี่ยงอยู่ในขอบเขตของงานหรือไม่ การตัดสินใจเรื่องผลิตภัณฑ์ที่อยู่ในหัวคุณเท่านั้น สิ่งเหล่านี้ไม่ใช่คำถามโง่ ๆ แต่เป็นการตัดสินใจที่เป็นหน้าที่ของคุณ และเอเจนต์ที่ดีจะนำเสนอสิ่งเหล่านี้อย่างชัดเจนและแต่เนิ่น ๆ แทนที่จะเดาเอาเอง
ความแตกต่างนี้คือประเด็นทั้งหมด เอเจนต์ที่ถามคุณว่าโค้ดอยู่ที่ไหนกำลังสูญเปล่าสิ่งที่มันเก่งที่สุด เอเจนต์ที่ถามคุณว่าคุณกำลังพยายามสร้างผลิตภัณฑ์ไหนในสองแบบกำลังใช้เวลาของคุณกับสิ่งเดียวที่คุณเก่งที่สุด เราสร้าง TaskGoblin ขึ้นมาเพื่อให้มันตอบคำถามประเภทแรกได้เอง เพื่อให้คำถามเดียวที่มาถึงคุณคือคำถามที่คุ้มค่ากับความสนใจของคุณจริง ๆ