4 điểm bởi GN⁺ 2025-01-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tabby là một trợ lý lập trình AI tự lưu trữ, được cung cấp như giải pháp thay thế mã nguồn mở và on-premises cho GitHub Copilot, hướng tới mô hình vận hành không cần dịch vụ đám mây
  • Máy chủ nhấn mạnh cấu hình tự đóng gói, không cần DBMS hay dịch vụ đám mây, đồng thời được thiết kế với giao diện OpenAPI để dễ tích hợp với hạ tầng hiện có như Cloud IDE
  • Môi trường chạy hỗ trợ GPU cấp độ người dùng phổ thông, và có thể khởi chạy máy chủ bằng một lệnh Docker duy nhất với mô hình mã StarCoder-1B và mô hình chat Qwen2-1.5B-Instruct
  • Các bản cập nhật gần đây gồm v0.30 hỗ trợ lập chỉ mục GitLab Merge Request làm ngữ cảnh, v0.29 cho phép thêm tài liệu riêng qua REST API, và v0.28 chuyển thông điệp Answer Engine thành Pages có thể chia sẻ
  • Có sẵn tài liệu về tiện ích mở rộng IDE/Editor, cài đặt, cấu hình và hướng dẫn đóng góp; nếu chuẩn bị môi trường Rust và một số phụ thuộc, có thể tự build trực tiếp bằng cargo build

Vai trò và đặc điểm cơ bản của Tabby

  • Tabby là một trợ lý lập trình AI tự lưu trữ, là giải pháp thay thế mã nguồn mở và on-premises cho GitHub Copilot
  • Có thể tóm tắt các đặc điểm chính thành ba điểm
    • Vì là tự đóng gói, nên không cần DBMS hay dịch vụ đám mây
    • Cung cấp giao diện OpenAPI, giúp dễ tích hợp với hạ tầng hiện có như Cloud IDE
    • Hỗ trợ GPU cấp độ người dùng phổ thông
  • Dự án cung cấp các liên kết tới tài liệu, Slack, và lộ trình
  • Có thể mở bản demo trực tiếp trên website Tabby

Các thay đổi gần đây

  • 2025-12-12: Có vscode@0.20.0, cho phép liên kết GitHub issue với tác vụ Pochi để triển khai, đồng thời tạo PR từ sidebar cùng với phân tích kết quả CI/Lint/Test
  • 2025-07-02: v0.30 hỗ trợ lập chỉ mục GitLab Merge Request làm ngữ cảnh
  • 2025-05-25: Có thông báo tham gia hàng chờ private preview của Agent
  • 2025-05-20: Trong v0.29, có thể thêm tài liệu riêng vào Tabby thông qua REST API
  • 2025-05-01: v0.28 chuyển thông điệp Answer Engine thành Pages bền vững và có thể chia sẻ
  • 2025-03-31: v0.27 làm phong phú hơn menu @ trong panel chat bên cạnh

Phạm vi tính năng thể hiện qua các bản cập nhật trước

  • Answer Engine được giới thiệu từ v0.13.0 như một công cụ tri thức trung tâm cho các nhóm kỹ thuật nội bộ, cung cấp câu trả lời bằng cách tích hợp với dữ liệu nội bộ của đội phát triển
  • Tabby đã liên tục bổ sung các tính năng tích hợp và cấu hình như GitLab SSO, GitHub/GitLab tự lưu trữ, tích hợp HTTP API, và repo-context trong Code Browser
  • Luồng plugin IDE bao gồm các bản cập nhật cho VSCode/Vim/IntelliJ, panel chat bên cạnh trong VSCode, chỉnh sửa thông qua lệnh chat, nhiều lựa chọn cho inline completion, và thông điệp commit tự sinh
  • Hoàn thành mã sử dụng snippet liên quan cục bộ như khai báo LSP cục bộ và mã vừa được chỉnh sửa gần đây; trong v0.3.0, hoàn thành mã dựa trên RAG đã được bật mặc định
  • Về hỗ trợ mô hình, dự án đề cập đến CodeGemma, CodeQwen, Codestral, hỗ trợ thử nghiệm CodeLlama 7B, và hỗ trợ suy luận Metal trên Apple M1/M2

