4 điểm bởi GN⁺ 2025-02-15 | 2 bình luận | Chia sẻ qua WhatsApp
  • Zed là một trình soạn thảo được thiết kế cho tốc độ và luôn hướng tới trải nghiệm chỉnh sửa instant
  • Để còn nhanh hơn cả instant, Zed áp dụng cách tiếp cận “dự đoán thao tác chỉnh sửa tiếp theo” của người dùng
  • Vì vậy, Zed đã công bố tính năng edit prediction mới, hoạt động dựa trên mô hình mã nguồn mở có tên Zeta
  • Trong lúc sử dụng, có thể nhấn phím tab để áp dụng ngay phần chỉnh sửa được dự đoán, đồng thời cũng có thể thực hiện liên tiếp nhiều chỉnh sửa tiếp theo
  • Đây là tính năng được yêu cầu rất nhiều và được phát triển để hòa hợp tự nhiên nhất có thể với môi trường chỉnh sửa của Zed
  • Hiện trong giai đoạn beta công khai, chỉ cần tải Zed và đăng nhập bằng tài khoản GitHub là có thể dùng Zeta miễn phí
  • Tuy vậy, edit prediction có thể sẽ không còn miễn phí trong tương lai, nhưng hiện tại đang được mở để cùng thử nghiệm và học hỏi

Tích hợp một cách cân nhắc

  • Sau khi thêm tính năng edit prediction, phím tab trở nên mạnh mẽ hơn
  • Nhưng điều này có thể xung đột với cách dùng hiện có như thụt lề bằng tab hoặc xem các đề xuất do language server (LS) cung cấp
  • Nếu đang hiển thị gợi ý mã từ language server, cần nhấn phím option/alt thì bản xem trước chỉnh sửa dự đoán mới hiện ra
  • Trên macOS, có thể dùng tab để xác nhận chỉnh sửa dự đoán, và khi nhả option thì màn hình gợi ý gốc của language server sẽ quay lại
  • Trên Linux, vì alt-tab thường được window manager giữ làm phím tắt hệ thống nên mặc định Zed cung cấp alt-l
  • Nếu trong môi trường Linux không có xung đột với alt-tab thì vẫn có thể dùng như vậy

Giới thiệu Zeta: mô hình mã nguồn mở dự đoán chỉnh sửa của Zed

  • Zeta là mô hình mã nguồn mở được phát triển dựa trên Qwen2.5-Coder-7B
  • Bộ dữ liệu mở (liên kết) cũng đang được công bố
  • Nếu bạn làm việc trong các kho mã nguồn mở, Zed hy vọng bạn sẽ đóng góp cho bộ dữ liệu để cải thiện Zeta
  • Ban đầu, dữ liệu sẽ được đưa vào sau khi trải qua quá trình rà soát an toàn và quyền riêng tư
  • Mục tiêu là cùng nhau biến edit prediction thành một tính năng tốt hơn trên diện rộng
  • Liên kết video: How Zed’s Open-Source Edit Predictions Work

Chỉnh sửa bằng cách viết lại

  • Phần lớn các mô hình coding được huấn luyện theo cách “fill in the middle”
  • Cấu trúc là đưa vào prefix và suffix, rồi để mô hình sinh ra phần ở giữa
  • Trong khi đó, Zeta cần dự đoán chỉnh sửa tại vị trí bất kỳ nên đây là bài toán không khớp với cấu trúc cũ
  • Nhóm chú ý đến việc mô hình giỏi viết lại những khối mã tương đối lớn hơn là các thay đổi cực nhỏ
  • Vì vậy, họ chọn cách đưa vào lịch sử chỉnh sửa gần đây và vị trí con trỏ, rồi viết lại đoạn mã tương ứng

