การสร้าง Local AI Coding Agent ที่ปลอดภัยด้วย Node.js

AI agent ฟังดูเหมือนเป็นเรื่องซับซ้อน แต่จริงๆ แล้วไม่ใช่เลย

Agent ก็คือ LLM ที่เชื่อมต่อเข้ากับ loop, เครื่องมือ (tools) และกฎความปลอดภัยเท่านั้นเอง

ผมได้สร้าง local coding agent โดยใช้ Node.js และ Mistral ผ่าน Ollama คุณไม่จำเป็นต้องใช้ API key แบบเสียเงิน ทุกอย่างทำงานบนเครื่องของคุณเอง

Agent จะช่วยให้คุณเข้าใจโปรเจกต์ JavaScript ของคุณได้มากขึ้น โดยมันสามารถ: • รายชื่อไฟล์ในโปรเจกต์ • อ่านไฟล์ในโปรเจกต์ • ค้นหาข้อความ • อธิบายโค้ด • ค้นหาบั๊ก • เสนอการแก้ไขโค้ด

หลักการสำคัญคือความปลอดภัย Agent สามารถตรวจสอบไฟล์ได้ แต่ไม่สามารถแก้ไขไฟล์ได้โดยตรง มันจะส่งเพียงข้อเสนอการแก้ไข (patch proposal) มาให้คุณตรวจสอบเท่านั้น วิธีนี้ช่วยให้มนุษย์ยังคงเป็นผู้ควบคุมกระบวนการ (human in the loop)

การทำงานของ Agent: แชทบอททั่วไปจะทำงานตามเส้นทางง่ายๆ: ผู้ใช้ถามคำถาม -> โมเดลตอบคำถาม

แต่ Agent จะทำงานเป็น loop: ผู้ใช้ถามคำถาม -> โมเดลตัดสินใจเลือกใช้เครื่องมือ -> JavaScript รันเครื่องมือนั้น -> โมเดลดูผลลัพธ์ -> โมเดลตอบคำถาม

รูปแบบสำคัญที่ใช้ในโปรเจกต์นี้: • Agent loop: กระบวนการจะทำซ้ำจนกว่าโมเดลจะให้คำตอบสุดท้าย • Tool calling: โมเดลร้องขอการใช้งานฟังก์ชัน JavaScript เฉพาะเจาะจง • Tool allowlist: เฉพาะเครื่องมือที่ได้รับอนุญาตเท่านั้นที่สามารถทำงานได้ • System prompt: กฎที่บอกให้โมเดลรู้ว่าควรปฏิบัติตัวอย่างไร • JSON action protocol: โมเดลตอบกลับด้วยข้อมูลที่มีโครงสร้าง • Safety boundary: การเข้าถึงไฟล์จะถูกจำกัดอยู่แค่ภายในโฟลเดอร์หลักของโปรเจกต์ (project root)

ความปลอดภัยคือสิ่งที่สำคัญที่สุด ผมได้ใช้ฟังก์ชันที่ชื่อว่า safeResolve เพื่อป้องกัน path traversal ซึ่งช่วยให้มั่นใจได้ว่า Agent จะไม่สามารถเข้าถึงไฟล์ที่อยู่นอกโฟลเดอร์โปรเจกต์ของคุณได้ นอกจากนี้ ผมยังได้กำหนดขีดจำกัดของขนาดไฟล์เพื่อป้องกันไม่ให้กระทบต่อ context ของโมเดลด้วย

โครงสร้างโปรเจกต์: • src/cli.js: จุดเริ่มต้นการทำงานผ่าน terminal • src/agent.js: loop หลักและการส่งงานให้เครื่องมือ (tool dispatch) • src/ollama.js: local API client • src/tools.js: เครื่องมือจัดการไฟล์ที่ปลอดภัย • test/tools.test.js: การทดสอบความปลอดภัยและพฤติกรรม

คุณสามารถรันโปรเจกต์นี้ได้ด้วย Node.js และ Ollama แนะนำให้ใช้ Mistral หรือลองใช้โมเดลที่เน้นการเขียนโค้ดโดยเฉพาะอย่าง Qwen2.5-Coder หรือ DeepSeek-Coder เพื่อผลลัพธ์ที่ดีกว่า

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

แหล่งที่มา: https://dev.to/gaurav101/building-a-safe-local-ai-coding-agent-with-nodejs-46ol