Cách lập trình cùng LLM
(crawshaw.io)- Bài viết tóm tắt trải nghiệm lập trình với LLM (mô hình ngôn ngữ lớn) trong 1 năm qua
- LLM đã giúp tăng năng suất, và rất khó quay lại cách lập trình không dùng chúng
- Tác giả chủ yếu tập trung vào môi trường lập trình Go và đang phát triển một công cụ tên là sketch.dev
Bối cảnh
- Bắt đầu từ sự tò mò với công nghệ mới.
- Bị cuốn hút bởi khả năng của LLM trong việc tạo ra các câu trả lời phức tạp cho câu hỏi hoặc viết mã lập trình
- Mang lại cảm giác hứng thú và tiềm năng tương tự như khi Internet mới xuất hiện
- Nhận ra lợi ích ròng khi công cụ tạo ra đoạn mã “hầu như đúng”, và nỗ lực đưa điều đó vào sử dụng thực tế
Các trường hợp sử dụng chính
-
Tự động hoàn thành (Autocomplete)
- Tăng năng suất bằng cách xử lý các tác vụ lập trình lặp đi lặp lại bằng tự động hoàn thành
- Đặc biệt, các mô hình FIM (Fill-In-the-Middle) là thiết yếu cho công việc hằng ngày
-
Thay thế tìm kiếm (Search)
- Trả lời chính xác hơn công cụ tìm kiếm cho các câu hỏi lập trình cụ thể (ví dụ: thiết lập độ trong suốt của nút trong CSS)
- Câu trả lời của LLM có thể sai, nhưng tác giả chấp nhận giới hạn đó và vẫn sử dụng
-
Lập trình dựa trên hội thoại (Chat-driven Programming)
- Đây là lĩnh vực khó nhất nhưng cũng có giá trị nhất.
- Thay người dùng thực hiện các công việc ban đầu như tạo file mới, tìm kiếm thư viện.
- Mục tiêu của lập trình hội thoại là giảm bớt sự bất tiện hiện tại và biến năng lực của LLM thành thứ thân thiện hơn với người dùng
Cốt lõi của lập trình hội thoại
-
Vì sao dùng hội thoại?
- Hữu ích để tạo bản nháp đầu tiên khi năng lượng giảm dần sau một ngày làm việc
- Xem rồi chỉnh sửa bản nháp ban đầu hiệu quả hơn so với viết từ đầu
-
Cách làm việc với LLM
- Đặt mục tiêu công việc rõ ràng và ngắn gọn
- Đọc, kiểm chứng và chỉnh sửa mã
- Tận dụng lỗi trình biên dịch để giải quyết vấn đề nhanh chóng
-
Viết kiểm thử hiệu quả
- LLM rất nhiệt tình trong việc viết kiểm thử và có thể xây dựng môi trường kiểm thử kỹ lưỡng hơn
- Có thể mở rộng từ kiểm thử dựa trên ví dụ sang cả fuzz test
Ví dụ: bộ lấy mẫu phân vị
- Mục tiêu: Viết một thuật toán bằng Go để lấy mẫu các tứ phân vị của luồng dữ liệu
- Quy trình
- Dùng LLM để viết bản nháp đầu tiên
- Cải thiện mã trong khi sửa lỗi biên dịch
- Viết lại mã kiểm thử để tạo cấu trúc dễ đọc hơn
Khả năng của cấu trúc mã mới
-
Nhiều package nhỏ hơn, nhiều kiểm thử hơn
- Package nhỏ cung cấp ngữ cảnh mã rõ ràng hơn, hữu ích hơn cho cả LLM và con người
- Tăng khả năng kiểm thử độc lập và biên dịch
-
Ví dụ: API wrapper
- Khuyến nghị dùng wrapper mỏng chỉ triển khai phần cần thiết thay vì thư viện chính thức quy mô lớn
- Giảm chi phí bảo trì và học tập
Hướng đi tương lai: sketch.dev
- Go IDE cho LLM
- Cung cấp môi trường lập trình lấy LLM làm trung tâm
- Hỗ trợ phản hồi kiểm thử tự động, sửa lỗi trình biên dịch, tích hợp Go module, v.v.
- Tăng cường hợp tác giữa con người và LLM để tạo ra môi trường làm việc hiệu quả hơn
1 bình luận
Ý kiến Hacker News
Tác giả vốn đã là một kỹ sư phần mềm đẳng cấp thế giới, từng làm ở Google và là đồng sáng lập/CTO của Tailscale. Điều đáng ấn tượng là LLMs khiến ông ấy làm việc hiệu quả hơn.
LLMs giúp giảm năng lượng khởi đầu cho công việc.
Khi dùng LLMs, chỉ nên dùng trong những lĩnh vực mà bản thân hiểu rõ.
LLMs có tiềm năng như một công cụ phát triển phần mềm.
Tương tự như việc dùng công cụ tìm kiếm.
Cảm thấy không có nhiều thôi thúc phải dùng LLMs.
Với người không phải lập trình viên, LLMs là trợ giúp rất lớn.
LLMs hữu ích trong việc viết các ứng dụng đơn giản.
Với những người lập trình như một sở thích, LLMs cũng rất hữu ích.
LLMs chủ yếu được dùng cho tự động hoàn thành và tìm kiếm.