Cách bắt đầu và ví dụ chạy

docker run -it \
  --gpus all -p 8080:8080 -v $HOME/.tabby:/data \
  tabbyml/tabby \
  serve --model StarCoder-1B --device cuda --chat-model Qwen2-1.5B-Instruct
  • Các tùy chọn bổ sung gồm những thiết lập như loại suy luận và mức độ song song, có thể xem trong trang tài liệu riêng

Đóng góp và build

  • Hướng dẫn đóng góp đầy đủ có tại CONTRIBUTING.md
  • Mã nguồn được clone cùng cả submodule
git clone --recurse-submodules https://github.com/TabbyML/tabby
cd tabby
  • Nếu đã clone sẵn repository, có thể lấy toàn bộ submodule bằng lệnh git submodule update --recursive --init
  • Các bước chuẩn bị trước khi build như sau
    • Thiết lập môi trường Rust
    • macOS: brew install protobuf
    • Ubuntu/Debian: apt install protobuf-compiler libopenblas-dev
    • Công cụ hữu ích trên Ubuntu: apt install make sqlite3 graphviz
  • Sau khi chuẩn bị xong, có thể build Tabby bằng cargo build
  • Quy trình đóng góp tiếp tục bằng việc gửi Pull Request sau khi hoàn tất thay đổi

