7 điểm bởi GN⁺ 2024-01-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • Emacs Copilot tạo Code Completion trong buffer Emacs bằng cách sử dụng LLM (Large Language Model) chạy cục bộ
  • LLM chạy dưới dạng một lệnh phụ có khả năng ghi nhớ lịch sử chỉnh sửa cục bộ theo từng tệp, và có thể dừng LLM bất cứ lúc nào bằng C-g
  • Khi xóa mã, phần lịch sử tương ứng trong ngữ cảnh của LLM cũng có thể bị xóa; ngôn ngữ lập trình được xác định theo phần mở rộng tệp, không phụ thuộc vào ngôn ngữ

Mô hình WizardCoder 34b

  • WizardCoder 34b là một LLM xuất sắc, đạt điểm HumanEval tương đương GPT-4.
  • Để sử dụng mô hình này, cần một máy tính mạnh như Mac Studio M2 Ultra; người dùng Macbook Pro có thể cân nhắc phiên bản Q3, còn người dùng PC thông thường có thể cân nhắc mô hình WizardCoder-Python-13b.
  • Người dùng có năng lực tính toán thấp hơn, như Raspberry Pi, có thể sử dụng mô hình Phi-2.

Cách bắt đầu

  • Viết dòng đầu tiên của hàm, sau đó nhấn C-c C-k để chuyển quyền điều khiển cho LLM, khi đó nó sẽ tạo phần triển khai còn lại của hàm.
  • LLM được tinh chỉnh để dừng lại khi hàm hoàn tất, đồng thời tránh tạo phần giải thích hay chú thích ELI5 (giải thích thật dễ hiểu).

Triển khai tham chiếu

  • Sau khi tải LLM, chỉ cần sao chép đoạn mã bên dưới vào buffer Emacs và chạy M-x eval-buffer.
  • Bạn có thể điều chỉnh mã theo sở thích cá nhân.

Liên kết tải Emacs

  • Nếu chưa cài Emacs hoặc đang dùng nền tảng khó cài đặt như Windows, có cung cấp liên kết đến bản dựng Emacs dạng một tệp thực thi duy nhất, có thể chạy mà không cần cài đặt.

Liên kết tải LLM

  • Có cung cấp liên kết để tải miễn phí một số LLM được biết là hoạt động tốt với Emacs Copilot.
  • Có thể chọn kích thước mô hình phù hợp với phần cứng của bạn.

Tệp bộ nhớ đệm

  • Nếu bạn quyết định đổi mô hình, cần xóa tất cả các tệp FILE.cache được tạo trong hệ thống tệp cục bộ.

Lưu ý

  • Trên macOS dùng Apple Silicon, cần cài đặt Xcode.
  • Nếu dùng zsh, có thể cần chạy bằng sh -c ./llamafile.
  • Trên một số hệ thống Linux, có thể phát sinh lỗi liên quan đến việc đăng ký binfmt_misc.

OS và CPU được hỗ trợ

  • llamafile hỗ trợ nhiều hệ điều hành với yêu cầu cài đặt tối thiểu.
  • llamafile hỗ trợ các CPU cụ thể, yêu cầu vi xử lý AMD64 với tập lệnh SSSE3 trở lên hoặc vi xử lý ARM64 với ARMv8a+.

Ghi chú về mô hình

  • Các ví dụ llamafile được cung cấp ở trên không nên được hiểu là Mozilla ủng hộ hay khuyến nghị bất kỳ mô hình, giấy phép hoặc bộ dữ liệu cụ thể nào.

Ý kiến của GN⁺

  • Trải nghiệm biên tập mang tính đổi mới: Emacs Copilot mang đến cho lập trình viên một cấp độ hỗ trợ lập trình mới, với tiềm năng cải thiện mạnh mẽ hiệu quả và năng suất.
  • Khả năng tiếp cận và tùy biến: Người dùng có thể chọn LLM và điều chỉnh môi trường Emacs theo nhu cầu, sở thích của mình, từ đó xây dựng môi trường phát triển mang tính cá nhân hóa.
  • Tính tương thích kỹ thuật: Nhờ hỗ trợ nhiều hệ điều hành và CPU, Emacs Copilot có thể được sử dụng bởi nhiều đối tượng hơn, qua đó tăng tính bao trùm và khả năng tiếp cận trong cộng đồng lập trình viên.

