เราสร้างผู้พิทักษ์โค้ดอัตโนมัติภายในหนึ่งสุดสัปดาห์
เราเข้าร่วม JacHacks ด้วยเป้าหมายที่บ้าบิ่น
สร้างเครื่องมือที่คอยเฝ้าดู repository มันต้องตรวจจับการเปลี่ยนแปลงของ dependency ที่น่าสงสัย ต้องรัน dependency เหล่านั้นใน sandbox เพื่อพิสูจน์ว่าเป็นอันตราย จากนั้นต้องเขียนวิธีแก้ไขและเปิด pull request โดยไม่ต้องมีมนุษย์เข้ามาเกี่ยวข้องจนกว่าจะถึงขั้นตอนสุดท้าย
เราเรียกมันว่า GhostWatch และได้รับรางวัลอันดับ 2 ในหมวด agentic
นี่คือวิธีที่เราสร้างมันขึ้นมาและสิ่งที่เราได้เรียนรู้
ปัญหา
การรีวิวโค้ดแบบมาตรฐานมีข้อบกพร่องหลักสองประการ:
- เครื่องมือไม่สามารถมองเห็น blast radius (ขอบเขตผลกระทบ) ได้ การเปลี่ยนแปลงในฟังก์ชันหนึ่งอาจทำให้ไฟล์ที่อยู่ไกลออกไปพังได้ เครื่องมือส่วนใหญ่ไม่ได้ดูความเชื่อมโยงระหว่างกัน
- การโจมตีแบบ supply chain สามารถข้ามขั้นตอนการรีวิวได้ ผู้โจมตีสามารถดันเวอร์ชันที่มีมัลแวร์ (poisoned version) เข้าสู่ registry โดยตรง ซึ่งจะไม่มี pull request ให้รีวิว คุณจะรู้ตัวก็ต่อเมื่อความเสียหายเกิดขึ้นแล้วเท่านั้น
โซลูชันของเรา
เราสร้างระบบที่มีความตระหนักรู้เชิงพื้นที่ (spatial awareness) โดยใช้ Jac ในการจำลอง codebase ให้เป็นกราฟ
ในกราฟนี้:
- ไฟล์คือโหนด (nodes)
- การ import คือเส้นเชื่อม (edges)
ในการหา blast radius เราไม่ได้ใช้วิธีการเดา แต่เราใช้วิธีการทำ graph walk ซึ่งทำให้ตรรกะด้านความปลอดภัยมีความแน่นอน (deterministic) และสามารถอธิบายได้
เทคโนโลยีที่ใช้ (Tech Stack)
เราใช้ Jac แทนการใช้ Python เพียวๆ และการเรียก LLM ด้วยตัวเอง ซึ่งสิ่งนี้เปลี่ยนวิธีการทำงานของเรา:
- codebase คือโครงสร้างข้อมูล
- มีระบบ persistence ในตัว กราฟของ repository ของเรายังคงอยู่แม้จะมีการ restart โดยไม่ต้องใช้ฐานข้อมูลแยกต่างหาก
- การรวม LLM เข้ามานั้นไร้รอยต่อ เราใช้เพียง keyword เดียวเพื่อเปลี่ยนฟังก์ชันให้เป็นการเรียก LLM ที่ส่งคืนค่ากลับมาเป็น typed objects
ส่วนที่ยาก
มันไม่ง่ายเลย เราต้องเผชิญกับอุปสรรคหลายอย่าง:
- ไวยากรณ์ใหม่: Jac ใช้ semicolon, ปีกกา และ keyword เฉพาะอย่าง "has" แทนที่จะเป็น "self" ของ Python เราเสียเวลาในช่วงไม่กี่ชั่วโมงแรกไปกับการแก้ parse errors
- กับดักของ React: ผมพยายามแก้ไขค่าใน list โดยตรง (mutate in place) ซึ่งทำให้ frontend ไม่ยอมอัปเดต ผมจึงต้องเปลี่ยนมาเป็นการกำหนดค่า list ใหม่ (reassigning) เพื่อกระตุ้นการ re-render
- ช่องว่างของเอกสาร: การตั้งค่าสภาพแวดล้อมใช้เวลานานกว่าที่คาดไว้เนื่องจากเอกสารบางส่วนยังมีรายละเอียดไม่เพียงพอ
ทำไมสิ่งนี้ถึงสำคัญ
ระบบ agent ส่วนใหญ่กำหนดให้คุณต้องจัดการ state, orchestration และ serialization ด้วยตัวเอง แต่ด้วย Jac กราฟคือส่วนหนึ่งของโครงสร้างภาษา (language construct) สถาปัตยกรรมของระบบจึงสอดคล้องกับปัญหาที่เรากำลังแก้ไขอยู่พอดี
โปรเจกต์นี้ยังไม่สมบูรณ์แบบ sandbox ของเราใช้ local subprocess แทนที่จะเป็น cloud microVMs เราจงใจทิ้งช่องว่างเหล่านี้ไว้ให้เห็น เพราะความสมบูรณ์แบบในงาน hackathon ไม่ควรเป็นการหลอกลวง
ดูเดโมได้ที่: https://www.youtube.com/watch?v=ZN0UVnNUpRs
ดูโค้ดได้ที่: https://github.com/ayushmk7/GhostWatch
ที่มา: https://dev.to/ayushmk/we-built-an-autonomous-code-guardian-in-a-weekend-heres-what-happened-4982
ชุมชนการเรียนรู้ (ไม่บังคับ): https://t.me/GyaanSetuAi