1 bình luận

 
GN⁺ 2025-01-13
Các ý kiến trên Hacker News
  • Demo hoàn thiện hàm findMaxElement trên trang chủ có vẻ là một ví dụ cho thấy diện mạo sắp tới, hoặc có lẽ đã phản ánh khá đúng tình trạng hiện tại
    6 dòng Python được đề xuất cho hàm đó có thể thay bằng đúng return max(arr), và dù nó chạy được, đó hoàn toàn là mã ở trình độ junior
    Bản thân thứ mã kinh khủng như vậy đã đáng sợ, nhưng còn lo hơn là những người mù quáng tự động hoàn thành nó có thể sẽ ngừng phát triển kỹ năng
    Có thể kiếm được story point, nhưng liệu có thật sự tiến bộ hơn với tư cách lập trình viên hay không thì là điều đáng nghi

    • Tôi nghĩ đây là vấn đề sẽ tự điều chỉnh. Mã có chất lượng như vậy không thể đưa ra sản phẩm, và cuối cùng để vượt qua kiểm thử thì vẫn phải hiểu 20–30% chi tiết cuối cùng mà LLM không làm được
      Nhưng để hiểu 20% đó thì cũng phải hiểu cả 80% mà LLM đã xử lý, nên tôi không quá lo, xét ở điểm LLM không thể thay mình triển khai đến tận production
    • Ngược lại, đây cũng có thể trở thành tầng trừu tượng tiếp theo
      Giống như mã máy → assembly → C → Python → LLM (ngôn ngữ tự nhiên), tức là biên dịch prompt của con người thành mã trung gian như Python
      Các phiên bản đầu của CPython hẳn cũng không hoàn hảo, và các kỹ sư chắc cũng từng bất an. Nếu may mắn, “trình biên dịch” mới này cũng sẽ ngày càng tốt hơn và hiệu quả hơn, nhưng sẽ không hoàn hảo
      Dù vậy, có thể chúng ta sẽ phải trả một cái giá tương tự như cái giá con người đã chấp nhận để không phải trực tiếp xử lý assembly
    • Khi nhận gợi ý từ Cursor, gần như lần nào cũng hỏi tiếp “có cách nào tốt hơn không?” là một thói quen bị đánh giá thấp
    • Trước đây ta còn biết điều gì đó. Sau khi Google xuất hiện thì chỉ cần tra cứu, nhưng dù sao vẫn có thể tự làm
      Giờ có AI, ta bắt đầu hỏi nó làm hộ, và rốt cuộc chẳng còn biết gì cũng chẳng còn làm được gì
    • Ví dụ đó có vẻ cho thấy nhiều hơn về phán đoán của công ty khi chọn đoạn mã ấy làm demo trên trang chủ
  • Tôi không ngờ dự án của chúng tôi lại lên trang nhất HN vào Chủ nhật
    Tabby đã phát triển rất nhiều kể từ khi ra mắt 2 năm trước https://www.tabbyml.com, và hiện đã trở thành một nền tảng AI cho lập trình viên toàn diện với hoàn thành mã và chat với codebase
    Cho nhu cầu nhóm/doanh nghiệp, nó cũng hỗ trợ SSO, kiểm soát truy cập và xác thực người dùng https://demo.tabbyml.com/search/how-to-add-an-embedding-api-...
    Những người dùng đã triển khai nhận thấy Tabby là nền tảng duy nhất trong mô hình cung cấp on-premises có onboarding self-service hoàn chỉnh; hiệu năng cũng có thể sánh với các lựa chọn khác trên thị trường, nên nếu tò mò thì khuyên bạn nên thử
    https://www.reddit.com/r/LocalLLaMA/s/lznmkWJhAZ
    https://www.linkedin.com/posts/kelvinmu_last-week-i-introduc...

    • Không biết có plugin cho MSVC không
    • Chỉ tương thích với Nvidia và Apple thôi à? Không biết có chạy được trên GPU AMD không
  • Từ góc độ một người không rành AI chạy local nhưng muốn dùng thử, tôi tò mò “run tabby in 1 minute” https://github.com/TabbyML/tabby#run-tabby-in-1-minute ở mức nào nếu so, chẳng hạn, với bản miễn phí ChatGPT 4o-mini
    Tôi muốn biết nếu chạy lệnh Docker dưới đây trên một chiếc MacBook Pro cấu hình trung bình thì có thể dùng một AI có tốc độ và năng lực tương tự không, hay hiện vẫn chưa đạt đến mức đó
    docker run -it --gpus all -p 8080:8080 -v $HOME/.tabby:/data tabbyml/tabby serve --model StarCoder-1B --device cuda --chat-model Qwen2-1.5B-Instruct
    Xem ra có một trang hướng dẫn riêng cho MacBook và có thêm ngữ cảnh https://tabby.tabbyml.com/docs/quick-start/installation/appl...
    Trong đó viết rằng “năng lực tính toán của M1/M2 có giới hạn nên có thể đủ cho sử dụng cá nhân, nhưng nếu cần một instance dùng chung cho nhóm thì hãy cân nhắc hosting Docker dựa trên CUDA hoặc ROCm”

    • gpt-4o-mini có thể không phải thước đo tốt nhất để đánh giá một LLM tốt có thể làm gì với code: https://aider.chat/docs/leaderboards/#aider-polyglot-benchma...
      Các mô hình rất nhỏ như 1.5B khá ngốc nên không phù hợp để sinh code theo kiểu đối thoại, nhưng ngay cả các mô hình dưới 3B cũng có thể làm khá tốt việc gợi ý hoàn thành bằng phím Tab
      Cũng có các mô hình “mở” lớn hơn có thể chạy local, và các mô hình trong khoảng 32B–70B có thể tốt hơn gpt-4o-mini rất nhiều ở hầu hết mọi mặt, bao gồm cả viết code. Ví dụ llama3.3-70b-instructqwen2.5-coder-32b-instruct khá ổn
      Nếu thật sự thiếu RAM, qwen2.5-coder-7b-instruct hoặc codegemma-7b-it cũng có thể dùng được cho các tác vụ đơn giản
      Chỉ nói “MacBook Pro cấu hình trung bình” là chưa đủ; điều quan trọng là có bao nhiêu RAM. Theo kinh nghiệm, cần khoảng 1GB RAM cho mỗi 1B tham số
      Nếu lượng tử hóa mạnh thì khoảng 500MB, còn mô hình không lượng tử hóa thì khoảng 2GB, nhưng lượng tử hóa 8-bit thường vào khoảng 1GB và nhìn chung ổn
    • Câu hỏi phụ: các mô hình nguồn mở có xu hướng kém “thông minh” hơn mô hình đóng, nên tôi tò mò liệu có kế hoạch bù đắp bằng cách cung cấp ngữ cảnh tốt hơn, chẳng hạn truy vấn tài liệu kỹ thuật liên quan rồi đưa vào ngữ cảnh hay không
  • “Nút bật/tắt telemetry của IDE / extension” không tắt được trong Community Edition. Tôi tò mò dữ liệu đo từ xa này bao gồm những gì

    • Thông tin trạng thái được thu thập đại khái có cấu trúc như sau
      struct HealthState {
      model: String,
      chat_model: Option,
      device: String,
      arch: String,
      cpu_info: String,
      cpu_count: usize,
      cuda_devices: Vec,
      version: Version,
      webserver: Option,
      }
      https://tabby.tabbyml.com/docs/administration/usage-collecti...
  • Tôi đang dùng Continue.dev và ollama cho mục đích tương tự, nên lúc nào cũng vui khi thấy có thêm công cụ trong lĩnh vực này
    Tuy nhiên, như thường lệ, để chạy một mô hình thực sự tốt, chẳng hạn Qwen2.5-coder 32B, thì cần phần cứng khá mạnh

  • Các ví dụ đều là những đoạn mã vốn thường có thể tìm thấy trong thư viện, và chất lượng của một số đoạn mã cũng đáng nghi
    Có phải LLM sẽ trở thành bot spam cho codebase không?

  • Theo phần “cách tận dụng nhiều GPU NVIDIA”, Tabby chỉ hỗ trợ một GPU duy nhất; nếu muốn dùng nhiều GPU thì cần chạy nhiều instance Tabby rồi thiết lập CUDA_VISIBLE_DEVICES cho CUDA, hoặc HIP_VISIBLE_DEVICES cho ROCm
    Vậy tôi thắc mắc liệu việc dùng 2 GPU nối với nhau bằng NVLink để inference có không được hỗ trợ hay không, hay đây là một trường hợp khác vì NVLink khiến hai GPU được xử lý như một GPU

  • Dự án rất hay. Tôi đặc biệt thích ý tưởng không phải gửi dữ liệu cho các công ty lớn rồi phải tin vào điều khoản của họ
    Hiệu quả của trợ lý lập trình tỷ lệ trực tiếp với độ dài context, trong khi các mô hình mở có thể chạy trên máy cá nhân thường nhỏ hơn rất nhiều
    Sẽ tốt nếu có dữ liệu định lượng cho thấy nó hữu ích đến mức nào trên các codebase phức tạp hơn

    • Tôi hy vọng trợ lý lập trình 100% local sẽ trở nên phổ biến, nhưng hiện tại khuyến nghị “hoạt động tốt nhất trên GPU $10K+” là rào cản, nên rốt cuộc vẫn phải dùng các công ty lớn
  • Tôi tò mò về phần cứng khuyến nghị. Có cần GPU không? Liệu có thể chạy ổn trên Ryzen APU cũ (Zen 3 và đồ họa Vega 7) không?

    • Nút thắt cổ chai phổ biến của LLM tự host là băng thông bộ nhớ
      Có đồ họa tích hợp hay không cũng không khác biệt nhiều; nếu chỉ chạy bằng CPU thì mô hình vẫn sẽ chạy rất chậm như nhau
      Lý do Mac chạy LLM tương đối ổn là vì băng thông bộ nhớ của Apple Silicon cao một cách khác thường, nhưng vẫn còn kém xa tốc độ của GPU cao cấp với VRAM rất nhanh
      Nếu là mô hình rất nhỏ dùng cho gợi ý hoàn thành khi nhấn tab thì CPU AMD cũ có lẽ vẫn xử lý được khá ổn
    • Có thể xem ví dụ cấu hình local với 3090 tại https://www.reddit.com/r/LocalLLaMA/s/lznmkWJhAZ
  • Rất tuyệt. Đặc biệt vui vì có client Eclipse https://github.com/TabbyML/tabby/tree/3bd73a8c59a1c21312e812...
    Tuy nhiên, phải lục khá kỹ mới tìm được thông tin về client Eclipse. Nó không có trong README chính, cũng không có trong danh sách extension IDE của tài liệu
    Không rõ đây chỉ là thiếu sót, hay là nó vẫn chưa sẵn sàng để “công bố chính thức”