- Trong năm qua, khi tương tác với các mô hình ngôn ngữ lớn hàng tuần trong nhiều giờ, tôi liên tục ấn tượng với khả năng giải quyết những tác vụ ngày càng khó của chúng
- Kết quả là tốc độ viết mã của tôi trong các dự án nghiên cứu và dự án cá nhân đã tăng ít nhất 50%
- Phần lớn những người nói về độ hữu ích của LLM trên mạng hoặc quá lạc quan, hoặc quá bi quan
- Thay vì tranh luận về tương lai, tôi muốn đưa ra 50 ví dụ hội thoại trong năm qua, nơi tôi đã dùng LLM để cải thiện năng lực nghiên cứu và hỗ trợ các dự án lập trình của mình
- Các trường hợp tôi sử dụng LLM
- Xây dựng toàn bộ ứng dụng web bằng những công nghệ mà trước đây tôi chưa từng dùng
- Học cách dùng nhiều framework khác nhau mà không cần phải tự mày mò từ đầu
- Chuyển hàng chục chương trình sang C hoặc Rust để cải thiện hiệu năng gấp 10–100 lần
- Tinh gọn các codebase lớn để đơn giản hóa dự án đáng kể
- Viết mã thí nghiệm ban đầu cho gần như mọi bài báo nghiên cứu trong năm qua
- Tự động hóa gần như mọi công việc đơn điệu hoặc script dùng một lần
- Gần như thay thế hoàn toàn việc tìm kiếm trên web khi thiết lập và cấu hình package hay dự án mới
- Thay thế khoảng 50% việc tìm kiếm trên web để gỡ lỗi thông báo lỗi
- Nếu phân loại lại thì có 2 nhóm
- Hỗ trợ học tập: giúp tôi làm được những việc trước đây vốn khó làm
- Tự động hóa công việc nhàm chán: giúp tôi tập trung vào việc mình làm tốt nhất và giải quyết các vấn đề khó
- Điều quan trọng nhất là đây là những ví dụ về cách tôi thực sự đã nhận được ích lợi từ việc dùng LLM
- Không phải để phô diễn các tính năng ấn tượng, mà xuất phát từ nhu cầu thực tế của tôi trong việc xử lý công việc
Sắc thái
- Có một điều mà Internet làm không tốt, đó là sắc thái. Tôi sẽ không lập luận rằng các LLM ngày nay sẽ thống trị thế giới, cũng không bàn về việc các mô hình tương lai có thể làm được gì
- Tôi chỉ thảo luận về việc các mô hình hiện nay có hữu ích với bản thân tôi hay không
- Bạn có thể thắc mắc vì sao tôi lại viết bài để biện minh rằng mô hình ngôn ngữ là hữu ích. Nhưng trong giới học thuật, kỹ thuật phần mềm và truyền thông, dường như có nhiều người công khai khẳng định rằng LLM chẳng đóng góp gì cả, chỉ là một chu kỳ cường điệu khác, và vài năm nữa sẽ biến mất mà không để lại ảnh hưởng nào với thế giới
- Tôi sẽ lập luận rằng họ đã sai, vì các LLM hiện tại đã hữu ích rồi
- Ngược lại, cũng có những người cho rằng các mô hình ngày nay có thể thay thế mọi lập trình viên và rằng con người không nên học lập trình nữa
- Tôi không định phản bác trực tiếp lập luận của họ
- Tôi hoàn toàn hiểu rằng LLM có thể gây ra nhiều tác hại. Ý tôi là mọi thứ như thông tin sai lệch, lạm dụng, giám sát, thay thế việc làm, v.v. Tôi dự định sớm viết một bài về suy nghĩ của mình đối với các tác hại của LLM. Tuy nhiên, đó là một vấn đề tách biệt với việc liệu mô hình ngôn ngữ có thể hữu ích hay không
- Tôi hiểu rõ vì sao người ta có thể không muốn dùng LLM: chúng tạo ra ảo giác, lặp lại sự kiện như vẹt, thiếu độ vững chắc nên có thể thất bại. Nhưng bài viết này không nói về điều đó
- Tôi cho rằng bất chấp những thất bại này, các mô hình vẫn có thể hữu ích
- Tính đạo đức của việc huấn luyện các mô hình này là điều đáng nghi ngờ. Bạn có thể nghĩ đến việc chúng được huấn luyện trên dữ liệu của mọi người mà không có sự cho phép, hoặc những người được trả lương thấp để huấn luyện mô hình một cách trực tiếp. Tôi đồng ý rằng đó là vấn đề
- Bài viết này không nói về điều đó
- Như tôi đã nói nhiều lần, bài viết này chỉ nói về việc các mô hình hiện đang tồn tại có hữu ích hay không
Câu chuyện nền tảng của tôi
- Nhìn chung tôi không phải kiểu người dễ tin vào điều gì đó. 10 năm trước, trong cộng đồng bảo mật, tôi đã chứng kiến làn sóng cường điệu về crypto, nhưng đã hoàn toàn tránh viết bài báo nào về blockchain. Tôi chưa từng sở hữu Bitcoin. Tôi hoài nghi với mọi tuyên bố
- Khi lần đầu có người nói với tôi rằng công nghệ AI này sẽ cực kỳ hữu ích và sẽ thay đổi mạnh mẽ cách làm việc hằng ngày, phản ứng của tôi là "tôi sẽ không tin cho đến khi tận mắt thấy"
- Tôi là một nhà nghiên cứu bảo mật. Trong 10 năm qua, công việc thường ngày của tôi là chỉ ra mọi cách mà các mô hình AI thất bại thảm hại khi gặp môi trường nằm ngoài dữ liệu huấn luyện. Tôi đã cho thấy rằng chỉ cần làm nhiễu nhẹ đầu vào của các mô hình machine learning là có thể khiến chúng tạo ra đầu ra sai lệch nghiêm trọng, hoặc rằng phần lớn các mô hình machine learning sẽ ghi nhớ những ví dụ cụ thể trong tập dữ liệu huấn luyện rồi lặp lại khi sử dụng. Tôi hoàn toàn hiểu các giới hạn của những hệ thống này
- Dù vậy, tôi vẫn nói rằng các mô hình ngôn ngữ lớn hiện tại đã tạo ra mức tăng năng suất lớn nhất kể từ khi Internet ra đời. Nếu hôm nay bạn bắt tôi chọn giữa quyền truy cập Internet hoặc quyền truy cập một mô hình ngôn ngữ hiện đại để làm một tác vụ lập trình ngẫu nhiên, thì hơn một nửa số trường hợp tôi sẽ chọn mô hình ngôn ngữ
[ Cách tôi sử dụng LLM ]
Xây dựng ứng dụng hoàn chỉnh cho tôi
- Năm ngoái tôi đã tạo ra một bài quiz để kiểm tra GPT-4 có thể dự đoán tốt đến đâu khả năng con người giải một số ít tác vụ. Bài quiz đó khá phổ biến và đạt hơn 10 triệu lượt xem trang.
- Tôi đã để GPT-4 viết phần lớn phiên bản ban đầu của ứng dụng này. Tôi làm điều đó bằng cách bắt đầu với việc yêu cầu cấu trúc cơ bản của ứng dụng, rồi thông qua một chuỗi câu hỏi để dần xây dựng các tính năng khác nhau
- Cuộc trò chuyện này dài tổng cộng 30.000 từ và đã tận dụng tối đa khả năng của mô hình GPT-4 tiên tiến nhất vào thời điểm đó
- [Lược bỏ các prompt và câu trả lời thực tế]
- Tôi đã đưa ra yêu cầu cho GPT-4 theo nhiều cách khác nhau trong cuộc trò chuyện đó
- Từ những tin nhắn mô tả bằng lời điều tôi muốn và yêu cầu mô hình triển khai toàn bộ, đến những tin nhắn yêu cầu thay đổi cụ thể (
"Thay vì so sánh với điểm trung bình, bạn có thể dùng KDE để cho biết percentile được không?")
- Cũng bao gồm cả những tin nhắn đặt câu hỏi hoàn toàn chưa hoàn chỉnh bằng cách sao chép và dán thông báo lỗi (ví dụ:
"Plotting: numpy.linalg.LinAlgError: singular matrix") hoặc yêu cầu một câu trả lời đơn giản dùng một lần ("Làm cách nào để thêm một iframe vào trang bằng JavaScript với nội dung được tải từ một chuỗi?")
- Lý do mô hình ngôn ngữ hiệu quả
- Cách này hiệu quả vì mô hình ngôn ngữ rất giỏi giải quyết những thứ mà con người đã từng giải quyết trước đó
- 99% bài quiz này chỉ là HTML cơ bản với backend web server Python mà người khác cũng có thể viết được
- Lý do bài quiz này thú vị và được mọi người yêu thích không nằm ở công nghệ phía sau nó, mà ở nội dung của bài quiz. Và khi bạn tự động hóa hết mọi phần nhàm chán, việc tạo ra bài quiz trở nên rất dễ dàng
- Tôi tin chắc rằng nếu không có sự trợ giúp của mô hình ngôn ngữ, có lẽ tôi đã không tạo ra bài quiz này
- Vì tôi không hề hứng thú với việc dành thời gian viết toàn bộ ứng dụng web từ đầu
- Và đây là câu chuyện của một người biết lập trình!
- Tôi tin rằng ngay cả các mô hình hiện tại cũng đã đủ để cho phép phần lớn mọi người làm được những công việc có ý nghĩa mà trước đây họ chưa bao giờ có thể giải quyết, chỉ bằng cách yêu cầu một giải pháp
- Sau đây tôi sẽ giới thiệu thêm một vài trường hợp mà mô hình đã viết toàn bộ ứng dụng cho tôi, và khi phát hành chúng tôi sẽ nói rõ rằng chúng được tạo ra với sự trợ giúp của mô hình ngôn ngữ
Đóng vai trò gia sư cho công nghệ mới
- Trước đây tôi từng cố gắng theo kịp các framework mới, nhưng thời gian một người có thể làm là có hạn
- Do tính chất công việc, tôi dành phần lớn thời gian để theo kịp những tiến bộ nghiên cứu mới nhất, chứ không theo sát sự phát triển của các framework JavaScript mới nhất.
- Khi bắt đầu một dự án mới ngoài lĩnh vực nghiên cứu chuyên biệt của mình, thường có hai lựa chọn
- Thứ nhất là dùng những gì mình đã biết,
- Thứ hai là học một cách làm mới (thường là tốt hơn)
- Đây là lúc mô hình ngôn ngữ phát huy tác dụng. Phần lớn các framework hay công cụ mới như Docker, Flexbox, React thực ra không mới với người khác. Trên thế giới hẳn có từ hàng chục nghìn đến hàng trăm nghìn người hiểu rất kỹ những thứ này. Các mô hình ngôn ngữ hiện nay cũng vậy.
- Thay vì đọc một tutorial tĩnh được viết cho một nhóm độc giả cụ thể và nhằm đạt một mục tiêu cụ thể, bạn có thể tương tác với mô hình ngôn ngữ để học đúng những gì cần nhằm giải quyết công việc.
- Đầu năm nay, khi xây dựng một framework đánh giá LLM, tôi muốn chạy mã do LLM tạo ra trong một môi trường bị giới hạn
- Docker là công cụ hoàn hảo cho việc này, nhưng trước đó tôi chưa từng dùng.
- Việc sử dụng Docker không phải là mục tiêu của dự án, mà chỉ là công cụ cần thiết để đạt mục tiêu
- Tôi chỉ muốn hiểu 10% về Docker để có thể yên tâm rằng mình đang dùng nó một cách an toàn theo cách cơ bản nhất có thể
- Nếu là những năm 90, có lẽ tôi đã phải mua một cuốn sách về cách dùng Docker từ các nguyên lý cơ bản, đọc vài chương đầu rồi nhảy cóc để tìm ra cách làm điều mình muốn
- Trong 10 năm qua, mọi thứ đã cải thiện thành việc tìm kiếm và làm theo các tutorial online giải thích cách dùng Docker, rồi tra cứu thông báo lỗi để xem có ai khác gặp cùng vấn đề không
- Nhưng ngày nay, bạn chỉ cần yêu cầu mô hình ngôn ngữ dạy mình Docker
- Sau khi thiết lập và chạy Docker, tôi nhận ra có vấn đề quyền hạn khi chạy trên Linux. Tôi muốn sửa việc đó nên đã nhờ mô hình giúp
- Nhờ vậy tôi biết đến Podman và đã yêu cầu mô hình viết lại đoạn mã dành riêng cho Docker sang phiên bản Podman tương đương
- Và khi muốn tìm cách truyền GPU của máy chủ vào container Docker, tôi cũng đã hỏi nó
Bắt đầu dự án mới
- Hồi nhỏ, ngôn ngữ lập trình đầu tiên của tôi là Java. Tôi thực sự thích lập trình, nhưng lại cực ghét nhìn vào màn hình trống của một dự án mới. Đặc biệt là với Java!
- Ngay cả việc biên dịch một chương trình Hello World cũng khó, vì phải tìm hiểu
public static void main string args làm gì, dấu ngoặc đặt ở đâu, chữ nào phải viết hoa lại, và tại sao dấu ngoặc nhọn với ngoặc vuông lại xuất hiện khắp nơi
- Vì vậy tôi đã làm điều mà đứa trẻ nào cũng có thể làm: nhờ bố làm hộ
- Giờ đã 20 năm trôi qua mà tôi vẫn ghét bắt đầu dự án mới với một framework mình chưa quen
- Mất quá nhiều thời gian để loại bỏ phần mã khuôn mẫu, mà tôi lại còn không hiểu rõ mình đang làm gì
- Ví dụ, gần đây tôi muốn thử viết mã CUDA để benchmark hiệu năng của một phép tìm kiếm Greedy ngây thơ nào đó trên GPU, rồi so sánh với một bản cài đặt CPU hiệu quả và được tối ưu hóa của người khác
- Nhưng tôi không biết cách viết chương trình CUDA
- Tôi biết cách viết C và hiểu GPU hoạt động ra sao, kernel hoạt động thế nào, bố cục bộ nhớ, v.v.
- Nhưng tôi không biết cách thực sự viết mã để gửi công việc lên GPU
- Vì thế tôi đã yêu cầu mô hình viết bản nháp đầu tiên của chương trình CUDA
- Nó có hoàn hảo không? Hoàn toàn không! Nhưng đó là một điểm khởi đầu. Và chính xác đó là điều tôi muốn
- Bạn có thể thấy có rất nhiều chỗ sai trong đoạn mã này
- Thực ra điều đó hoàn toàn không thành vấn đề
- Vì tôi không tìm kiếm một lời giải hoàn hảo, mà đang tìm một điểm bắt đầu
- Nếu sau này mô hình tốt hơn nữa thì sẽ thật tuyệt vời
- Nhưng ngay cả với những gì hiện có, nó đã cực kỳ hữu ích rồi.
- Hoàn toàn tách biệt với việc trên, tôi đang dùng Raspberry Pi Pico W cho một dự án cá nhân khác ở nhà
- Đây là lần đầu tôi dùng nó
- Cụ thể là tôi muốn nó thực hiện các tác vụ mạng
- Tất nhiên tôi có thể tìm được một tutorial tốt trên mạng giải thích cách làm điều mình muốn
- Nhưng nếu gần đây bạn có tìm trên internet, thì 5 kết quả đầu thường chỉ là các content farm rác với đoạn mã lỗi từ năm 2008, chỉ được cập nhật để phục vụ SEO và vẫn không chạy được
- Vì vậy, thay vào đó tôi yêu cầu mô hình ngôn ngữ dạy tôi cách làm điều mình muốn
- Tôi từng làm việc với vi điều khiển trước đây nên cũng hiểu đại khái chúng hoạt động thế nào
- Nhưng tôi chưa từng làm việc với Pico W
- Chỉ cần có thứ gì đó giúp tôi bắt đầu cùng với mọi dependency, tôi có thể tự tìm ra phần còn lại
- Chương trình "hello world" đầu tiên mà tôi luôn viết cho một vi điều khiển mới là làm đèn LED nhấp nháy
- Điều đó cho phép kiểm tra xem có thể biên dịch và tải mã lên thiết bị hay không, mọi chân pin đã được cấu hình đúng chưa, và về cơ bản là mình có đang làm đúng hay không
- Vì vậy bạn chỉ cần yêu cầu một chương trình nhấp nháy. (Nhắc lại, thứ này có tồn tại trên internet không? Gần như chắc chắn là có. Nhưng như thế thì tôi phải tự đi tìm.)
- Sau khi chạy được đoạn mã này, tôi sẽ biết mình nên làm gì tiếp theo
- Tôi biết Python hoạt động thế nào mà (tin hay không thì tùy!)
- Vì vậy chỉ cần hoàn thành phần MicroPython đặc thù là tôi có thể tiếp tục chỉnh sửa từ đó ngay
- Và khi gặp vấn đề khác cần xử lý đặc biệt, tôi chỉ cần nhờ mô hình giúp
- Ví dụ ở đây, tôi tiếp tục bằng cách yêu cầu mô hình viết một script kết nối WiFi
- Rồi mỗi khi lại bị kẹt, chẳng hạn như cần kết nối tới máy chủ MQTT, tôi lại nhờ mô hình giúp
- Giờ tôi làm việc này liên tục. Ngay cả ví dụ ở đầu phần này cũng không phải giả thuyết
- Tôi đang hỏi cách dùng Flexbox, vì cách mới để học bố cục HTML là dùng
div thay vì bảng
Đơn giản hóa mã
- Với tư cách là một nhà nghiên cứu bảo mật, tôi thường nhận được một repository mới chứa hàng nghìn dòng mã của dự án nghiên cứu của người khác, rồi phải tìm hiểu nó hoạt động thế nào để tấn công nó
- Nếu ai cũng viết mã sạch thì việc đó đã không khó đến vậy, nhưng thế giới chúng ta sống không như thế
- Các nhà nghiên cứu không có động lực để công bố mã sạch
- Vì vậy, nhiều khi người ta chỉ nộp lên thứ mã rác nhưng chạy được. (Tôi cũng thế)
- Tôi không thể chia sẻ ví dụ liên quan đến nghiên cứu ở đây, nhưng có thể chia sẻ một ví dụ từ dự án cá nhân tôi đang làm
- Tôi có một sự ám ảnh hơi quá mức với Game of Life của Conway
- Gần đây tôi đang tìm một cách nhanh để đánh giá một số pattern sự sống trong Python
- Có một công cụ C++ rất tuyệt để làm việc này là golly, nhưng tôi không muốn viết lại mã Python thành C++
- golly có một công cụ CLI làm đúng điều tôi cần
- Điều tôi cần chỉ là cách gọi nó cho đúng
- Bước đầu tiên cho việc đó là lấy đoạn mã C++ hỗ trợ khoảng 50 tùy chọn dòng lệnh khác nhau và biến nó thành thứ chỉ làm đúng một việc tôi muốn
- Vì vậy tôi đã đổ toàn bộ 500 dòng mã C++ vào LLM và yêu cầu một file ngắn hơn thực hiện cùng tác vụ
- Và kết quả thế nào? Nó chạy hoàn hảo
- Sau đó tôi yêu cầu một wrapper Python quanh đoạn mã C++. Cái đó cũng hoạt động tốt như vậy
- Đây là một trong những việc quá phiền phức đến mức chính tác giả chắc cũng sẽ chẳng bao giờ tự làm
- Nhưng giờ chỉ cần yêu cầu là được, nên tôi đã có một thứ nhanh hơn mã Python gốc tới 100 lần
- Tôi làm kiểu việc này khá thường xuyên. Còn có một ví dụ khác cũng làm đúng điều tương tự trong Python
- Không việc nào trong số này là khó
- Nhưng mỗi lần làm như vậy, tôi đều tiết kiệm được một lượng thời gian đáng kể
- Và đó chính là một trong những lý do tôi nghĩ LLM ngày nay thật đáng kinh ngạc
- Nó không hào nhoáng, và bạn cũng chẳng thể kiếm được nhiều điểm internet khi nói rằng "đây là cách nhàm chán mà tôi dùng LLM để làm cuộc sống dễ dàng hơn", nhưng đó là điều thực sự đang diễn ra
Tự động hóa các công việc đơn điệu
- Có rất nhiều việc không cần suy nghĩ, nhàm chán nhưng vẫn phải làm
- Một trong những lý do chính khiến tôi trì hoãn công việc là vì tôi biết làm nó sẽ rất bực bội và đau khổ
- LLM giảm bớt nỗi khổ đó đi rất nhiều, và vì tôi biết mình chỉ cần giải quyết những vấn đề thú vị nên việc bắt đầu một thứ gì đó trở nên dễ dàng hơn nhiều
- Ở đây tôi sẽ xem qua những vấn đề hoàn toàn đời thường mà tôi đã nhờ LLM giải quyết
- Ví dụ, gần đây tôi phải disassemble một chương trình Python được viết cho Python 3.9
- Hầu hết các trình disassembler Python chỉ hoạt động với các phiên bản trước Python 3.7 và không chạy được trên binary 3.9
- Disassemble thực ra không phải là công việc quá khó. Phần lớn chỉ là lần theo goto để tái dựng control flow mà không mắc lỗi
- Thay vì dành thời gian chuyển đổi thủ công hàng nghìn op-code cho hàng trăm dòng mã, tôi đã yêu cầu LLM làm thay
- Và nó làm rất tốt! Tốt hơn rất rất nhiều so với mức tôi nghĩ là có thể
- Một ví dụ khác là khi bạn phải lấy dữ liệu phi cấu trúc và định dạng nó thành dạng có cấu trúc
- Chẳng hạn, trong một dự án nào đó tôi cần một danh sách tên sách kèm tên tác giả
- Vì vậy tôi tìm dữ liệu trên mạng ở dạng phi cấu trúc rồi nhờ LLM định dạng lại
- Hoặc gần đây, khi viết một bài blog về cách tôi đã vượt qua một biện pháp phòng thủ nào đó, tôi muốn hiển thị full diff của đoạn mã mà tôi phải thay đổi
- Vì vậy tôi đã dán vào (1) diff và (2) một ví dụ trước đó về cách HTMLify diff, rồi yêu cầu LLM xuất diff này theo định dạng trước đó
- Một ví dụ nữa là tôi cần tạo trích dẫn cho các tài nguyên mà tôi thường dùng trong công việc
- Google Scholar giúp việc này trở nên dễ dàng với các bài báo, chỉ cần copy rồi paste trích dẫn là xong
- Nhưng trích dẫn một trang web thì hơi phiền
- Gần đây tôi thường nhờ LLM tạo trích dẫn. (Nói rõ là tôi có kiểm tra xem nó có chính xác hay không!)
- Tôi có thể nêu thêm ít nhất 100 ví dụ như thế nữa. Nhưng có lẽ bạn đã hiểu ý rồi
- Tôi hoàn toàn hiểu rằng có người sẽ nhìn vào và nói: “Chỉ thế thôi sao??”
- Nhưng hãy nhớ rằng chỉ 5 năm trước, chúng chỉ mới có thể ghép được vài đoạn văn cho ra hồn, chứ chưa thể giải quyết trọn vẹn cả vấn đề
Biến mọi người dùng thành “power user”
- Nếu bạn từng thấy một người kém thành thạo hơn mình rất nhiều sử dụng một công cụ, trải nghiệm đó có thể khá đau đớn
- Bạn có thể thấy họ tốn vài phút, đôi khi vài giờ, cho một công việc mà đáng ra có thể tự động hóa bằng một kiểu macro nào đó hoặc bằng cách dùng ứng dụng song song một cách khéo léo
- Nhưng để làm được điều đó thì phải mất thời gian và công sức để học những “câu thần chú” cần thiết
- Ví dụ, gần đây tôi định viết một chương trình Python để xử lý đầu vào bàn phím từ bàn phím Apple Lisa
- Tôi tìm thấy trên mạng một người đã viết thứ gì đó làm việc này bằng C, với rất nhiều dòng kiểu
#define KEYNAME key_code
- Tôi muốn biến chúng thành một Python dictionary ánh xạ mã số nguyên sang chuỗi tương ứng
- Tôi là người dùng Emacs. Tôi biết cách giải quyết bài toán này trong Emacs. Chắc cũng không quá khó. Đây là chuỗi phím chính mà tôi vừa ghi lại để tạo ra hiệu ứng đó:
C-h C-s #def [enter] M-f [delete] C-d M-f C-[space] M-f C-w C-a C-y : " M-f ", C-g C-] } C-[ {
- Với tôi điều này gần như là bản năng, nhưng để nó trở thành bản năng thì tôi đã dành hơn nửa đời mình để làm quen đủ sâu với Emacs. Nhưng giờ nếu có một LLM được kết nối với trình soạn thảo, tôi sẽ gõ gì?
C-h C-h rewrite these #defines to a dictionary of {keycode: string, ...}
- Và rồi đột nhiên văn bản được viết lại ngay trước mắt tôi!
- Trong những trường hợp như thế này, tôi nghĩ mức độ hữu ích tiềm năng của LLM đối với người không chuyên còn cao hơn đối với chuyên gia
- Mô hình nâng mặt bằng của mọi người lên, và nếu trước đây bạn hoàn toàn không làm được thì giờ đây đột nhiên bạn có thể làm được nhiều hơn rất nhiều
Dùng như tài liệu tham chiếu API
- Những lập trình viên “thứ thiệt” sẽ đọc manual tham chiếu khi muốn biết công cụ hoạt động thế nào
- Nhưng tôi là một lập trình viên lười, nên tôi chỉ muốn có sẵn câu trả lời
- Vì thế giờ tôi hỏi mô hình ngôn ngữ
- Khi tôi đưa ra những ví dụ như thế này, một số người phản ứng khá phòng thủ và nói rằng: “LLM chẳng làm được gì mà bạn không thể làm với các công cụ sẵn có!”
- Và họ đúng
- Nhưng cũng không có gì công cụ tìm kiếm làm được mà sách giấy không làm được, và cũng không có gì sách giấy làm được mà bạn không thể làm bằng cách đọc mã nguồn
- Tuy nhiên, mỗi bước như vậy lại dễ hơn bước trước
- Và khi một việc trở nên dễ hơn, bạn sẽ làm nó thường xuyên hơn, theo những cách khác biệt về chất.
- Một vài ví dụ kèm prompt
- Hỏi “trong Bash thì ký hiệu
$ nào cung cấp tất cả các đối số còn lại” rồi nhận câu trả lời. (Ngay sau đó lại có thêm câu hỏi: “dùng cái này như thế nào?”)
- Hoặc khi muốn biết cách làm cho văn bản có màu đỏ trong LaTeX, tôi không còn tìm kiếm hay đọc tài liệu nữa mà hỏi thẳng mô hình
- Và tôi cũng làm tương tự khi muốn biết lệnh LLDB nào tương ứng với các lệnh GDB khác nhau
- Hoặc khi muốn hiểu một số lệnh
find hoạt động như thế nào
- Cả cách dùng
lpr nữa
- Cả cách rebind lệnh LaTeX nữa
- Thực ra đây là một trong những cách tôi dùng LLM thường xuyên nhất
- Lý do duy nhất khiến tôi không thể nối thêm hàng nghìn ví dụ như vậy là vì cả Emacs lẫn shell đều đã có sẵn công cụ để truy vấn LLM
- Nên trong 90% trường hợp, khi muốn làm một việc kiểu này, tôi thậm chí không cần rời khỏi trình soạn thảo
Tìm kiếm những thứ khó tìm
- Việc tìm kiếm nội dung trên internet trước đây là một kỹ năng phải học khá vất vả
- Từ cụ thể nào bạn muốn đưa vào truy vấn? Nó nên ở dạng số nhiều chăng? Hay số ít? Hay thì quá khứ?
- Những từ nào bạn không muốn xuất hiện trên trang? Bạn muốn X AND Y, hay X OR Y?
- Giờ thì không còn như vậy nữa
- Tôi thậm chí không nhớ lần gần nhất mình viết một truy vấn có dùng OR trên Google là khi nào
- Tôi cũng không nhớ lần gần nhất dùng dấu trừ (-) để loại bỏ một tập con của kết quả là khi nào
- Ngày nay, trong hầu hết trường hợp, bạn chỉ cần gõ thứ mình muốn tìm và công cụ tìm kiếm sẽ tìm ra nó.
- Tuy nhiên, công cụ tìm kiếm vẫn chưa phải là truy vấn ngôn ngữ tự nhiên 100%
- Vẫn có cảm giác như đang chơi trò Reverse-Jeopardy, cố dùng các từ khóa sẽ xuất hiện trong câu trả lời thay vì trong câu hỏi
- Đây là một kỹ năng mà gần như tất cả chúng ta đã học rồi lại quên mất rằng mình từng học
- Các mô hình ngôn ngữ hiện nay đơn giản là tốt hơn cho một số tác vụ đơn giản (và theo thời gian sẽ còn nhiều hơn nữa)
- Bạn chỉ cần gõ đại loại như "được rồi, vậy + tương ứng với
add, thế còn ~ là gì" và nó sẽ trả lời rằng đó là inv
- Đây là thứ rất khó để tìm bằng công cụ tìm kiếm tiêu chuẩn
- Tôi biết là có cách để tìm ra câu trả lời
- Có lẽ bạn sẽ gõ kiểu "python documentation metaclass
add" rồi tìm ~ trong trang để ra đáp án
- Nhưng cũng có hiệu quả khi chỉ đơn giản hỏi LLM đúng câu hỏi mà bạn đang có
- Làm như vậy mỗi lần chỉ tiết kiệm được vài giây, nhưng khi bạn đang giải một tác vụ lập trình nào đó và đồng thời đã phải xử lý hàng triệu thứ một lúc, thì chỉ cần trút hết điều mình đang cố giải quyết ra và nhận được một câu trả lời mạch lạc thôi cũng đã rất tuyệt
- Điều đó không có nghĩa là hiện nay chúng đã hoàn hảo cho việc này
- Các mô hình ngôn ngữ chỉ biết những gì trên mạng được lặp lại đủ thường xuyên
- "Đủ thường xuyên" nghĩa là gì thì tùy vào từng mô hình, nên bạn vẫn phải tốn vài nhịp suy nghĩ xem nên hỏi mô hình hay hỏi internet
- Nhưng các mô hình sẽ tiếp tục tiến bộ
- Hoặc mỗi khi gặp một lỗi ngẫu nhiên, tôi sẽ đổ những gì mình đang thấy vào mô hình và yêu cầu nó giải thích
- Ví dụ ở đây, tôi gõ "Remote wildcard transfer issue" theo cách đó
- Một ví dụ hoàn toàn khác: năm ngoái khi viết một bài blog, tôi muốn làm chữ cái đầu của từ đầu tiên thật lớn và để phần còn lại của văn bản bao quanh nó
- Thứ đó được gọi là drop cap. Nhưng tôi đã không biết điều đó
- Tôi chỉ biết hiệu ứng mình muốn, nên đã hỏi mô hình ngôn ngữ rằng "tôi muốn nó trông như một cuốn sách đẹp, với văn bản bao quanh chữ O", và nó đã cho tôi đúng thứ mình muốn
- Việc này cũng thuộc nhóm "tôi chỉ làm vì có LLM"
- Tôi hẳn đã không nghĩ việc bỏ nhiều thời gian để tìm ra cách làm điều này là đáng giá
- Nhưng vì tôi có thể hỏi mô hình, tôi đã làm vậy, và nó khiến bài viết của tôi trông đẹp hơn một chút
Giải quyết các tác vụ làm một lần
- Có hai loại chương trình
- Thứ nhất là những chương trình bạn muốn làm cho tử tế. Chúng sẽ tồn tại một thời gian và cần được bảo trì trong nhiều năm, nên sự gọn gàng là quan trọng
- Thứ hai là những chương trình chỉ tồn tại trong 25 giây. Chúng giúp hoàn thành một việc gì đó rồi bị vứt bỏ ngay lập tức
- Trong những trường hợp kiểu này, khi hoàn toàn không quan tâm đến chất lượng mã và chương trình hoàn toàn độc lập, giờ đây tôi gần như viết chúng bằng LLM hết
- Cảnh báo: đa số những trường hợp này cũng vẫn là kiểu khiến bạn phải nói "chỉ vậy thôi á?"
- Nhưng như tôi đã nói trước đó, thời gian trong một ngày mà bạn có thể đầu tư vào một dự án là có hạn
- Và nếu tôi có thể tiết kiệm thời gian cùng năng lượng tinh thần để viết một chương trình mà mình sẽ không bao giờ dùng lại, thì tôi sẽ làm vậy
- Ví dụ phổ biến nhất có lẽ là nhờ tạo biểu đồ để trực quan hóa dữ liệu sinh ra từ một thí nghiệm nghiên cứu nào đó
- Tôi có hàng chục ví dụ như vậy. Có lẽ gần 100 hơn là 0. Về cơ bản chúng đều trông giống nhau, nên ở đây tôi chỉ ghi một cái
- Một ví dụ tương tự khác là khi bạn có dữ liệu ở một định dạng và muốn chuyển nó sang một định dạng khác
- Thường thì đây là việc chỉ phải làm một lần, và khi xong thì vứt luôn script kết quả
- Nếu script tôi muốn đủ đơn giản, tôi thường yêu cầu LLM viết toàn bộ nó
- Ví dụ, ở đây tôi đã yêu cầu LLM viết một script đọc to bài báo để tôi có thể kiểm tra xem có lỗi ngữ pháp ngớ ngẩn nào không
- Trong phần lớn trường hợp, khi chưa rõ mình muốn gì, tôi bắt đầu bằng cách yêu cầu mô hình đưa ra đoạn mã ban đầu rồi lặp tiếp từ đó
- Ví dụ, ở đây có một tác vụ làm một lần cần xử lý nhanh dữ liệu này
- Năm 2022, tôi sẽ dành 2 phút để viết nó bằng Python rồi chờ nó chạy hàng giờ vì nó chỉ cần chạy một lần
- Việc tối ưu hóa nó sẽ còn mất lâu hơn thời gian chương trình Python chạy
- Nhưng bây giờ thì sao? Tôi khá chắc mình sẽ dành cùng 2 phút đó để yêu cầu mã Rust xử lý dữ liệu cho tôi
- Hoặc có một ví dụ khác là yêu cầu mô hình tải xuống một bộ dữ liệu và thực hiện bước xử lý ban đầu
- Tự tôi làm có dễ không? Có lẽ là có
- Nhưng đây không phải loại việc tôi muốn phải nghĩ tới
- Tôi muốn nghĩ về nghiên cứu mà mình sẽ thực hiện với bộ dữ liệu đó
- Loại bỏ những thứ gây xao nhãng như vậy có giá trị hơn rất nhiều so với chỉ vài phút tiết kiệm được
- Một lần khác, tôi đang viết một chương trình để có thể in 3D một hình ảnh được pixel hóa thành các khối lập phương nhỏ
- Để làm điều đó, tôi muốn chuyển PNG thành tệp STL, nhưng đó không phải trọng tâm của dự án
- Nó chỉ là việc cần xảy ra ở giữa chừng. Vì thế tôi yêu cầu LLM giải quyết việc đó
- Một ví dụ khác nữa là gần đây tôi muốn thiết lập một dự án mới bằng Docker Compose
- Tôi cứ gặp lỗi và dù thế nào đi nữa cũng chỉ muốn nó chạy được trước, rồi sau đó mới tìm hiểu xem có gì sai
- Thế là cuối cùng tôi qua lại nhiều vòng chỉ bằng cách sao chép từng thông báo lỗi, rồi rốt cuộc cũng có được một giải pháp hoạt động.
- Tôi cũng nhận ra rằng trong nhiều trường hợp, mình bắt đầu bằng cách yêu cầu một giải pháp hoàn chỉnh rồi sau đó hỏi các gợi ý về cách chỉnh sửa nó
- Trong cuộc trò chuyện này chẳng hạn, tôi bắt đầu bằng việc yêu cầu một chương trình phân tích cú pháp HTML, rồi từ đó hỏi thêm tham chiếu API hoặc gợi ý cách cải thiện nó
- Một lần khác, tôi muốn theo dõi máy tính sử dụng bộ nhớ và CPU theo thời gian như thế nào
- Tôi có thể đã dành vài phút để tìm đúng lệnh và gói chúng vào một script làm đúng điều mình muốn, nhưng thay vào đó tôi chỉ yêu cầu mô hình ngôn ngữ làm giúp
- Gần đây tôi cũng định nghịch một chút phần cứng điện tử, có một chương trình C chạy trên Arduino nhưng tôi muốn nó chạy trên Raspberry Pi Pico dùng MicroPython
- Quá trình chuyển đổi này không có gì thú vị. Nó chỉ cần được hoàn thành
- Thế nên thay vì tự làm, tôi yêu cầu mô hình ngôn ngữ làm giúp
- Với một dự án khác, tôi cần phân loại một số hình ảnh bằng một mô hình ML thú vị nào đó trong một vòng lặp tương tác
- Tôi có thể tự viết, nhưng cũng có thể chỉ cần nhờ mô hình làm thay
Giải thích điều gì đó cho tôi
- Gần đây tôi bắt đầu quan tâm đến đồ điện tử
- Hồi nhỏ tôi từng vọc đồ điện tử và cũng học vài môn ở đại học
- Nhưng giờ khi định làm dự án thực tế thì lại có hàng nghìn thứ lặt vặt mà tôi không biết, khiến việc bắt tay vào làm rất khó
- Tôi có thể đọc sách điện tử thực hành, và có lẽ như vậy sẽ giúp tôi hiểu bài bản về chủ đề này, nhưng tôi không muốn dành thời gian theo kiểu đang học hành
- Một nửa lý do tôi làm đồ điện tử là để nghỉ ngơi khỏi việc đọc và viết bài báo cả ngày
- Điểm hay của LLM ở đây là, dù nó không uyên bác bằng người hiểu biết nhất thế giới, vẫn có hàng nghìn, hàng triệu người biết câu trả lời cho những câu hỏi về đồ điện tử mà tôi có thể đặt ra
- Vì vậy mô hình ngôn ngữ có lẽ cũng sẽ biết câu trả lời đó
- Và nó sẵn sàng trả lời mọi câu hỏi, nên tôi có thể tận hưởng phần thú vị mình muốn mà không phải vật lộn với tiểu tiết
- Và đúng là nếu tìm trên internet rồi chịu khó thêm một chút tôi cũng có thể tìm ra đáp án, nhưng sau một ngày làm việc với mã nghiên cứu phức tạp, sự tiện lợi của việc chỉ cần hỏi mô hình thật sự rất dễ chịu
- Vậy nên đây là một số ví dụ về việc tôi hỏi mô hình ngôn ngữ những câu hỏi cơ bản về cách đồ điện tử hoạt động
- Những câu trả lời này có hoàn hảo không? Ai mà biết được
- Nhưng có tốt hơn là chẳng biết gì không?
- (Bài này đang khá dài, và đến mức này thì có lẽ tôi cũng mệt vì viết chẳng kém gì bạn mệt vì đọc. Nên tôi sẽ cứ để lại các ví dụ này mà không giải thích gì thêm.)
- Những câu hỏi cơ bản về thiết kế PCB
- Những câu hỏi cơ bản về hàn mạch
- Những câu hỏi cơ bản về tụ điện
- Những câu hỏi cơ bản về LED
- Những câu hỏi cơ bản về đĩa mềm
- Tôi có thể tiếp tục nữa, nhưng chắc bạn đã hiểu ý rồi
Giải quyết công việc bằng các lời giải đã biết
- Hầu như mọi thứ đều đã có người làm trước rồi
- Gần như chẳng có việc gì bạn muốn làm mà thực sự mới
- Và mô hình ngôn ngữ làm rất tốt việc đưa ra lời giải cho những thứ nó từng thấy trước đó
- Trong một dự án gần đây, tôi cần cải thiện hiệu năng của một đoạn mã Python
- (1) Tôi yêu cầu LLM viết lại nó bằng C, rồi
- (2) yêu cầu nó xây dựng giao diện để có thể gọi mã C từ Python
- Những việc này không phải là “khó”
- Việc chuyển từ Python sang C có lẽ chỉ mất 1–2 tiếng
- Và dù tôi không biết chính xác Python->C API hoạt động ra sao, tôi vẫn có thể tìm ra bằng cách đọc tài liệu
- Nhưng nếu phải tự làm thì tôi sẽ không bao giờ làm
- Vì đây không nằm trên đường găng, nên tốt hơn là cứ chờ và để máy tính giải quyết thay vì dành thời gian làm cho những thứ không phải chạy thường xuyên nhanh hơn
- Nhưng với các chương trình đơn giản, việc chuyển từ Python sang C phần lớn là một quy trình kỹ thuật, và chỉ có đúng một quy ước gọi Python->C tiêu chuẩn
- Nên tôi cứ yêu cầu LLM làm thay.
- Từ đó về sau, tôi kỳ vọng đây là điều mình có thể làm, và về cơ bản mỗi khi cần một đoạn mã nhanh, tôi chỉ mô tả thứ mình muốn bằng Python rồi yêu cầu C đã được tối ưu
- Những lúc khác tôi cũng làm tương tự, nhưng sẽ yêu cầu đầu ra bằng Rust thay vì C nếu tôi cảm thấy dễ đánh giá độ đúng của đầu ra Rust hơn khi so với đầu ra C
- Một ví dụ khác là song song hóa một hàm Python bằng thư viện multiprocessing, việc đó không khó
- Bạn chỉ cần viết một ít mã boilerplate và về cơ bản là nó sẽ chạy
- Nhưng việc viết phần mã đó hơi đau đầu và làm gián đoạn công việc tôi thật sự muốn làm
- Giờ mỗi khi cần, tôi chỉ yêu cầu LLM làm thay
- Hoặc nhiều khi khi thử một API nào đó, ban đầu tôi chỉ viết một yêu cầu curl để làm cho thứ đó chạy được trước
- Rồi một khi nó đã chạy và tôi muốn lặp lại công việc đó theo cách lập trình được, tôi sẽ chuyển nó sang Python
- Trước đây tôi thường làm mấy trò rất xấu xí như chỉ gọi os.popen() rồi chạy lệnh curl, mà như vậy thì không ổn
- Chuyển sang thư viện requests của Python sẽ tốt hơn. Nhưng việc đó mất thời gian nên tôi sẽ không làm
- Còn bây giờ tôi chỉ cần yêu cầu LLM làm thay là có thể có một chương trình sạch sẽ hơn nhanh hơn
- Với một dự án tương lai mà có lẽ tôi sẽ kể đến ở đây, tôi cần biết người ta dùng những loại thứ gì với một bộ phát vô tuyến đơn giản
- Vì thứ tôi thật sự muốn là một câu trả lời ở mức người bình thường trung bình, nên LLM là lựa chọn hoàn hảo!
Sửa các lỗi phổ biến
- Trước năm 2022, nếu tôi gặp thông báo lỗi từ một công cụ hoặc thư viện nổi tiếng nào đó, tôi sẽ theo giao thức sau:
- Sao chép thông báo lỗi
- Dán vào Google
- Nhấp vào liên kết Stack Overflow ở đầu danh sách
- Kiểm tra xem câu hỏi đó có đúng là điều tôi muốn hỏi không; nếu không thì quay lại bước 2
- Áp dụng lời giải hàng đầu vào công việc
- Nếu không chạy thì quay lại bước 2, đổi từ khóa tìm kiếm, cầu nguyện, v.v.
- Thành thật mà nói, công cụ bị hỏng thường nằm cách công việc tôi thực sự muốn giải quyết khoảng 5 bước, và tôi không thực sự quan tâm nó hoạt động ra sao, tôi chỉ cần nó chạy thôi
- Còn vào năm 2024 thì sao?
- Sao chép thông báo lỗi
- Hỏi LLM: “Làm sao để sửa lỗi này? [lỗi]”
- Áp dụng lời giải từng bước mà LLM đề xuất
- Nếu không chạy thì nói: “Nó không hoạt động”
- Tôi không có bản sao nào để đưa ra làm ví dụ cho việc này. (Hoặc là tôi tìm suốt 1 tiếng mà vẫn không thấy.) Nhưng thực ra có một lý do chính đáng cho điều đó: vì tôi đã nhúng nó thẳng vào quy trình làm việc của mình
- Tôi là người dùng Emacs
- Tôi đã thiết lập môi trường sao cho mỗi khi chạy chương trình và nó thoát với mã trạng thái khác 0 (tức là có vấn đề xảy ra), hệ thống sẽ tự động gọi mô hình LLM nhanh nhất hiện có để yêu cầu giải thích câu trả lời, đồng thời yêu cầu một bản vá có thể áp dụng trực tiếp để sửa lỗi trong mã
- Các mô hình ngày nay vẫn chưa đủ giỏi để vượt tác giả trong việc này trong đa số trường hợp, nhưng chúng đang dần tiến gần hơn
- Và thỉnh thoảng khi LLM sửa được một lỗi mà tôi biết chỉ là lỗi gõ nhầm đâu đó và sẽ là cơn ác mộng để lần ra, thì đó là một bất ngờ rất dễ chịu
Tổng kết
- Tất cả các cuộc trò chuyện tôi liên kết ở trên chiếm chưa tới 2% tổng số cuộc trò chuyện tôi đã có với LLM trong năm qua
- Lý do tôi không liên kết các cuộc trò chuyện khác không phải vì đó là những trường hợp mô hình thất bại (dĩ nhiên cũng có nhiều trường hợp như vậy)
- mà là vì (1) chúng chỉ lặp lại cùng một khuôn mẫu như các cuộc trò chuyện tôi đã liên kết, hoặc
- (2) không dễ để giải thích chuyện gì đang diễn ra và cũng khó để tự mình thấy ngay vì sao chúng hữu ích
- Tôi kỳ vọng việc sử dụng các mô hình này sẽ tiếp tục tăng trong tương lai
- Nhân tiện, trong năm 2024 tôi đã thực hiện nhiều hơn 30% truy vấn LLM qua giao diện web so với năm 2023, còn mức tăng của truy vấn API thì tôi không thể thống kê, nhưng tôi nghĩ ít nhất cũng tăng khoảng 2 đến 3 lần
Hãy đánh giá những việc LLM có thể làm, không phải những việc nó không thể làm
- Khi đánh giá ứng viên trong phỏng vấn, cần chú ý vào những gì họ có thể làm hơn là những gì họ không thể làm
- Nếu ném cho LLM những câu hỏi vụn vặt, nó có thể trông rất kém cỏi. Ví dụ, nếu hỏi bằng tiếng Trung, ngôn ngữ có 1 tỷ người dùng, thì nó có thể khó trả lời cho đúng
- Ngay trong khoa học máy tính cũng có rất nhiều lĩnh vực tôi không biết, chẳng hạn chỉ biết đến mức câu lệnh
SELECT của SQL
- Tôi khó hiểu khi trên mạng có người cho rằng LLM bị thổi phồng quá mức chỉ vì nó không làm được một task cụ thể
- Không đếm được số từ trong câu
- Không viết được một bài thơ mà mọi từ đều bắt đầu bằng 'a'
- Không nhân được số có hai chữ số
- Không chọn được phần tử ngẫu nhiên từ một danh sách
- Tuy nhiên, tôi tự hỏi liệu đã bao giờ người ta thực sự nghĩ LLM là công cụ phù hợp để làm những việc như vậy hay chưa
- Cũng như chúng ta không nói con người là vô dụng chỉ vì không thể tự nhẩm phép chia số nguyên 64-bit trong đầu, việc dựng ra một bài toán mà LLM không giải được rồi coi thường LLM là không hợp lý
- Điều quan trọng là liệu có task nào mà LLM có thể tạo ra giá trị hay không
- Các lập trình viên vốn đã hiểu rất rõ rằng ngôn ngữ khác nhau sẽ hữu ích cho mục đích khác nhau
- Viết hệ điều hành thì C phù hợp hơn Python
- Không ai nói Python vô dụng vì nó không thể căn chỉnh biến theo biên 32 byte. Chỉ là mức độ trừu tượng khác nhau mà thôi
- LLM cũng vậy, nó hoạt động ở một mức độ trừu tượng rất cao
- Khó có thể kỳ vọng LLM làm tốt những công việc mà ngay cả một chương trình đơn giản cũng có thể giải quyết
- Nhưng có thể kỳ vọng nó giải quyết được những loại công việc khác
Kết luận
- Hai động cơ để viết bài này
- Để khẳng định rằng LLM, trên phương diện cá nhân, đã và đang mang lại rất nhiều giá trị
- Để cho những người thấy ý tưởng về LLM là hay nhưng chưa biết nó có thể giúp mình thế nào các ví dụ ứng dụng cụ thể
- Giá trị của LLM
- LLM không thể làm mọi thứ, nhưng ngay cả với các mô hình hiện tại, nó vẫn mang lại giá trị đáng kể
- Ví dụ, nó có thể chẩn đoán lỗi CUDA và chỉ cách cài đặt lại package, viết lại một chương trình bằng C, hoặc dạy về một chủ đề cụ thể
- Đây là những việc mà một sinh viên đại học cũng có thể làm nếu bỏ ra vài giờ, nhưng không có sinh viên nào lúc nào cũng sẵn sàng trả lời câu hỏi. Trong khi đó LLM thì có thể
- Sự phát triển của LLM và tình hình hiện tại
- Chỉ 5 năm trước, điều tốt nhất LLM có thể làm là viết ra một đoạn tiếng Anh nghe có vẻ hợp lý, và hoàn toàn không có tính thực dụng
- Nhưng ngày nay, LLM nâng năng suất cho công việc lập trình lên ít nhất 50% và loại bỏ các công việc nhàm chán
- Nhờ LLMs, tôi đã hoàn thành nhiều dự án mà nếu không thì tôi thậm chí đã không thử làm.
- Phản bác quan điểm về tính hữu ích của LLMs
- Tôi phản đối nhận định rằng "LLM bị thổi phồng quá mức và không có giá trị thực chất"
- Với cá nhân tôi, LLM mang lại giá trị rất lớn
- Ngay cả tôi, người đã có 20 năm kinh nghiệm lập trình, cũng được LLM giúp tăng năng suất đáng kể
- Tôi nghĩ ngoài tôi ra còn có rất nhiều người có thể hưởng lợi từ LLMs
- Triển vọng sắp tới
- Chỉ với các mô hình hiện tại, LLM đã mang lại rất nhiều giá trị
- Tôi vừa kỳ vọng vừa lo ngại về việc LLM sẽ phát triển ra sao trong 5 năm tới
- Tôi dự định sẽ bàn về các dự đoán đó trong bài viết tiếp theo
7 bình luận
Đây là một bài viết rất dễ đồng cảm. Tác giả dùng hay đến mức đọc cũng thấy mệt..;
Tôi cũng có vẻ không rời khỏi cửa sổ terminal. Tôi nghĩ các lập trình viên lười chắc ai cũng dùng như thế này.
Nếu là vấn đề đơn giản thì dùng
copilot.vim, mở bất kỳ buffer nào ra rồi dẫn dắt câu trả lời bằng phần tự động hoàn thành.Nếu không nhớ lệnh shell thì đã có lệnh
copilot-cli ??, nên không cần phải đi tìm kiếm nữa.Các công cụ hoàn thành mã còn hiểu ý và tạo mã trước cả khi tôi kịp hỏi.
Đúng như bài viết nói, dù tôi biết phải tìm kiếm thế nào, tôi vẫn thích LLM hơn vì có thể hỏi tự do mà không cần câu nệ hình thức.
Tôi cũng đang dùng copilot-vim! Cho tôi hỏi
copilot-clilà cái nào vậy?https://www.npmjs.com/package/@githubnext/github-copilot-cli
Đó là cái này!
https://docs.github.com/ko/copilot/…
Cũng có phiên bản mở rộng cho GitHub CLI, nhưng cách sử dụng hơi khác một chút.
Thật tuyệt khi ngay cả trên dòng lệnh cũng nhận được sự trợ giúp của Copilot, cảm ơn bạn!
Khi biết cách làm nhưng lười gõ, tôi giao cho ChatGPT làm. Có lẽ phải biết cách rà soát kết quả thì mới dùng hiệu quả được.
Tác giả nhấn mạnh mức độ hữu dụng của LLM ở 1. hỗ trợ học tập 2. tự động hóa các công việc nhàm chán.
Dạo này với tôi cũng đúng y như vậy. Nghĩ lại những việc gần đây đã làm thì
Tất nhiên đây đều là những việc có thể làm được cả khi không có LLM, nhưng chỉ cần sai nó làm thì nhanh hơn, nên rất hợp để dùng cho mục đích Life Hacking.
Có rất nhiều điều khiến tôi đồng cảm.
Nó khá giống với những gì tôi cảm nhận khi sử dụng AI.