เครื่องมือค้นหาโค้ดแบบ Semantic ใหม่เผชิญปัญหาประสิทธิภาพและคำขอฟีเจอร์จากผู้ใช้รุ่นแรก

ทีมชุมชน BigGo
เครื่องมือค้นหาโค้ดแบบ Semantic ใหม่เผชิญปัญหาประสิทธิภาพและคำขอฟีเจอร์จากผู้ใช้รุ่นแรก

เครื่องมือค้นหาโค้ดใหม่ที่เรียกว่า ck ซึ่งสัญญาว่าจะค้นหาโค้ดตามความหมายแทนที่จะเป็นคำสำคัญ กำลังสร้างความฮือฮาในชุมชนนักพัฒนา แต่ผู้ใช้รุ่นแรกกำลังเผชิญกับปัญหาในช่วงเริ่มต้น เครื่องมือนี้ใช้เทคโนโลยี embedding เพื่อเข้าใจสิ่งที่นักพัฒนากำลังมองหา ทำให้สามารถค้นหาเช่น error handling เพื่อค้นหาบล็อกโค้ดที่เกี่ยวข้องได้ แม้ว่าคำเหล่านั้นจะไม่ปรากฏในโค้ดก็ตาม

ความกังวลเรื่องประสิทธิภาพและการใช้ทรัพยากร

ผู้ใช้หลายคนรายงานปัญหาประสิทธิภาพที่สำคัญเมื่อทดสอบเครื่องมือนี้กับโปรเจกต์ของพวกเขา นักพัฒนาหลายคนประสบปัญหาเครื่องคอมพิวเตอร์ของพวกเขากลายเป็นเครื่องทำความร้อนพร้อมพัดลมหมุนแรงหลังจากรัน semantic search เพียงแค่หนึ่งนาที เครื่องมือนี้ดูเหมือนจะใช้ทรัพยากรมากในระหว่างการสร้างดัชนีเริ่มต้นและการค้นหา โดยเฉพาะในโค้ดเบสขนาดใหญ่

ทีมพัฒนาได้ตอบสนองต่อปัญหาเหล่านี้ โดยมีการแก้ไขที่ถูกปรับใช้แล้วสำหรับปัญหาบางอย่าง ผู้ใช้คนหนึ่งพบปัญหาการ crash ที่เกี่ยวข้องกับการจัดการ emoji ซึ่งได้รับการแก้ไขอย่างรวดเร็วในเวอร์ชันล่าสุด

ฟีเจอร์สำคัญที่ขาดหายไป

จุดเจ็บปวดหลักสำหรับผู้ใช้คือการขาดการสนับสนุน gitignore ซึ่งหมายความว่าเครื่องมือจะพยายามสร้างดัชนีไฟล์ที่ควรจะถูกยกเว้นจากการค้นหาโค้ดโดยปกติ สิ่งนี้ส่งผลต่อปัญหาประสิทธิภาพและอธิบายได้ว่าทำไมผู้ใช้บางคนเห็นระบบของพวกเขาดิ้นรนภายใต้โหลดหนัก ทีมพัฒนาได้รับทราบข้อจำกัดนี้และระบุว่าการสนับสนุน gitignore จะมาในเร็วๆ นี้

คุณสมบัติหลัก

  • อินเทอร์เฟซ CLI ที่เข้ากันได้กับ Grep
  • การรวม FastEmbed เข้ากับโมเดล BGE
  • รูปแบบการยกเว้นไฟล์และการรองรับ glob
  • การกรองตามเกณฑ์และการให้คะแนนความเกี่ยวข้อง
  • การเน้นผลลัพธ์แบบภาพ
  • การแยกวิเคราะห์ Tree-sitter สำหรับการแบ่งส่วนโค้ดอย่างชาญฉลาด
  • การดึงส่วนโค้ดที่สมบูรณ์
  • การอัปเดตดัชนีแบบเพิ่มหน่วย

