Sao chép 'Angry Birds' chỉ bằng AI
(twitter.com/javilopen)- Javi Lopez đã dùng GPT-4 để tạo mã và Midjourney·DALL·E 3 để tạo đồ họa, qua đó làm ra Angry Pumpkins, một trò chơi vật lý 2D phong cách Angry Birds
- Thành phẩm có thể chơi trên web nhưng không hoạt động trên thiết bị di động, và người chơi cũng có thể tự tạo màn chơi của riêng mình theo phần hướng dẫn bên dưới màn hình game
- Phần lớn đồ họa được tạo bằng AI sinh ảnh, còn một số sprite được tinh chỉnh cho phù hợp với game bằng Photoshop/Photopea sau khi xóa nền và crop
- Mã nguồn bắt đầu dựa trên matter.js và p5.js, rồi được mở rộng thông qua quá trình lặp đi lặp lại với GPT-4 để chỉnh sửa cách bắn, va chạm, hạt, hình dạng quái vật và xử lý va chạm gián tiếp
- Toàn bộ mã có khoảng 600 dòng; dù không tự tay viết mã, anh vẫn cần một quy trình lặp để mô tả lỗi và sửa chúng, thay vì nhận được một trò chơi hoàn chỉnh chỉ từ một prompt
Kết quả Angry Pumpkins
- Angry Pumpkins là một trò chơi vật lý 2D vận hành tương tự Angry Birds, được tạo bằng GPT-4, Midjourney và DALL·E 3
- Có thể xem trò chơi chơi được tại Angry Pumpkins
- Hiện chưa hoạt động trên thiết bị di động
- Nếu đọc phần hướng dẫn bên dưới màn hình game, bạn có thể xem cách tự tạo và chơi màn của riêng mình
- Javi Lopez cho rằng một phương thức làm việc mới, nơi con người tạo ra thứ gì đó chỉ bằng ngôn ngữ tự nhiên, đang trở nên khả thi, và ông xem đây là một “khoảnh khắc mang tính lịch sử”
Quy trình làm đồ họa và mã
-
Tạo ảnh và xử lý sprite
- DALL·E 3 được dùng để tạo màn hình chính mang không khí Halloween, logo “Angry Pumpkins” và màn hình tiêu đề có nút Play
- Midjourney được dùng để tạo nền nghĩa địa, địa hình 2D, nhân vật bí ngô, quái vật xanh, thùng gỗ, xương, đá và các vật thể trong game như ván gỗ
- Các đối tượng được tạo dưới dạng “sprite stylesheets”, sau đó được crop và xóa nền bằng Photoshop/Photopea
- Những chi tiết nhỏ được bổ sung bằng inpainting của Midjourney
-
Logic game được tạo bằng GPT-4
- Toàn bộ mã nguồn được công khai tại sketch.js
- Mã game dài khoảng 600 dòng, và Javi Lopez cho biết không có đoạn mã nào do ông trực tiếp viết
- Prompt ban đầu là tạo một trò chơi đơn giản bằng matter.js và p5.js, trong đó người chơi dùng chuột để điều chỉnh góc và lực bắn quả bóng, rồi bắn trúng các thùng được xếp chồng bằng vật lý 2D
- Sau đó, ông liên tục yêu cầu bổ sung cơ chế bắn chuột kiểu Angry Birds, sửa lỗi
Uncaught ReferenceError: Constraint is not defined, thêm hiệu ứng hạt cho đuốc, xử lý quái vật hình tròn và đánh giá va chạm gián tiếp
Việc chỉnh sửa lặp lại quan trọng hơn một prompt duy nhất
- Điểm cốt lõi không phải là yêu cầu một trò chơi hoàn chỉnh trong một lần, mà là bắt đầu từ hành vi đơn giản rồi liên tục mở rộng và sửa chữa
- Mỗi khi phát sinh vấn đề, ông mô tả lỗi thật rõ ràng để GPT-4 sửa lại
- Hiện tại, GPT-4 vẫn chưa ở giai đoạn có thể tạo toàn bộ trò chơi chỉ bằng một prompt, nhưng bài viết thể hiện kỳ vọng rằng trong tương lai, chỉ với yêu cầu bằng ngôn ngữ tự nhiên cũng có thể tạo ra những trò chơi video cấp AAA
1 bình luận
Ý kiến trên Hacker News
Tôi từng làm PM cho Angry Birds, và đây thật sự là một bản demo xuất sắc
Bản gốc dùng Box2D, Lua scripting, và dĩ nhiên kẻ địch lẫn màn chơi đều phải tự tạo thủ công
Với tình trạng công nghệ hiện tại, tôi không kỳ vọng nó sẽ tạo ra một game đình đám; nhiều khả năng bạn sẽ bị giới hạn bởi công nghệ hơn là bởi năng lực của chính mình
Dù vậy, với việc kiểm chứng ý tưởng nhanh, làm prototype, game jam thì đây là công cụ thay đổi cuộc chơi, và cũng có vẻ là một lựa chọn thay thế Scratch tốt để trẻ em chơi đùa với ý tưởng của mình
Gần đây tôi đã làm một thử nghiệm tương tự vì phải tạo một REST API cơ bản và frontend CRUD bằng 2 framework mà tôi không rành, và để GPT-4 tạo toàn bộ code
Khả năng cao là chậm hơn so với việc tự đọc tài liệu rồi viết, và nếu là người quen thuộc với các framework đó thì chắc sẽ nhanh hơn rất nhiều
Những phần phức tạp cần prompt rất cụ thể và dài; mất khoảng 5 giờ để làm toàn bộ app, trong đó khá nhiều thời gian dành để chờ ChatGPT xuất kết quả chậm
Nếu là framework tôi quen thuộc thì có lẽ đã xong trong vòng 2 giờ
Nó chắc chắn hữu ích để kiểm tra xem mình có đang làm đúng cách không, cảm giác như có một chuyên gia luôn sẵn sàng để mình hỏi
Nó cũng tốt trong việc tạo boilerplate code đúng định dạng, nhưng tôi không nghĩ mình sẽ dùng nó trong phát triển hằng ngày nhiều hơn hiện tại
Trong đa số trường hợp, nắm rõ framework và tự viết sẽ nhanh hơn
Tôi thường hỏi những câu như “cấu trúc thư mục nào là tốt cho dự án trên nền tảng {foo}?” hoặc “cách làm {x} theo kiểu idiomatic trong {language y} là gì?”
Nó có lợi thế là đã thấy nhiều dự án ở nhiều ngôn ngữ, nên với một số câu hỏi, chỉ riêng điều đó đã dẫn đến câu trả lời khá tốt
Bạn vẫn phải hiểu lập trình; chỉ là gần như đang gõ code bằng tiếng Anh ngôn ngữ tự nhiên mà thôi
Ngay cả khi bạn trông chừng GPT-4 viết code trong 3 giờ, có thể hôm đó bạn vẫn còn 3 giờ năng suất code cao nhất “chưa dùng đến”
Nếu là API thì cũng muốn biết bạn thường truy cập bằng công cụ nào
Kết quả có thể bất ngờ
Thú vị hơn nhiều so với làn sóng bài kiểu “Tôi đã tạo một ứng dụng iOS bằng ChatGPT trong 30 phút!”
Những bài như vậy có thể chỉ là làm một Hello World đơn giản nên không có nhiều ý nghĩa, còn cái này ít nhất có sản phẩm hoàn chỉnh để xem và thực sự khá ấn tượng
Tuy vậy, các chi tiết cần biết là thời gian mất bao lâu, số lượng prompt, số lần phải chỉnh hướng, và người làm thành thạo đến mức nào với các công nghệ liên quan
Cá nhân tôi cảm thấy ChatGPT rất hữu ích trong nhiều tình huống, nhưng sinh mã không phải một trong số đó
Nội dung là “trò chơi chỉ có 600 dòng và tôi không viết một dòng nào, nhưng [lập trình game] là phần khó nhất”
Nó không phải Hello World, nhưng cũng khó mà xem là khó hơn danh sách mua sắm rất nhiều
Dù vậy, điều ấn tượng nhất là có thể làm Angry Birds chỉ với 600 dòng và vài thư viện
Có khoảng 5 nghìn dòng mã đang chạy và tất cả đều hoạt động. Lưu lượng không lớn, nhưng dù sao vẫn là môi trường production
Việc hiểu các giới hạn, viết prompt tốt hơn, nhận biết khả năng ảo giác và hỏi về rủi ro là những yếu tố rất lớn
Nó đặc biệt hữu ích với những công nghệ tôi không rành. Tôi là lập trình viên Android và đang dùng nó để làm website, thứ tôi đã không tự tay làm trực tiếp khoảng 15 năm
Phần tuyệt nhất là hỗ trợ quản trị hệ thống và vận hành máy chủ; khả năng debug lỗi gunicorn rất tốt
Khi dự án lớn lên và mất ngữ cảnh thì phải chỉnh lại mã đầu ra, nhưng trở ngại lớn nhất trong các dự án lớn hơn là giới hạn độ dài ngữ cảnh, và có vẻ sẽ sớm được nới lỏng
Website tôi làm gần đây là https://cosmictrip.space/, khoảng 95% mã do ChatGPT viết; tôi tạo prompt bằng GPT-4 rồi dùng DALL-E để tạo ảnh vũ trụ
Đó là một site đơn giản, nhưng hiện tôi cũng đang làm một game phiêu lưu AI mở về hình ảnh + văn bản dựa trên GPT+DALL-E
Khi API DALL-E 3 ra mắt, tôi kỳ vọng phát hành trước ngày 6 tháng 11; game phiêu lưu này cũng có hơn 95% mã do ChatGPT viết
Sinh mã tốt đến mức tôi đang dùng API GPT-4 cho agent tự mình xây dựng
Tôi tạo các tác vụ con có cấu trúc bằng function calling, để agent viết mã đó, đồng thời thêm khả năng đưa file vào làm ngữ cảnh hoặc trò chuyện với mã
Chưa đến mức có thể công khai, nhưng năng lực sinh mã của GPT-4 thật sự rất ấn tượng; tuy nhiên cần có kinh nghiệm viết prompt
Prompt đầu tiên viết ra hiếm khi tốt, nên tôi hy vọng agent tôi đang làm sẽ giải quyết tốt phần đó
Ý tưởng là trên một bảng kiểu Jira/Kanban, phân công AI coder cho các tác vụ, con người phê duyệt·chỉnh sửa, và khi AI xác nhận công việc thì ticket tự động di chuyển giữa các cột
Lập trình một trò chơi mới không có hàng chục template sẵn sẽ là phép thử litmus tốt hơn
GPT-4 đúng là làm khá tốt những việc như thế này, nhưng theo kinh nghiệm của tôi, cải tiến lặp đi lặp lại thì không tốt
Cuộc trò chuyện càng dài, nó càng mất ngữ cảnh trước đó và mã được sinh ra lệch khỏi hành vi cũ
Ví dụ, “sửa bug này giúp tôi” rất dễ dẫn tới một giải pháp làm hỏng tính năng khác
Mã trong thread (1) có vẻ tồn tại trong kết quả cuối cùng (2), và việc nó nằm ở đầu file có thể nghĩa là họ đã để ChatGPT sinh lặp theo từng khối hơn 600 dòng
Điều này khá đáng ngờ
Việc một thứ được định nghĩa ở dòng 500 rồi tạo Slingshot mới ở dòng 20 là rất khó xảy ra, trừ khi được chỉ dẫn cụ thể làm như vậy
loadImage('stone2.png');cũng là tình cờ chọn đúng tên file và kích thước sprite sao? Họ đã cung cấp tất cả những thứ đó trong prompt rồi mã được viết ra à? Cần cho xem prompt thực sự đã dùngKịch bản hợp lý hơn nhiều là tạo các đối tượng class tương đối độc lập, rồi con người lắp chúng vào một file lớn, sao chép toàn bộ làm đầu vào và tạo prompt về mã kiểu “hãy viết hàm này”
Khả năng chỉ dùng prompt như tuyên bố không phải là bất khả thi, nhưng có cảm giác họ đang phóng đại mạnh phần “để nó viết toàn bộ code” vì lượt thích và danh tiếng
Có vẻ khả năng cao là họ đã viết tay hoặc lắp ghép một phần mã, đưa vào làm đầu vào rồi prompt kiểu “làm cả phần này nữa”
Vì vậy đầu ra có thể là “100% được sinh”, nhưng không nhất thiết theo cách mọi người đang giả định
Cách tiếp cận này khiến GPT-4 viết lại mã hiện có, nhưng nếu không yêu cầu hoặc thêm rõ các chú thích giải thích ý định trong toàn bộ mã, nó sẽ dần trôi khỏi chức năng trước đó
Nếu không có bộ test, bạn sẽ không nhận ra sự trôi lệch tinh vi này và chức năng sẽ bị hỏng
Cũng không có đề cập nào rằng tác giả đã làm những việc như vậy
Hơn nữa, người này có lợi ích liên quan (4) là bán tài liệu đào tạo AI, nên việc trông giống chuyên gia trong lĩnh vực này là có lợi; khi bị hỏi trên X, họ cũng không cung cấp thêm chi tiết, lịch sử Git từng bước hay prompt thực tế đã dùng
Nhìn vào việc thiếu chi tiết và kết quả khó tin, trong trường hợp này thái độ hoài nghi là hợp lý
Có thể tạo ra kiểu sản phẩm như thế này bằng các mô hình như CodeLlama 34B hoặc GPT-3.5, nhưng có lẽ không phải theo cách được mô tả
Tôi cũng không chắc GPT-4 có làm được không. Prompt trông sơ sài đến mức không giống thực tế (5)
Dù vậy, tôi sẽ rất vui nếu được phản bác bằng nhiều chi tiết hơn, và đúng là GPT-4 là một công cụ tốt
[1] - https://nitter.net/pic/orig/media%2FF9xoI8mXgAAn7v9.jpg
[2] - https://bestaiprompts.art/angry-pumpkins/sketch.js
[3] - https://nitter.net/javilopen/status/1719363669685916095#m
[4] - https://javilopen.substack.com/
[5] - “Bây giờ, hãy làm cho các quái vật có dạng hình tròn, và phải hết sức cẩn thận: áp dụng cùng kỹ thuật đã có cho các đối tượng hình chữ nhật về việc co giãn và vùng va chạm, và đừng làm hỏng như lần trước.”
Thấy con trai cứ bực bội chạm liên tục vào vòng xoay tải, tôi và GPT đã code trò này vào một chiều Chủ nhật rảnh rỗi
https://spinner.franzai.com/
Tôi nghĩ trò chơi loading spinner có tính tương tác có thể trở thành một mẫu UX thú vị
Nó có thể tạo phản hồi rằng hành động của người dùng vẫn có tác động ngay cả khi họ đang chờ đợi
Tất nhiên là tôi nói về game indie chứ không phải game AAA
Tôi nhớ rất rõ từng đọc tin rằng bằng sáng chế này đã hết hạn, nhưng tìm lại thì hóa ra cái “ngày xưa” đó đã là 8 năm trước rồi
https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
Theo tôi biết thì Namco sở hữu nó, và có thể thấy trong Ridge Racer
https://psycnet.apa.org/record/2014-37068-023
Giờ thì không còn nghi ngờ gì nữa rằng AI đang thay đổi việc phát triển phần mềm
Chỉ riêng tuần trước tôi đã có thể tạo 2 dịch vụ cỡ trung, với hàng nghìn dòng mã Python, trong khi Python là ngôn ngữ tôi đã không dùng hơn 10 năm
Điều thực sự ấn tượng là nhìn chung nó viết tốt hơn code mà chính tôi sẽ tự viết
Nếu cần một README.md đẹp, chỉ cần đưa mã nguồn có các route, tham số CLI, v.v. là nó tạo ra cho bạn
Nếu muốn có test thì nó cũng tạo luôn. Chưa bao giờ lập trình viên lại có thời kỳ dễ dàng như thế này
Trong sinh mã, GPT-4 áp đảo GPT-3.5
GPT-3.5 có thể copy khá ổn nếu bạn đưa ví dụ cực kỳ chi tiết, còn GPT-4 thì có cảm giác như nó “suy nghĩ” ở một mức nào đó
Theo trải nghiệm của tôi, ngữ cảnh 32k của GPT-4 khá thường xuyên bị lỗi
Ví dụ nếu tạo hơn 10.000 token, khoảng hơn 30.000 ký tự, bạn có thể phải thử lại vài lần
Ngoài ra ChatGPT không phải giao diện lý tưởng cho các tác vụ không tầm thường
Nên dùng API trực tiếp, hoặc thứ gì đó như Azure OpenAI Chat Playground có thể dùng ngữ cảnh 32k
Nhân tiện quảng bá một chút, tôi đã làm một ứng dụng mã nguồn mở để tự động hóa các việc lặp đi lặp lại trong quá trình tạo prompt: https://github.com/codespin-ai/codespin-cli
Thật thú vị là trong 10 năm qua đã có khoản đầu tư khổng lồ vào các công cụ no-code, nhưng giờ ChatGPT viết code quá tốt đến mức với những người có cảm giác kỹ thuật nhưng không lập trình, có lẽ nó đang trở nên nhanh hơn, linh hoạt hơn và gần như ngang về mức độ dễ dùng
Gần đây tôi phải làm một ứng dụng demo bằng Mendix để tiêu thụ và phát hành REST service, và mất vài ngày để nắm các chi tiết
Nếu làm cùng việc đó bằng ChatGPT với bất kỳ ngôn ngữ nào, chẳng hạn bash, tôi nghĩ có lẽ chỉ mất vài phút
Triển khai và quản lý phiên bản có thể được giải quyết bằng PaaS/IaaS mà không cần nhiều năng lực kỹ thuật, nhất là khi so với chi phí của các nền tảng no-code cho doanh nghiệp
Có thể là thiên kiến cá nhân, nhưng tôi luôn ghét no-code platform vì khi làm việc nghiêm túc thì chúng có vẻ phiền phức hơn, và tôi cũng ghét ActiveRecord ORM vì lý do tương tự
Dù vậy, no-code có vẻ sẽ sớm trở nên lỗi thời
Ai còn muốn kéo thả khi chỉ cần hỏi rồi copy-paste?
No-code thì dễ nhưng cứng nhắc, còn lập trình thì linh hoạt nhưng nhàm chán và dễ lỗi
Nếu bạn có thể diễn đạt điều mình muốn bằng lời để nhanh chóng nhận được code, và code đó đủ sạch, bạn sẽ có sự linh hoạt để chỉnh sửa khi cần
Trong một số trường hợp, như ví dụ này, có khi còn chẳng cần chỉnh sửa
Tôi rất mong chờ tương lai
Chắc cũng không mất nhiều thời gian đâu
Đây là rửa đạo văn bằng thống kê, và nó khá ấn tượng
Cá nhân tôi thấy việc ngăn cơn sốt đào vàng kiểu rửa này là ưu tiên pháp lý cấp bách hơn so với việc giả vờ ngăn HAL trong khi tạo hào lũy thị trường cho những người bán cuốc lớn hiện nay
Chắc chắn có những freelancer hoặc lao động từ xa đã dùng GPT-4 và các công cụ AI đúng cách để tăng năng suất lên 100 lần
Khó mà tưởng tượng những mẹo hay như thế chỉ tồn tại trong chân không
Nghĩ xem 2 năm nữa điều gì sẽ khả thi, thần đèn đã ra khỏi chai rồi
Nếu bạn biết mẹo nào để tăng năng suất “100 lần” bằng ChatGPT thì mong bạn chia sẻ
Thành thật mà nói, mỗi lần thấy những bài như thế này, tôi lại càng lo cho khả năng được tuyển dụng của mình
Tôi không có phương án dự phòng và đã dành quá nhiều thời gian để học kỹ thuật phần mềm, mà tình hình trông không sáng sủa
Như những người khác đã nói, khi người bình thường có thể viết đặc tả sản phẩm chi tiết đến mức LLM tạo ra được phần mềm hoạt động đúng như cần, lúc đó lập trình viên mới gặp rắc rối
Nhưng nghe thì điều đó khá giống lập trình
Tôi nghĩ công việc của chúng ta sẽ thay đổi. Thời gian gõ code trên bàn phím sẽ ít đi, thời gian suy nghĩ xem cần xây gì sẽ nhiều hơn
Thậm chí khả năng cao là chúng ta sẽ trở nên có giá trị hơn, vì sẽ làm được nhiều việc hơn rất nhiều
Tôi đã thử lấy một sprite sheet hoạt ảnh top-down của paladin cho một game RPG tiềm năng, và quá trình thất bại ở đây: https://imgur.com/a/2uJyUT3
Trình tự thực tế là tôi thử các biến thể top-down trước, rồi cuối cùng vì tò mò mới đưa góc nhìn ngang vào
top down lúc được lúc không nên rất thiếu ổn định
Tôi tự hỏi DALL-E 3 có cần hướng dẫn theo kiểu tương tự không