เครื่องมือค้นหาโค้ดใหม่ที่เรียกว่า 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