隨時隨地玩 AI 生成的 Pong 的無限版本



目前有一個 人們對旨在幫助程序員編寫軟件的 AI 工具很感興趣。 GitHub的 副駕駛 和亞馬遜的 密碼密語者 應用最初為生成自然語言文本而開發的深度學習技術,通過調整它來生成源代碼。 這個想法是程序員可以使用這些工具作為一種自動完成類固醇,使用提示生成開發人員可以集成到他們的軟件中的代碼塊。

看著這些工具,我想知道:我們能否邁出下一步,讓人類程序員
跳出循環? 只需按一下按鈕,就可以按需編寫和部署工作程序嗎?

在我的日常工作中,我為微控制器編寫嵌入式軟件,所以我立即想到了一個獨立的手持設備作為演示平台。 一個屏幕和一些控件將允許用戶請求簡單的人工智能生成的軟件並與之交互。 於是誕生了無限的想法
.

我選擇了
出於多種原因。 遊戲玩法很簡單,在 Atari 的原版 1972 上有著名的解釋 街機櫃以簡潔的勝利:“避免錯過高分球。” 播放所需的全部是向上按鈕和向下按鈕。 與 1970 年代和 80 年代創作的許多經典 Atari 遊戲一樣, 可以用相對較少的代碼行編寫,並且已經作為編程練習實施了很多很多次。 這意味著作為 AI 工具訓練數據攝取的源代碼存儲庫包含豐富的 例如,增加獲得可行結果的可能性。

我用了 6 美元
樹莓派 Pico W 作為我的手持設備的核心——它的內置無線允許直接連接到基於雲的 AI 工具。 為此,我安裝了一個 9 美元 Pico LCD 1.14顯示模塊. 其 240 x 135 彩色像素足以 ,模塊集成了兩個按鈕和一個兩軸微型操縱桿。

我為 Pico 選擇的編程語言是
微型蟒蛇,因為它是我通常使用的,因為它是一種解釋語言代碼,無需基於 PC 的編譯器即可運行。 我使用的 AI 編碼工具是 開放人工智能法典. 可以通過以下方式訪問 OpenAI Codex 使用 Web 的 HTTP 格式響應查詢的 API,使用 請求 ujson 可用於 MicroPython 的庫。 在當前測試期間,使用 OpenAI Codex API 是免費的,但需要註冊並且查詢限制為每分鐘 20 次——即使是最狂熱的人也仍然綽綽有餘 騎師。

一個 LCD 屏幕,左側有一個操縱桿,右側有兩個按鈕,一個微控制器和一條 USB 數據線。
只需要兩個硬件模塊——Rasperry Pi Pico W [bottom left] 提供計算能力和帶有屏幕和簡單控件的插件板 [top left]. 除了 USB 電纜供電外,不需要其他任何東西。詹姆斯普羅沃斯特

下一步是創建容器程序。 該程序負責檢測何時有新版本 通過按鈕請求,當它向 OpenAI Codex 發送提示、接收結果並啟動遊戲時。 容器程序還設置了一個硬件抽象層,處理 Pico 和 LCD/控制模塊之間的物理連接。

整個項目中最關鍵的元素是創建每次我們希望它吐出新版本時傳輸到 OpenAI Codex 的提示
. 提示是一大塊純文本,帶有最基本的源代碼框架——幾行概述了許多視頻遊戲通用的結構,即我們想要使用的庫列表,以及對處理事件(例如按鍵)的調用),根據這些事件更新遊戲狀態的調用,以及在屏幕上顯示更新狀態的調用。

返回的代碼產生了一個可行的 大約 80% 的時間都在玩遊戲。

如何使用這些庫並填寫調用取決於 AI。 將這種通用結構轉變為
遊戲是嵌入的註釋——在人類編寫的源代碼中是可選的,在提示中非常有用。 評論用簡單的英語描述了遊戲玩法——例如,“遊戲包括以下類……球:這個類代表球。 它具有位置、速度和調試屬性 [sic]. Pong:這個類代表遊戲本身。 它有兩個槳和一個球。 它知道如何檢查遊戲何時結束。” (我的容器和提示代碼是 在 Hackaday.io 上可用) (去 黑客日.io 玩無數個 g 使用 Raspberry Pi Pico W 玩遊戲; 我的容器和提示代碼在網站上。)

從 AI 返回的是大約 300 行代碼。 在我早期的嘗試中,代碼無法顯示遊戲,因為 MicroPython 的版本
幀緩衝區 與我的模塊一起工作的庫不同於 OpenAI Codex 訓練的幀緩衝區庫。 解決方案是添加我的庫使用的方法的描述作為提示註釋,例如:“def rectangle(self, x, y, w, h, c)”。 另一個問題是許多訓練示例使用了全局變量,而我最初的提示將變量定義為範圍限定在單個類中的屬性,這通常是一種更好的做法。 我最終不得不放棄,順其自然,並將我的變量聲明為全局變量。

九個例子截圖
OpenAI Codex 創建的 Pong 變體在球和槳的大小和顏色以及分數的顯示方式方面差異很大。 有時,代碼會導致無法玩遊戲,例如在右下角,玩家的球拍被放置在彼此之上。詹姆斯普羅沃斯特

從我當前的提示返回的代碼產生了一個可行的
大約 80% 的時間都在玩遊戲。 有時遊戲根本無法運行,有時它會產生一些可以運行但不完全正常的東西 ,例如當它允許槳葉除了上下移動之外還可以左右移動時。 有時是兩個人類玩家,有時是您與機器對戰。 由於未在提示中指定,因此 Codex 採用這兩個選項之一。 當您與機器對戰時,看到 Codex 如何實現那部分代碼邏輯總是很有趣。

那麼這段代碼的作者是誰呢? 當然,存在法律糾紛,例如,該代碼應如何獲得許可,因為大部分訓練集都基於開源軟件,對從其派生的代碼施加了特定的許可條件。 但是許可和所有權與作者身份是分開的,關於後者,我認為它屬於使用 AI 工具並驗證結果的程序員,就像你用公司製作的繪畫程序創作藝術品一樣,使用他們的畫筆和過濾器。

至於我的項目,下一步是研究更複雜的遊戲。 1986 年街機大熱
打磚塊 按需,有人嗎?

發佈留言