3 điểm bởi GN⁺ 2023-11-01 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2023-11-01
Ý 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

    • Với mục đích kiểm tra xem có đúng cách không thì nó tốt đến đáng ngạc nhiê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
    • Trải nghiệm của tôi cũng tương 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
    • Điều bị bỏ qua là đa số mọi người mỗi ngày chỉ có vài giờ có thể code căng ở mức năng suất cao nhất
      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”
    • Tôi tò mò không biết bạn dùng GPT-4 qua ChatGPT Plus hay qua API
      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
    • Đừng đoán thời gian tự viết sẽ mất bao lâu; tốt hơn là hãy thực sự đo thử
      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ố đó

    • https://twitter.com/javilopen/status/1719363669685916095 có liên quan
      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
    • Tôi đã thử dùng khả năng sinh mã của ChatGPT để tạo toàn bộ một website dựa trên Flask, Python, HTML+JS+CSS và SQLite, và điều đó thật đáng kinh ngạc
      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
    • Có nhiều bản clone Angry Birds mã nguồn mở, nên nó không ấn tượng như vẻ ngoài
      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
    • Một câu hỏi thú vị khác là “nó hoạt động thế nào trong tất cả những trường hợp khác không xuất hiện trong video”
    • Thành thật mà nói, hơi khó tin
      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ùng
      Kị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

    • Đây là một cách tiếp cận thú vị với màn hình tải, và cá nhân tôi từng nghĩ sẽ có nhiều game dùng tính năng kiểu này hơn rất nhiều
      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...
    • Một sự thật thú vị là mini game trong màn hình tải từng có một bằng sáng chế ngăn cản kiểu phát triển đó
      Theo tôi biết thì Namco sở hữu nó, và có thể thấy trong Ridge Racer
    • Bài kiểm tra gõ ngón tay:
      https://psycnet.apa.org/record/2014-37068-023
    • Tôi vẫn nhớ màn hình tải của Budokai 3 (PS2), nơi mình xoay loạn cần analog và nhìn Saibamen lớn lên
  • 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?

    • Về mặt khái niệm, nó gần như là một giải pháp hoàn hảo
      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
    • Thật sự chỉ mất vài phút thôi sao? Sẽ rất tốt nếu bạn tự thử và đưa ra phản hồi thực tế thay vì phỏng đoán
      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 là 100 lần thì có khi ban đầu họ vốn không năng suất lắm
      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

    • Tôi thật lòng không lo về phần đó
      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

    • Trước đây tôi từng dùng Midjourney để tạo token TTRPG, và cách hiệu quả nhất là viết aerial view
      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