การขยายการสนับสนุนภาษา

เครื่องมือนี้ปัจจุบันสนับสนุน Python , TypeScript , JavaScript และ Haskell ผ่านการรวม tree-sitter สำหรับการแบ่งโค้ดอย่างชาญฉลาด อย่างไรก็ตาม ชุมชนกำลังขอการสนับสนุนภาษาเพิ่มเติมอย่างแข็งขัน การสนับสนุน Ruby ได้ถูกเพิ่มแล้วตามคำขอของผู้ใช้ ในขณะที่การสนับสนุน Elixir เผชิญข้อจำกัดเนื่องจากปัญหาความเข้ากันได้ของ tree-sitter นักพัฒนายังได้ขอ Java , Clojure และภาษายอดนิยมอื่นๆ

การรองรับภาษาปัจจุบัน (v1.3+)

  • รองรับอย่างสมบูรณ์: Python , TypeScript , JavaScript , Haskell
  • เพิ่มเข้ามาเมื่อเร็วๆ นี้: Ruby
  • ได้รับการร้องขอ: Java , Elixir , Clojure
  • รองรับอย่างจำกัด: Elixir (ปัญหาความเข้ากันได้กับ tree-sitter )

การรวมกับเครื่องมือพัฒนา AI

แง่มุมที่น่าสนใจของการอภิปรายมุ่งเน้นไปที่ศักยภาพของเครื่องมือในการรวมกับผู้ช่วยเขียนโค้ด AI เช่น Claude Code ผู้สร้างออกแบบ ck โดยเฉพาะเพื่อแก้ไขข้อจำกัดที่พวกเขาสังเกตเห็นในวิธีที่เครื่องมือ AI ค้นหาโค้ดเบส โดยเฉพาะเมื่อมองหาแนวคิดมากกว่าชื่อฟังก์ชันเฉพาะ

เหตุผลที่ต้อง overload grep คือ agents เข้าใจ semantics ส่วนใหญ่แล้วและถูกเตรียมให้ใช้มัน ดังนั้นจึงเป็นการยกระดับเล็กน้อยเพื่อให้พวกเขาเรียก grep ที่ปรับแต่งแล้วพร้อม semantics เพิ่มเติมเล็กน้อย

เครื่องมือใช้ embeddings ในเครื่องด้วยโมเดล BAAI/bge-small-en-v1.5 เพื่อให้มั่นใจว่าโค้ดจะไม่ออกจากเครื่องของนักพัฒนา ซึ่งเป็นข้อพิจารณาด้านความเป็นส่วนตัวที่สำคัญสำหรับทีมหลายทีม

ข้อมูลจำเพาะทางเทคนิค

  • โมเดล Embedding: BAAI/bge-small-en-v1.5
  • ทางเลือกที่พิจารณา: Google's Gemma embedding
  • ความเป็นส่วนตัว: การประมวลผลในเครื่องอย่างสมบูรณ์
  • การจัดเก็บ Index: ไฟล์ .ck sidecar
  • วิธีการอัปเดต: การตรวจจับการเปลี่ยนแปลงแบบ Hash-based
  • รูปแบบผลลัพธ์: รองรับ JSON สำหรับ AI agents

สถาปัตยกรรมทางเทคนิคและการพัฒนาในอนาคต

เครื่องมือรักษาดัชนีโดยใช้การตรวจจับการเปลี่ยนแปลงแบบ hash-based เพื่อให้ embeddings ทันสมัยเมื่อโค้ดเปลี่ยนแปลง มันเสนอทั้งฟังก์ชันการทำงานแบบ grep แบบดั้งเดิมและการค้นหาแบบ semantic พร้อมแผนสำหรับโหมดไฮบริดที่สามารถรวมทั้งสองแนวทางเพื่อผลลัพธ์ที่ครอบคลุมมากขึ้น

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

อ้างอิง: ck-Semantic Grep by Embedding