Đánh giá dự đoán

  • Kết quả từ các mô hình ngôn ngữ lớn có thể không giống nhau ở mỗi lần chạy, nên việc kiểm thử có điểm khó
  • Có thể kiểm soát phần nào biến động bằng cách đặt temperature về 0 hoặc chỉ định seed cho RNG
  • Nhưng với code thì có thể tồn tại nhiều đáp án đúng, nên dù kết quả khác đáp án kỳ vọng vẫn có thể là đúng
  • Vì các unit test truyền thống khó áp dụng, nhóm đã thử dùng một LLM lớn hơn để kiểm tra đầu ra của Zeta bằng ngôn ngữ tự nhiên
  • Ví dụ, với yêu cầu như “có gọi đệ quy hàm quicksort cho mảng bên trái và bên phải hay không”, họ để Claude đánh giá xem kết quả có phù hợp với ý định hay không

Prompt Engineering

  • Ban đầu, nhóm dùng mô hình Qwen2.5-Coder-32B để xây dựng prompt chỉ dẫn rõ ràng cần dự đoán kiểu chỉnh sửa nào
  • Một vài bài test (eval) đầu tiên đã qua, nhưng khi số lượng test tăng lên thì việc chỉ sửa prompt không còn đủ để cho ra kết quả nhất quán
  • Mô hình 32b cũng có độ trễ phản hồi lớn, nên không đáp ứng được tiêu chuẩn hiệu năng nghiêm ngặt của Zed

Supervised Fine-Tuning

  • Sau khi thử nhiều hướng tiếp cận, nhóm chuyển sang supervised fine-tuning bằng Unsloth và LoRA
  • Mục tiêu là dạy mô hình suy ra thay đổi người dùng muốn từ lịch sử chỉnh sửa gần đây, đồng thời viết tốt đoạn mã mà không chèn sai lệch
  • Tuy nhiên ban đầu thiếu dữ liệu người dùng thực tế, nên họ tạo khoảng 50 ví dụ tổng hợp bằng Claude và thêm vào bộ dữ liệu
  • Sau đó, một phiên bản đầu tiên được triển khai trong Zed dưới dạng feature flag để đội ngũ nội bộ tạo ra các ví dụ sử dụng thực tế và mở rộng bộ dữ liệu
  • Với khoảng 400 ví dụ, độ chính xác của mô hình được cải thiện, nhưng vẫn còn vấn đề mô hình thực hiện các thay đổi không cần thiết khi chỉ chỉnh sửa một phần của tệp

Direct Preference Optimization

  • Để giải quyết vấn đề này, nhóm đưa vào kỹ thuật DPO (Direct Preference Optimization)
  • Không chỉ cho mô hình thấy “ví dụ tốt”, họ còn nêu rõ “ví dụ cần tránh” để mô hình học cách phân biệt các chỉnh sửa không phù hợp
  • Chỉ với khoảng 150 ví dụ được chọn lọc cẩn thận, hành vi của mô hình đã cải thiện đáng kể trong các trường hợp khó
  • Nhóm kỳ vọng có thể tiếp tục cải thiện thêm nếu thu thập được nhiều ví dụ đa dạng hơn

Giảm độ trễ: Speculative Decoding

  • Cũng như mọi tính năng của Zed, việc giảm tối đa độ trễ trong edit prediction là yếu tố cốt lõi
  • Mục tiêu là p50 dưới 200ms và p90 dưới 500ms
  • Vì phải sinh ra nhiều token để viết lại một phần mã, cách này có thể chậm hơn phương pháp fill-in-the-middle thông thường
  • Tuy nhiên, nhóm tận dụng việc trong quá trình rewrite có rất nhiều phần giống với mã gốc để áp dụng kỹ thuật speculative decoding
  • Chiến lược là tham chiếu đầu vào và dùng tìm kiếm n-gram để sinh token song song, từ đó tăng tốc mà không làm giảm chất lượng

Giảm độ trễ: Serving mô hình

  • Ngoài tốc độ suy luận của mô hình, cách serving mô hình trong môi trường máy chủ cũng là một thách thức lớn
  • Đây là bài toán đòi hỏi lượng tính toán lớn nhất mà đội ngũ từng xử lý đến nay
  • Ở thời điểm ra mắt, sau một quá trình đánh giá ngắn, họ chọn Baseten
  • Các kỹ sư của Baseten đã tối ưu hóa mô hình Zeta và giúp đạt được các mục tiêu độ trễ mong muốn
  • Thời gian truyền qua mạng cũng là yếu tố quan trọng, nên họ đặt GPU tại Mỹ và châu Âu để xử lý yêu cầu ở vị trí gần người dùng hơn về mặt địa lý
  • Thông qua Cloudflare Workers, các yêu cầu được chuyển tiếp từ trung tâm dữ liệu gần người dùng

