ทำไมเอเจนต์เขียนโค้ด AI ของคุณจึงหลอนเส้นทางไฟล์
> เอเจนต์เขียนโค้ด AI ประดิษฐ์เส้นทางไฟล์เมื่อพวกมันไม่มีแผนที่จริงของรีโพ นี่คือสาเหตุที่มันเกิดขึ้น และวิธีที่แผนที่ที่มีหลักฐานนำไปสู่การเปลี่ยนแปลงที่หลอนน้อยลง
สัญญาณไม่ใช่เนื้อหาฟังก์ชันที่ผิด มันคือการเปลี่ยนแปลงที่มั่นใจในไฟล์ที่ไม่มีอยู่จริง หรือในไฟล์ที่มีอยู่จริงแต่ไม่ใช่ไฟล์ที่อิมพลีเมนต์พฤติกรรมนั้น
คุณขอให้แก้ไขการหมดอายุของเซสชัน เอเจนต์เปิด src/auth/session.ts เส้นทางนั้นน่าเชื่อถือ มันก็ผิดด้วย ตัวจัดการจริงอาศัยอยู่ใน apps/api/src/middleware/expiry.ts ซึ่งถูกเปลี่ยนชื่อสองรอบการปรับโครงสร้างที่แล้ว เอเจนต์ไม่ได้โกหกคุณ มันกำลังเติมสตริงรูปร่างเหมือนเส้นทางให้สมบูรณ์ตามอคติจากการฝึกฝนบวกกับสิ่งใดก็ตามที่มีอยู่แล้วในหน้าต่างบริบท
นี่คือรูปแบบความล้มเหลวทั่วไปบนรีโพซิทอรีจริง โมเดลสามารถเขียนโค้ดได้ ข้อผิดพลาดของมันคือการเลือกที่ผิดที่จะเขียนมัน
ทำไมเอเจนต์จึงประดิษฐ์เส้นทาง
เอเจนต์เขียนโค้ดคือโมเดลทำนาย token ถัดไปที่มีเครื่องมือติดตั้งอยู่ เมื่อคุณพูดว่า ‘แก้ไขการหมดอายุของเซสชัน’ มันต้องระบุชื่อไฟล์ก่อนที่มันจะอ่านหรือแก้ไขอะไรได้ หากมันยังไม่มีแผนที่ที่มีหลักฐาน มันจะสร้างเส้นทางจาก:
- ข้อตกลงการตั้งชื่อที่มันเคยเห็นในรีโพซิทอรีอื่น
src/auth/session.tsเป็นรูปแบบที่พบบ่อย - ไฟล์ที่มีอยู่ในการสนทนาแล้ว ซึ่งอาจเป็นไฟล์ที่คุณวางไว้เมื่อสัปดาห์ที่แล้ว ไม่ใช่ไฟล์ที่สำคัญตอนนี้
- รายการไดเรกทอรีที่มันรันโดยบังเอิญ ไม่สมบูรณ์บนต้นไม้ขนาดใหญ่
- ไฟล์คำสั่ง
CLAUDE.mdและAGENTS.mdบอกเอเจนต์ว่าจะประพฤติตัวอย่างไร มันไม่ใช่ดัชนีที่มีชีวิตของสัญลักษณ์ ผู้เรียก หรือเส้นทางปัจจุบัน
ไม่มีแหล่งใดในนี้ที่เป็นแผนที่ของรีโพนี้ วันนี้ โมเดลเติมช่องว่างในลักษณะเดียวกับที่มันเติมช่องว่างใด ๆ: ด้วยความต่อเนื่องที่มีความน่าจะเป็นสูง ความต่อเนื่องนั้นมักดูเหมือนเส้นทางจริง บางครั้งไฟล์นั้นมีอยู่จริงและอยู่ติดกับไฟล์ที่ถูกต้อง บางครั้งมันมีอยู่บนแบรนช์ที่เมิร์จไปแล้วเมื่อเดือนที่แล้ว บางครั้งมันไม่เคยมีอยู่เลย
Grep ไม่ช่วยคุณที่นี่หากเอเจนต์ไม่ได้ค้นหาสตริงที่ถูกต้องตั้งแต่แรก เอเจนต์เดาเส้นทาง จากนั้นอ่านสิ่งที่เส้นทางนั้นส่งคืน จากนั้นแก้ไขมัน ก้าวแรกที่ผิดคือเส้นทาง ไม่ใช่ patch
การอ่านไฟล์ก็ไม่เหมือนกับการค้นหาไฟล์ที่ถูกต้อง Claude Code, Cursor, Codex และเครื่องมือที่คล้ายกันสามารถเปิดสิ่งใดก็ตามที่คุณชี้ให้มันดู คำถามคือมันหาไฟล์ที่ถูกต้อง สัญลักษณ์ที่สำคัญ การพึ่งพา การทดสอบ และรัศมีผลกระทบได้อย่างน่าเชื่อถือก่อนที่จะแก้ไขหรือไม่ การเข้าถึงไฟล์โดยไม่มีแผนที่ยังคงเริ่มต้นด้วยการเดา
การแก้ไขไฟล์ผิดคือปัญหาการดึงข้อมูล
คิดว่าเส้นทางที่ประดิษฐ์ขึ้นเป็นข้อผิดพลาดในการดึงข้อมูล ไม่ใช่ข้อบกพร่องทางบุคลิกภาพ
หากเอเจนต์ต้องส่งคืน path/file.ext:line ก่อนที่จะได้รับอนุญาตให้แก้ไข สองสิ่งจะเกิดขึ้น อย่างแรก คุณสามารถเปิดการอ้างอิงและปฏิเสธงานได้ภายในสิบวินาที อย่างที่สอง เอเจนต์ต้องสอบถามบางสิ่งที่รู้จักต้นไม้นั้นจริง ๆ
นั่นคืองานของชั้นบริบทโค้ดเบส การค้นหาเชิงความหมายเพียงอย่างเดียวไม่เพียงพอ ชิ้นส่วนโค้ดที่ ‘ฟังดูเหมือนการหมดอายุของเซสชัน’ ก็ยังคงลงจอดในแพ็กเกจที่เลิกใช้แล้วได้ คุณยังต้องการข้อความที่แน่นอนเมื่อคุณรู้สตริง การค้นหาสัญลักษณ์เมื่อคุณรู้ชื่อ การค้นหาเชิงโครงสร้างเมื่อคุณรู้รูปร่าง และกราฟการพึ่งพาเมื่อคุณต้องการผู้เรียกและรัศมีผลกระทบ
Maguyva คือชั้นนั้นสำหรับเอเจนต์เขียนโค้ดที่เข้ากันได้กับ MCP มันไม่ใช่ตัวแก้ไขโค้ด Claude Code, Cursor, Codex CLI, VS Code, Windsurf และไคลเอนต์ MCP อื่น ๆ ยังคงอยู่ในตำแหน่งของมัน เอเจนต์สอบถามแผนที่ที่มีการจัดอันดับก่อนที่จะแตะบรรทัดใด ๆ
สิ่งที่อ้างนั้นเรียบง่ายโดยตั้งใจ: การเปลี่ยนแปลงที่หลอนน้อยลง Maguyva ไม่ได้เอาความสามารถในการเดาไปจากโมเดล มันเปลี่ยนก้าวแรกเริ่มต้นจาก ‘ประดิษฐ์เส้นทางที่น่าเชื่อถือ’ เป็น ‘ขอตำแหน่งที่จัดอันดับและอ้างอิงได้’
คำตอบที่มีหลักฐานมีลักษณะอย่างไร
คำตอบที่มีประโยชน์สำหรับ ‘การหมดอายุของเซสชันถูกจัดการที่ไหน’ ไม่ใช่ย่อหน้าเดียว มันคือรายการตำแหน่งสั้น ๆ:
apps/api/src/middleware/expiry.ts:48- ตัวจัดการapps/web/src/lib/auth-client.ts:112- ผู้เรียกapps/api/tests/expiry.test.ts:20- การทดสอบที่จะล้มเหลวหากการเปลี่ยนแปลงนั้นผิด
คุณสามารถเปิดบรรทัดเหล่านี้ได้ หากผิด คุณหยุด หากถูกต้อง เอเจนต์สามารถแก้ไขได้ การตรวจสอบคือประเด็นหลัก ไม่ใช่คำขวัญ
Maguyva เปิดเผยเครื่องมือ MCP ที่เน้นลูกค้า 11 ตัวครอบคลุมการค้นหา สัญลักษณ์ การวิเคราะห์การพึ่งพา การดึงไฟล์ บริบทรีโพซิทอรีและเวิร์กโฟลว์เครื่องมืออรรถประโยชน์ที่กำหนดผลลัพธ์ได้แน่นอน โหมดการดึงข้อมูลสี่แบบ (เชิงความหมาย เชิงโครงสร้าง เชิงกราฟ/การพึ่งพา และข้อความ) รวมกันเป็นผลลัพธ์ที่มีการจัดอันดับ; การค้นหาสัญลักษณ์เป็นเครื่องมือ MCP แยกต่างหาก (find_symbol) คำตอบที่มีหลักฐานกลับมาพร้อมเส้นทางไฟล์และหมายเลขบรรทัด เพื่อให้คุณประเมินมันเทียบกับต้นไม้ที่อยู่ตรงหน้าคุณ
เอกสารประกอบ อธิบายเส้นทางที่สั้นที่สุด: เริ่มต้นฟรี จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้ว เชื่อมต่อไคลเอนต์ จากนั้นถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้
วงจรที่เปลี่ยนการเปลี่ยนแปลงแรก
คุณไม่ต้องการศาสนาเวิร์กโฟลว์ใหม่ คุณต้องการก้าวเพิ่มเติมหนึ่งก้าวก่อนการเขียนครั้งแรก
- ถามคำถามหนึ่งข้อที่คุณสามารถประเมินได้อยู่แล้ว ‘โค้ดไหนจัดการล็อกอินและการหมดอายุของเซสชัน?’ ดีกว่า ‘แก้ไข auth’
- เรียกร้องการอ้างอิง เส้นทางไฟล์และหมายเลขบรรทัด ไม่ใช่บทสรุปว่า ‘โมดูล auth’
- เปิดไฟล์ที่อ้างอิง ติดตามสัญลักษณ์ ยืนยันการพึ่งพาที่คุณกำลังจะแตะต้อง
- ปล่อยให้เอเจนต์ patch หลังจากนั้นเท่านั้น
หากขั้นตอนที่ 2 ไม่ส่งคืนสิ่งที่มีประโยชน์ เอเจนต์ไม่มีสิทธิ์ด้นสดเส้นทาง มันค้นหาอีกครั้ง หรือคุณแสดงให้มันดู ประตูเดียวนั้นคือสิ่งที่สร้างการเปลี่ยนแปลงที่หลอนน้อยลง โมเดลก็เป็นโมเดลเดิม แผนที่ต่างหากที่เปลี่ยนไป
ไฟล์คำสั่งยังคงสำคัญ รักษามันไว้ ใช้สำหรับข้อตกลง กฎการตรวจสอบ และสิ่งที่ไม่ควรแตะต้อง อย่าขอให้มันเป็นดัชนี CLAUDE.md ที่แสดงรายการสามไดเรกทอรีสำคัญจะล้าสมัยหนึ่งสัปดาห์หลังจากการแบ่งแพ็กเกจ แผนที่ที่สอบถามได้จะอัปเดตเมื่อรีโพอัปเดต
ความล้มเหลวที่เกี่ยวข้องคือไฟล์เกือบถูกต้อง: เอเจนต์เปิด auth.ts ในขณะที่พฤติกรรมอาศัยอยู่ใน auth-client.ts หรือ patch ไฟล์ที่สร้างขึ้นแทนที่จะเป็นแหล่งที่มา หรือแก้ไขสำเนาใน packages/legacy เพราะชื่อตรงกัน การอ้างอิงไม่ได้ทำให้ข้อผิดพลาดเหล่านี้เป็นไปไม่ได้ มันทำให้มองเห็นได้ก่อนที่ diff จะลงจอด
สิ่งที่แผนที่จะไม่แก้ไขให้คุณ
จงซื่อสัตย์เกี่ยวกับสิ่งที่คุณได้รับ แผนที่ที่มีหลักฐานจะไม่ทำให้ทุกการเปลี่ยนแปลงถูกต้อง — เอเจนต์ของคุณยังคงสามารถเขียน patch ที่แย่บนไฟล์ที่ถูกต้องเป๊ะได้ หากโค้ดเบสของคุณพึ่งพาการเรียกเมธอดแบบไดนามิก รีเฟลกชัน หรือการแพตช์โค้ดขณะรันไทม์ การค้นหาสัญลักษณ์บางอย่างจะให้ผลลัพธ์ที่บางกว่าที่คุณต้องการ เพราะนั่นคือสิ่งที่ความไม่ชัดเจนของรันไทม์ทำกับดัชนีแบบสแตติกใด ๆ และหากคุณคาดหวังเปอร์เซ็นต์ — ‘เส้นทางที่หลอนลดลง X%’ — คุณจะไม่พบมันที่นี่ เพราะไม่มีใครสามารถวัดตัวเลขนั้นได้อย่างซื่อสัตย์สำหรับรีโพของคุณนอกจากคุณเอง
สิ่งที่คุณคาดหวังได้นั้นแคบกว่าและมีประโยชน์มากกว่า: เอเจนต์หยุดเริ่มต้นการเปลี่ยนแปลงด้วยเส้นทางที่เดา ก้าวแรกนั้นมีหลักฐานในแผนที่จริง และจากนั้นการเปลี่ยนแปลงที่หลอนน้อยลงก็เกิดขึ้น ทุกสิ่งหลังการอ้างอิง — การอ่าน diff การประเมิน patch — ยังคงเป็นงานของคุณ เหมือนที่มันเป็นมาตลอด
การทดสอบนี้แทบไม่มีค่าใช้จ่ายอะไรเลย: จัดทำดัชนีรีโพที่คุณรู้จักอยู่แล้วและถามคำถามหนึ่งข้อที่คุณสามารถตรวจสอบได้ เริ่มด้วยเส้นทางที่เคยทำให้คุณลำบากมาก่อน หากการอ้างอิงผิด คุณจะเห็นทันที หากถูกต้อง การเปลี่ยนแปลงถัดไปของเอเจนต์ของคุณจะมีที่ที่ดีกว่าให้ลงจอด
// it doesn't know the file. it knows how to find it.
อ่านเพิ่มเติมที่เกี่ยวข้อง
เนื้อหาอื่นๆ จากบันทึกการพัฒนา Maguyva
การให้บริบทรีโพขนาดใหญ่แก่เอเจนต์ AI โดยไม่ต้องใช้ตัวสร้างดัชนีในเครื่อง_
วิธีให้เอเจนต์เขียนโค้ดมีแผนที่ของรีโพซิทอรีขนาดใหญ่ที่สามารถสอบถามได้จากคลาวด์ โดยไม่ต้องรันตัวสร้างดัชนีในเครื่องบนแล็ปท็อปของคุณ
บริบทที่เดินทางไปกับคุณ_
ตัวสร้างดัชนีของ Cursor นั้นยอดเยี่ยมภายใน Cursor เอง Maguyva คือแผนที่ MCP บนคลาวด์ที่เอเจนต์ตัวเดียวกันสามารถสอบถามได้จากตัวแก้ไขโค้ด, CLI และ CI อื่น ๆ
แผนที่ก่อน ตรวจสอบทีหลัง_
ให้เอเจนต์เขียนโค้ดของคุณยึดกับแผนที่รีโพ ก่อนที่มันจะเขียน จากนั้นให้ Greptile ตรวจสอบคำขอรวมโค้ดทีหลัง คู่หูที่เสริมกัน ไม่ใช่ตัวแทนกัน