1 bình luận

 
GN⁺ 2024-01-01
Ý kiến trên Hacker News
  • Hoài nghi về tính hữu ích của việc tích hợp LLM/IDE

    Không chắc việc tích hợp LLM/IDE có thực sự mang lại mức tăng năng suất lớn trong các công việc lập trình thông thường hay không. Năng suất trung bình của lập trình viên vào khoảng 100 LOC mỗi ngày, nhưng khi làm prototype thì có thể dễ dàng viết hơn 1000 LOC mỗi ngày. Sự khác biệt về năng suất giữa mã production chất lượng cao và kiểu hack/prototyping là do yếu tố chất lượng, và đa số lập trình viên giỏi có thể tự viết ra mã có chất lượng tốt hơn mã do LLM tạo ra hoặc sao chép từ nguồn khác. Thời gian cần để phân tích mã, kiểm tra lỗ hổng, và xác nhận xem thiết kế có phù hợp cho việc bảo trì trong tương lai hay không có vẻ sẽ bù trừ lợi ích thời gian đạt được từ việc không tự viết mã. Dùng LLM để học tập hoặc viết mã dùng một lần, nơi chất lượng không quá quan trọng, có thể hữu ích; nhưng với mã production, tôi nghĩ vẫn còn một chặng đường dài trước khi đầu ra của LLM đạt tới trình độ của lập trình viên và không cần phải rà soát/chỉnh sửa kỹ lưỡng.

  • Cảm ơn việc phát triển công cụ LLM tự host

    Xin cảm ơn Justine vì đã phát triển công cụ LLM tự host. Llamafiles nên trở thành tiêu chuẩn. Không rõ có cách nào để kết nối tới một LLM từ xa được host trong cùng LAN hay không; tôi không dùng thiết bị Apple nhưng có một máy mạnh trên mạng và muốn tận dụng nó. Không biết Llamafile có thể cung cấp API hay không; chuyện này có vẻ đi vào phạm vi của LSP, và sẽ rất tốt nếu có thể tận dụng Llamafiles.

  • Chia sẻ trải nghiệm tích hợp LLM với Emacs

    Tôi dùng Emacs cho hầu hết công việc lập trình và viết tài liệu kỹ thuật. Tôi đang chạy phind-v2-codellama, openhermes, ollama, gptel, và Copilot của GitHub. Tôi thích khả năng gửi một vùng bất kỳ tới LLM để yêu cầu. UX vẫn còn ở giai đoạn đầu, nhưng hãy tưởng tượng nếu mô hình nền tảng có thể nhận toàn bộ ngữ cảnh (ví dụ: file orgmode và các buffer file đang mở) và có thể sử dụng các công cụ như LSP.

  • Trải nghiệm chạy LLM trên MacBook Pro M1 Max

    Tôi đang dùng MacBook Pro M1 Max, RAM 64GB, và đã tải mô hình 34B Q55 (mô hình lớn), xác nhận là nó chạy tốt. Tốc độ chậm nhưng vẫn dùng được. Tôi đang chạy nó trên phân vùng Asahi Fedora Linux, và không rõ GPU được tận dụng như thế nào. Tôi đã thiết lập môi trường bằng ZSH 5.9; nếu gọi trực tiếp LLM qua SUDO thì nó nạp nhanh thành một web server và có thể tương tác qua trình duyệt web tại localhost:8080. Nhưng khi cố chạy LLM từ Emacs thì gặp lỗi "Doing vfork: Exec format error.". Làm theo demo trong Readme, sau khi nhập phần đầu của hàm isPrime rồi gõ C-c C-k thì lỗi này xuất hiện. Hỏi liệu ai có ý tưởng gì về việc đã xảy ra sai sót ở đâu.

  • Chỉ trích hàm is_prime trong video demo

    Hàm is_prime được trình bày trong video demo là rất tệ. Dù đầu vào không chia hết cho 2, nó vẫn tiếp tục kiểm tra modulo với 4, 6, 8, v.v., điều này hoàn toàn vô nghĩa. Chỉ cần thêm một dòng mã (kiểm tra số lẻ) là có thể khiến vòng lặp chỉ chạy trên các số lẻ và nhanh gấp đôi. Mong rằng những người dùng các LLM như vậy sẽ xem lại mã trước khi push lên prod.

  • Câu hỏi về việc build llamafile không chạy được trên NixOS

    Hỏi liệu có thể tự build llamafile mà không cần cosmopolitan/tệp thực thi thật sự portable hay không. Nó không chạy được trên NixOS.

  • Nhu cầu về một tích hợp LLM tổng quát hơn

    Tôi khá hài lòng với những gì đang có, nhưng muốn một tích hợp LLM tổng quát hơn có thể làm được cả việc này lẫn mọi thứ khác mà LLM có thể làm. Ví dụ, với một phím bấm có thể là "hoàn thiện đoạn mã này", còn phím khác có thể gửi nguyên buffer hiện tại tới LLM, hoặc gửi một vùng tới LLM, hoặc gửi vùng đó tới LLM rồi thay thế bằng kết quả. Có thể có một số chức năng trực giao để đưa dữ liệu vào LLM theo nhiều cách khác nhau (vùng, buffer, file, inline prompt) và xuất kết quả theo nhiều cách khác nhau (chèn tại con trỏ, ghi đè vùng, đưa vào buffer mới, v.v.), rồi trên đó xây dựng các system prompt tự động khác nhau như hoàn thành mã, văn xuôi, v.v.

  • Người dùng Vim chia sẻ lệnh tùy biến tích hợp LLM

    Tôi hiện dùng một lệnh tùy biến có thể lấy đoạn mã đang được chọn, mở cửa sổ trình duyệt, rồi yêu cầu nhiều AI engine khác nhau cải thiện nó. Chia sẻ lệnh đang dùng trong vimrc.

  • Câu hỏi về lộ trình nâng cấp của Llamafile

    Hỏi về lộ trình nâng cấp của Llamafile. Tôi hiểu đây là việc gộp llama.cpp (một tệp nhỏ được cập nhật thường xuyên) và trọng số mô hình (một tệp lớn không được cập nhật thường xuyên) thành một. Tôi thắc mắc liệu mỗi khi llama.cpp cần sửa đổi thì có phải tải lại hàng GB của mô hình vốn không thay đổi hay không.

  • Bày tỏ sự hứng thú và ý định thử tích hợp LLM

    Rất thú vị và chắc chắn tôi sẽ thử. Tuy nhiên, nó rất khác với cách GitHub Copilot hoạt động, nên có thể cái tên này chưa được chọn thật chuẩn. Xét đến kiến trúc của Emacs và những thứ tương tự, thật đáng ngạc nhiên khi chưa có nhiều phát triển hơn về tích hợp với LLM, nhưng đa số dự án dường như đã không được làm tiếp trong vài tháng. Tuy vậy, cũng có thể phần lớn người dùng Emacs là những người phản đối việc tận dụng LLM.