Công cụ Tìm kiếm Code Ngữ nghĩa Mới Gặp Vấn đề Hiệu suất và Yêu cầu Tính năng từ Người dùng Đầu tiên

Nhóm Cộng đồng BigGo
Công cụ Tìm kiếm Code Ngữ nghĩa Mới Gặp Vấn đề Hiệu suất và Yêu cầu Tính năng từ Người dùng Đầu tiên

Một công cụ tìm kiếm code mới có tên ck hứa hẹn tìm kiếm code theo nghĩa thay vì từ khóa đang tạo ra tiếng vang trong cộng đồng lập trình viên, nhưng những người dùng đầu tiên đang gặp phải một số khó khăn trong giai đoạn phát triển. Công cụ này sử dụng công nghệ embedding để hiểu những gì các lập trình viên đang tìm kiếm, cho phép các tìm kiếm như xử lý lỗi để tìm các khối code liên quan ngay cả khi những thuật ngữ chính xác đó không có mặt.

Mối quan ngại về Hiệu suất và Sử dụng Tài nguyên

Một số người dùng đã báo cáo các vấn đề hiệu suất đáng kể khi thử nghiệm công cụ trên các dự án của họ. Nhiều lập trình viên đã trải nghiệm máy tính của họ trở thành máy sưởi không gian với quạt quay liên tục sau khi chạy tìm kiếm ngữ nghĩa chỉ trong một phút. Công cụ có vẻ khá tốn tài nguyên trong quá trình lập chỉ mục ban đầu và các hoạt động tìm kiếm, đặc biệt trên các codebase lớn hơn.

Đội ngũ phát triển đã phản hồi nhanh chóng với những vấn đề này, với các bản sửa lỗi đã được triển khai cho một số vấn đề. Một người dùng gặp phải sự cố liên quan đến xử lý emoji, điều này đã được giải quyết nhanh chóng trong phiên bản mới nhất.

Thiếu các Tính năng Thiết yếu

Một điểm đau lớn đối với người dùng là việc thiếu hỗ trợ gitignore , có nghĩa là công cụ cố gắng lập chỉ mục các tệp thường nên được loại trừ khỏi tìm kiếm code. Điều này góp phần vào các vấn đề hiệu suất và giải thích tại sao một số người dùng thấy hệ thống của họ gặp khó khăn dưới tải nặng. Đội ngũ phát triển đã thừa nhận hạn chế này và chỉ ra rằng hỗ trợ gitignore sẽ có sớm.

Tính năng chính

  • Giao diện CLI tương thích với Grep
  • Tích hợp FastEmbed với các mô hình BGE
  • Hỗ trợ mẫu loại trừ tệp và glob
  • Lọc ngưỡng và tính điểm mức độ liên quan
  • Làm nổi bật kết quả trực quan
  • Phân tích cú pháp Tree-sitter cho việc phân đoạn mã thông minh
  • Trích xuất phần mã hoàn chỉnh
  • Cập nhật chỉ mục tăng dần

Mở rộng Hỗ trợ Ngôn ngữ

Công cụ hiện tại hỗ trợ Python , TypeScript , JavaScript , và Haskell thông qua tích hợp tree-sitter để phân đoạn code thông minh. Tuy nhiên, cộng đồng đang tích cực yêu cầu hỗ trợ cho các ngôn ngữ bổ sung. Hỗ trợ Ruby đã được thêm vào sau yêu cầu của người dùng, trong khi hỗ trợ Elixir gặp hạn chế do các vấn đề tương thích tree-sitter . Các lập trình viên cũng đã yêu cầu Java , Clojure , và các ngôn ngữ phổ biến khác.

Hỗ trợ Ngôn ngữ Hiện tại (v1.3+)

  • Được Hỗ trợ Đầy đủ: Python , TypeScript , JavaScript , Haskell
  • Mới được Thêm vào: Ruby
  • Được Yêu cầu: Java , Elixir , Clojure
  • Hỗ trợ Hạn chế: Elixir (vấn đề tương thích với tree-sitter )

Tích hợp với Công cụ Phát triển AI

Một khía cạnh thú vị của cuộc thảo luận tập trung xung quanh tiềm năng tích hợp của công cụ với các trợ lý lập trình AI như Claude Code . Người tạo ra đã thiết kế ck đặc biệt để giải quyết các hạn chế họ quan sát thấy trong cách các công cụ AI tìm kiếm codebase, đặc biệt khi tìm kiếm các khái niệm thay vì tên hàm cụ thể.

Lý do để nạp chồng grep là các agent đã hiểu hầu hết ngữ nghĩa và được chuẩn bị để sử dụng nó, vì vậy chỉ cần một chút nỗ lực để khiến chúng gọi một grep được sửa đổi với một số ngữ nghĩa bổ sung nhỏ.

Công cụ sử dụng embedding cục bộ với mô hình BAAI/bge-small-en-v1.5 , đảm bảo rằng code không bao giờ rời khỏi máy của lập trình viên - một cân nhắc quyền riêng tư quan trọng đối với nhiều đội ngũ.

Thông số kỹ thuật

  • Mô hình Embedding: BAAI/bge-small-en-v1.5
  • Lựa chọn thay thế được xem xét: Embedding của Google Gemma
  • Quyền riêng tư: Xử lý hoàn toàn cục bộ
  • Lưu trữ chỉ mục: Các tệp sidecar .ck
  • Phương pháp cập nhật: Phát hiện thay đổi dựa trên hash
  • Định dạng đầu ra: Hỗ trợ JSON cho các AI agent

Kiến trúc Kỹ thuật và Phát triển Tương lai

Công cụ duy trì một chỉ mục sử dụng phát hiện thay đổi dựa trên hash để giữ cho embedding cập nhật khi code thay đổi. Nó cung cấp cả chức năng grep truyền thống và tìm kiếm ngữ nghĩa, với kế hoạch cho các chế độ hybrid có thể kết hợp cả hai phương pháp để có kết quả toàn diện hơn.

Trong khi khái niệm đã tạo ra sự nhiệt tình trong các lập trình viên làm việc với các codebase lớn, được tài liệu hóa kém, các vấn đề hiệu suất hiện tại và các tính năng còn thiếu cho thấy công cụ vẫn đang trong giai đoạn phát triển sớm. Sự tham gia tích cực của cộng đồng và đội ngũ phát triển phản hồi nhanh chóng cho thấy những hạn chế này có thể được giải quyết tương đối nhanh chóng.

Tham khảo: ck-Semantic Grep by Embedding