Kết luận

  • Trong thời gian tới, nhóm dự định khám phá nhiều hướng khác nhau để làm edit prediction mạnh hơn nữa
  • Kế hoạch là tăng lượng ngữ cảnh mô hình nhận được, tiếp tục fine-tuning bổ sung và mở rộng bộ dữ liệu Zeta để cải thiện dần
  • Kể từ khi ra mắt Zed AI vào mùa thu năm ngoái, họ đã học được rất nhiều điều
  • Trong bối cảnh thế giới thay đổi nhanh chóng, nhóm vẫn tiếp tục thử nghiệm và xây dựng các tính năng mà người dùng có thể yêu thích
  • Họ cũng muốn phát triển AI theo đúng tinh thần mã nguồn mở mà Zed luôn theo đuổi
  • Dù là người dùng, người đóng góp hay thành viên nhóm, họ hy vọng ai cũng có thể cùng tham gia để mở ra một tương lai tốt đẹp hơn

2 bình luận

 
GN⁺ 2025-02-15
Ý kiến trên Hacker News
  • Tính năng chỉnh sửa dự đoán của Zed hiện đang miễn phí, nhưng sau này có thể sẽ thu phí. Người dùng sẽ quyết định có tích hợp vào quy trình làm việc hay không khi giá được công bố. Muốn có bản dùng thử miễn phí, nhưng nếu giá cao thì sẽ không dùng
    • Zed chỉ có thể chạy một LSP cho mỗi loại tệp. Rust và C++ hoạt động tốt, nhưng Angular thì không
    • Tính năng chỉnh sửa từ xa không hoạt động trên Windows. Để dùng tính năng này trên Windows cần có hỗ trợ SSH
  • Tính năng dự đoán đang bị lạm dụng quá mức. Người dùng cảm thấy tính năng dự đoán gây phiền và làm gián đoạn luồng làm việc của mình
    • Nếu tính năng dự đoán được dùng quá nhiều thì ngược lại sẽ không còn hữu ích. Thuật toán không thể đọc được suy nghĩ của con người, nên không được cản trở công việc của người dùng
  • Không muốn mã nguồn bị gửi tới bên thứ ba. Đặc biệt khi chỉnh sửa các tệp bí mật, khóa riêng tư hoặc API key có thể bị gửi đi
    • Mong có tùy chọn chạy cục bộ
  • Thích cách Zed quảng bá tính năng mới. Nó được hiển thị bằng banner ở góc trên bên trái và không làm gián đoạn công việc của người dùng
    • Không ép người dùng phải xem tính năng mới như nhiều phần mềm khác
  • Zed cố gắng tự động hoàn thành chú thích. Người dùng không muốn tự động hoàn thành trong phần chú thích, và đã có thêm tùy chọn để tắt việc này
  • Giao diện chấp nhận đề xuất của Copilot khá bất tiện. Khi dùng phím Tab thì xuất hiện quá nhiều đề xuất AI không mong muốn
  • Ưu tiên sự ổn định trong trình soạn thảo văn bản. Nếu có quá nhiều tính năng liên quan đến AI thì ngược lại càng bất tiện
    • Dùng thử Zed thấy khá tốt
  • Intellisense hiện đại đã cung cấp tính năng dự đoán ở mức phù hợp. Dự đoán bằng AI đang bị lạm dụng quá mức
    • Sẽ hữu ích nếu AI đưa ra gợi ý về cấu trúc và mẫu chương trình. Chương trình càng lớn thì càng khó cấu trúc
  • Có thể định nghĩa tệp mô hình để dùng các tính năng của Zed ở chế độ cục bộ. Nhưng chưa rõ liệu Zed có thể thay đổi endpoint của tính năng này hay không