เราสร้างผู้พิทักษ์โค้ดอัตโนมัติภายในหนึ่งสุดสัปดาห์

เราเข้าร่วม 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