เปรียบเทียบเครื่องมือค้นหาโค้ดสำหรับ AI: Ripgrep, Serena, claude-context และ Semlith
ทดสอบ 4 เครื่องมือค้นหาโค้ดสำหรับ AI Agent บนโค้ดเบส Flask 3.1.3 เปรียบเทียบความเร็ว การตั้งค่า และความแม่นยำจากผู้พัฒนา Semlith

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- ทดสอบ 4 เครื่องมือค้นหาโค้ด (Ripgrep, Serena, claude-context, Semlith) บน Flask 3.1.3
- Ripgrep เร็วที่สุดสำหรับการค้นหาด้วยชื่อเฉพาะ แต่หาไม่เจอหากใช้ภาษามนุษย์ทั่วไป
- claude-context ใช้เวลาจัดทำดัชนีผ่าน Docker บน CPU นานราว 21 นาที
- Semlith เครื่องมือของผู้เขียนเองใช้เวลาจัดทำดัชนี 84.3 วินาที รองรับไฟล์ PDF และรูปภาพ
ในปัจจุบันมีหลากหลายวิธีในการช่วยให้ Coding Agent ค้นหาโค้ดได้อย่างแม่นยำ ไม่ว่าจะเป็นการใช้ระบบค้นหาข้อความธรรมดา Language Server ผ่าน MCP Vector Database หรือ Local Index ซึ่งแต่ละเครื่องมือต่างก็เคลมว่าวิธีของตนเองดีที่สุด ผู้พัฒนาเครื่องมือ Semlith จึงได้ทำการทดสอบเปรียบเทียบการทำงานของเครื่องมือเหล่านี้ด้วยงานเดียวกันทั้งหมด
การทดสอบครั้งนี้รันบน Flask เวอร์ชัน 3.1.3 บนฮาร์ดแวร์ M1 MacBook Air หน่วยความจำ 8 GB โดยใช้เครื่องมือประกอบด้วย ripgrep 15.2.0, Serena 2.1.0, claude-context 0.1.15 (ทำงานร่วมกับ Milvus 3.0.3 และ Ollama ใช้โมเดล nomic-embed-text) และ semlith 0.50.0 ทำการโคลนโค้ดเบสด้วยคำสั่ง git clone --depth 1 --branch 3.1.3 https://github.com/pallets/flask
เมื่อทดสอบการค้นหาด้วยชื่อตัวแปรที่ชัดเจน เช่น การค้นหา max_content_length ด้วย ripgrep ผลลัพธ์แสดงโค้ด 8 บรรทัดที่ถูกต้องครบถ้วนภายในเวลาเพียงเสี้ยววินาที แต่เมื่อเปลี่ยนมาค้นหาด้วยภาษามนุษย์ธรรมดา เช่นคำว่าจำกัดขนาดข้อมูลที่อัปโหลด โดยที่ไม่มีชื่อฟังก์ชันระบุ เครื่องมือค้นหาข้อความธรรมดากลับหาไม่พบ เนื่องจากไฟล์โค้ดไม่ได้ใช้คำศัพท์เหล่านั้นตรงๆ ทำให้ Agent ต้องเดาคำและเปิดหาหลายไฟล์

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ในส่วนของ Serena เป็นเครื่องมือที่เตรียมเครื่องมือจัดการ Symbol ผ่าน Language Server รองรับมากกว่า 40 ภาษา โดยเวอร์ชัน 2 ทำงานผ่าน REPL ทำให้ Agent สามารถเขียนโค้ด Python เล็กๆ เรียกใช้ API ของ Serena ได้ การตั้งค่าทำได้โดยสร้างสภาพแวดล้อมเสมือนและติดตั้งผ่านคำสั่ง uv ใช้เวลาจัดทำดัชนีโครงการ 30.9 วินาที ซึ่งมีความแม่นยำสูงเมื่อทราบชื่อ แต่หากไม่ทราบชื่อจะตกลงไปใช้การค้นหาด้วย Pattern ปกติ จุดเด่นสำคัญที่เครื่องมืออื่นไม่มีคือ Serena สามารถแก้ไขโค้ดได้ เช่น แทนที่เนื้อหาฟังก์ชันหรือเปลี่ยนชื่อข้ามไฟล์
การเปรียบเทียบเครื่องมือเหล่านี้สะท้อนให้เห็นว่า ไม่มีเครื่องมือใดที่ดีที่สุดสำหรับทุกกรณีการใช้งาน การเลือกใช้จึงขึ้นอยู่กับบริบทของงาน เช่น หากต้องการความเร็วสูงสุดในการค้นหาข้อความที่รู้ชื่ออยู่แล้ว เครื่องมือแบบ Text Search พื้นฐานยังคงตอบโจทย์ แต่หากต้องการให้ AI เข้าใจความหมายและค้นหาจากคำอธิบายธรรมชาติ ระบบ Vector Embedding หรือ Local Index จะมีความจำเป็นมากกว่า
สำหรับ claude-context เป็น MCP Server จาก Zilliz ทำหน้าที่ตัดแบ่งโค้ด แปลงเป็น Embedding และจัดเก็บเวกเตอร์ใน Milvus พร้อมระบบค้นหาแบบ Hybrid การทดสอบแบบรันบนเครื่องท้องถิ่นจำเป็นต้องติดตั้ง Milvus ผ่าน Docker Compose และรัน Ollama พร้อมจำกัดการใช้ CPU ไว้ที่ 4 คอร์เพื่อป้องกันระบบค้าง การจัดทำดัชนีแสดงสถานะว่าเสร็จสิ้นเมื่อเวลา 92 วินาที แต่ในบันทึกของเซิร์ฟเวอร์จริงใช้เวลาถึง 1,266.9 วินาที ซึ่งหาก Agent เชื่อสถานะเริ่มต้นและค้นหาเร็วเกินไปอาจได้ข้อมูลจากดัชนีที่ไม่สมบูรณ์ ส่วนเวลา 21 นาทีที่ใช้นั้นเป็นการประมวลผลบน CPU ผ่าน Docker ซึ่งหากรันแบบ Native จะใช้เวลาน้อยกว่านี้
ในด้านของ Semlith ซึ่งเป็นเครื่องมือของผู้ทดสอบเอง ใช้คำสั่ง semlith index . เพื่อจัดทำดัชนีไฟล์ 211 ไฟล์ (รวม 2,778 ชังก์ และ 5 รูปภาพ) ใช้เวลาไป 84.3 วินาที ซึ่งใช้เวลานานกว่า Serena เนื่องจากต้องสร้าง Embedding แต่มีจุดเด่นที่รองรับการอ่านไฟล์ PDF, Word และ Excel เพิ่มเติมด้วย
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น