朋友 Thinker Li 最近展示了他如何跟 Github Copilot 結隊編程的紀錄,展示從註解開始撰寫程式碼的新流程(連結)。其實,我這幾日也都是如此編程。在有了 Github Copilot, ChatGPT,以及之後可能推出的 Test Copilot。讓我驚覺五年前的情境想像,似乎真的到來了,屬於「文學編程」(Literate Programming)的文藝復興時刻。

文學編程

文學編程(Literate Programming)是一種程式設計典範,由著名的電腦科學家 Donald Knuth 在 1980 年代提出。這種方法融合了程式碼和敘述性文本,以提高軟體的可讀性和可維護性。

在文學編程的框架下,程式設計師以人的思維模式來寫程式,而非依據電腦的運行邏輯。程式碼和註解的組織方式以敘述性的文本為主,故名「文學編程」。這種方式讓開發者可以將程式設計的思維過程詳細記錄下來,讓後來的讀者更容易理解並維護程式。以下是一個使用 Python 的文學程式設計的例子。

假設我們要寫一個程式,該程式的功能是檢查一個字串是否是回文。在文學程式設計中,我們會如下描述這個過程:

'''
這個程式的目的是確認一個輸入的字串是否為回文。
回文是一種正向與反向讀取都一樣的字串,
例如 "radar" 或 "level"。

首先,我們定義一個函數 is_palindrome,
接受一個字串作為輸入。
'''
def is_palindrome(input_string):
    '''
    在這個函數中,我們首先將輸入的字串轉換為小寫,
    並移除所有的空格。這是因為在判斷回文時,
    我們通常忽略大小寫和空格。
    '''
    formatted_string = input_string.lower().replace(' ', '')

    '''
    然後,我們將格式化後的字串反轉,並將其與原始的格式化字串進行比較。
    如果兩者相同,那麼原始的輸入字串就是一個回文。
    '''
    reversed_string = formatted_string[::-1]
    if formatted_string == reversed_string:
        return True
    else:
        return False

'''
現在我們已經定義了 is_palindrome 函數,
我們可以用它來檢查一個字串是否為回文。
例如,我們可以檢查字串 "Able was I ere I saw Elba" 是否為回文:
'''
print(is_palindrome('Able was I ere I saw Elba'))

在這個例子中,我們用清楚的語言描述了程式的功能,並解釋了我們為什麼這樣寫程式,這使得程式更容易被人類理解。

這樣一來,使用文學編程的方式,我們將程式碼、註解和範例程式碼結合在一起,讓讀者能夠更清楚地了解函式的用途和如何使用它。同時,這種結構化的方式也有助於提高程式的可讀性和可維護性。換言之,程式設計師的工作更多是以文字的敘述精準表達出需求,從而讓 AI (例如 ChatGPT, Github Copilot)實作。除非程式碼在多次迭代下仍不合需求,才人為介入。

現代的程式設計工具,如 Jupyter NotebookR Markdown,就是將文學編程的理念實踐在現實中的例子。這些工具讓開發者能將程式碼、註解、與視覺化內容融為一體,從而提供更高的可讀性和交互性。

這類工具中,最讓我注意的是 Cursor。它是一個與AI協作的編輯器,是一個與AI協作的編輯器,提供對話、程式碼編輯和調試等功能,旨在提高開發者的生產力和效率。開發者可以與AI進行對話,要求編輯程式碼區塊並查看修改結果。你可與類似ChatGPT的機器人進行對話,它能夠看到您當前的程式碼文件,並基於其理解進行回應。你也可要求AI更改一個程式碼區塊,並且式顯示編輯的結果。這讓您可以快速了解AI的建議修改,並決定是否接受。

就如同文學編程以其獨特的方式改變了我們對程式碼的撰寫和理解,AI DevOps 則以一種全新的方法,將 AI 整合到我們的開發和運營流程中。

AI DevOps

AI DevOps 和傳統的 DevOps 都是為了使軟體的開發和運營更為順暢,但在實施的方式和重點上有所不同。傳統的 DevOps 著重於實現開發與運營的持續集成和持續部署(CI/CD),透過自動化測試、部署等步驟,來提高軟體的交付速度和質量。

而 AI DevOps 則進一步在此基礎上加入了 AI 的元素。AI DevOps 不僅需要考慮軟體的持續集成和部署,還需要對 AI 模型的訓練、部署和維護進行管理。因為 AI 模型的特性,如數據依賴性、變異性以及重複訓練的需求,這都使得 AI DevOps 的實施比傳統的 DevOps 更具挑戰性。

AI DevOps 的目標是在保證模型的性能與質量的前提下,實現 AI 模型的快速迭代和持續優化。為此,AI DevOps 需要利用專門的工具和方法來管理數據、監控模型的性能、並進行版本控制等。

假設我們正在開發一個圖像分類的 AI 模型,我們希望能夠實現模型的快速迭代和持續優化。我們需要建立一個版本控制系統,例如使用 Git,來管理我們的程式碼和模型文件。這可以讓團隊成員共享和協作開發,並追蹤每個版本的變化。然後要設計一個自動化的測試流程,以確保模型在不同的情況下具有良好的性能。這包括設計測試數據集,定義評估指標,並使用自動化測試框架來執行測試。

在模型訓練方面,我們可以利用持續集成和持續部署的概念來自動化訓練流程。例如,我們可以設置一個持續集成的伺服器,監視程式碼庫的變化,當有新的提交時,自動觸發模型的重新訓練。訓練過程可以包括數據的預處理、模型的訓練和評估。

當模型訓練完成後,我們需要進行模型的部署和服務化。這包括將模型封裝成可以運行的服務,並設置相應的 API 介面,以便其他系統和應用程式可以使用這個模型。同時,我們需要確保模型的穩定運行,例如設置監控系統來追蹤模型的性能和使用情況。

這樣典範轉移現象,不僅開始出現在軟體產業中,也可能出現在未來的各行各業。這引發了一個新的問題:在其他產業中,這種以「敘述性思維」為主的工作方式將會帶來怎樣的影響和變革?這是值得所有人深思的問題。

AI 訓練師

近期,作家吳淡如在社交媒體上聲稱自己正在學習「電腦繪圖」,並分享了一幅名為《櫻花貓少女》的作品。然而,一些網友卻揭示此作品實際上是「AI繪圖」的產物。吳淡如對此反駁,將這些指正的網友稱為酸民,並展示自己的手繪作品以證明自己在持續創作。然而,許多藝術創作者認為吳淡如對「電腦繪圖」和「AI繪圖」之間的區別理解不清,因此引起不滿。

這個爭議中,AI繪圖和電腦繪圖之間的區別暴露了一個未來藝術創作的趨勢。儘管有些電繪師可能對AI繪圖感到反感或擔憂,但不可否認的是,AI繪圖的應用將日益增加,並很可能成為電腦繪圖的主流形式。在嚴格的定義下,電腦繪圖是指使用電腦軟體來創建或修改圖像的過程。因此,AI繪圖,作為一種使用特定演算法根據輸入數據生成圖像的工具,無疑也屬於電腦繪圖的範疇。不管電繪師愛或不愛,以後 AI 繪圖都會是嚴格定義下的電腦繪圖。

AI 訓練師是我在五年前設想的一種新職業概念,指涉的是現在透過應用的輸入去訓練操作模型(model),而不是操作模型的參數(parameter)調整模型 的人。訓練師最大的作用便是給與適合當代社會價值的選擇並使用自己的社會資本跟文化資本背書,這是 AI 當前無法感知跟取代的地方。

人類與 AI 的協作行為可以被視為生成對抗網絡(GAN)。GAN是一種深度學習模型,由兩個神經網絡組成:生成器(Generator)和鑑別器(Discriminator)。生成器負責創建偽數據,鑑別器則試圖分辨真實數據與偽數據的區別。GAN 在影像辨識和圖像生成方面取得了驚人的成果。然而,在「後真相時代」,區分真實數據和偽數據的分別並不完全由AI決定,而是需要人類的社會價值觀和判斷力進行評估和判斷。人類的社會價值觀和判斷力,可以發揮其社會資本帶來的影響力,擴散到整個社會,使其真實。

在人類與 AI 的協作中,人類扮演類似生成器的角色,提供創意和想法,而 AI 則像鑑別器,分析人類的創意並提供反饋。同時,AI 的反饋也觸發人類的創意和想法,成為生成器,而人類則扮演鑑別器的角色,試圖分辨真實數據與偽數據之間的區別,做出符合社會價值觀、自身自由意志的選擇判斷與糾錯,並將結果回饋給AI。這樣的互動過程不斷地促進了人類與AI在創新和問題解決方面的進步,並且可以更好地適應社會變遷和價值觀的演變。

總而言之,透過文字或圖像等內容載體輸入想法與創意,與 AI 進行互動,讓 AI 學習人類的行為和思維模式,是一種人類與 AI 協作的模式。AI 訓練師在這種協作中扮演著指導和監督 AI 角色的重要角色。概念則來自一本小說:《軟件體的生命週期》的主角職業 - 虛擬寵物訓練師。

安娜猶豫了一下,當初她上大學時設想的未來可不是這樣。小時候她夢想著追隨弗塞和古道爾的足跡,前往非洲;但等到她研究生畢業時,野外的猿類已所剩無幾,她的最佳選擇就是在動物園工作。而她現在面對的是—份虛擬寵物訓練師的工作,從她的職業軌跡中可以察覺到現實世界的存在在逐漸淡化,影響越來越小。 ~《軟件體的生命週期》

未來不同領域,都會有很多這樣類似角色存在。除了AI 訓練師透過應用的輸入訓練模型得到產出外,我還設想了一種新職業是領域專家。

領域專家

隨著AI技術的發展,尤其是自然語言處理和生成模型(如GPT-4)的飛躍進步,AI已經可以產生令人難以分辨真假的文字內容。這項技術的應用範圍非常廣泛,從寫作助手到客服機器人等,但與此同時,它也帶來了一個非常重要的社會挑戰:AI 可能無意地產生不實資訊,並對使用者產生危害,例如一個使用者可能會就醫學問題諮詢 ChatGPT,但卻得到錯誤的答案,延誤就醫。

當我們面臨判斷訊息真實性的挑戰時,領域專家的角色也顯得尤為重要。他們可能並不擁有電腦科學的專業背景,但他們的權威性卻在確定訓息真實性上起著決定性的作用。領域專家的任務是展示知識權威,通常在社會上擁有話語權,例如律師,醫師等等,向下層結構展示何者是真,何者是偽。比擬傳統組織,就是公司的外部委員會一員,例如 Google Ethical Board ,或是企業的獨立董事,健保的專家委員會等等。

由於終端用戶不會關心內部原理,因此我們可以簡單的將 AI 整合系統當作一個黑盒子(事實上目前也是黑盒子),部署時品檢只關心輸入跟輸出的對應關係,讓領域專家做最後的標準把關,去除可能引發的消費者關係衝突,以及拿領域專家代言做「開放洗白」(Open Washing)。AI 訓練師是做價值選擇,做產出。領域專家則做行業標準,做約束,去掉合作溝通成本。當 Github TestPilot 出現後,傳統低階 QA 工程師會被 AI 取代,但守門員(Gate Keeper)因為相依人一生累積的社會資本來取得議事成本,所以必須由人類擔任。

在 AI DevOps 的生命週期中,他們扮演了傳統品質保證(QA)的守門員角色,這就是屬性測試的撰寫者。屬性測試(Property-based Testing)是一種較少見的測試方式,其核心理念是以問題的性質,而非特定的案例來設計測試。

相對於傳統的單元測試(Unit Testing),我們在這裡不再只專注於單一的、特定的情況或數據,而是設定整體的規則和屬性,使我們的測試能夠涵蓋更廣泛的情況。這樣可以大幅提升我們軟體品質的保障,因為測試不再侷限於開發者能想到的特定情況,而是根據定義的規則,針對各種可能的情況進行測試。

過去,我從未想到語言模型能如此驚人地發展。我曾認為,對於非電腦科學專業的人來說,在程式語言中進行屬性測試似乎是一個遙遠的目標。我們甚至考慮過需要創建一種類似於 CSS 的特定領域語言(DSL)來提供幫助。然而,GPT-4 的出現徹底改變了這種情況。

現在,我們只需用類似於法律文件或官方文件那樣清晰、減少歧義的自然語言來指導模型,它就能生成相應的測試程式碼。接著,資深的 QA 專業人員和領域專家可以協作,以確保這些自動生成的程式碼是準確無誤的。

結論

我們正在目睹一種新型的程式設計範式的崛起:文學程式設計。這種由高德納提出的方法將讓程式設計師用他們自己的思維邏輯和流程來開發程式,不再受制於電腦強加的方式和順序。諸如 Github Copilot 和 ChatGPT 已開始被開始應用到文學編成設計。

我們也需要注意,這類與 AI 協作的方式也漸漸蔓延到其他產業,而即便是使用相同的AI模型,不同的輸入(提示工程)會產生不同的結果。這引出了一個重要的角色:AI訓練師。他們不僅需要為AI提供適當的指導,更需要具備社會和文化資本來對AI的行為進行背書。同時,我們也需要領域專家來作為把關者,確定什麼是真實的,什麼是偽造的。他們不需要擁有電腦科學背景,但他們的話語具有權威性,他們的判斷具有決定性影響。

不可否認的是,這個過程可能會面臨許多挑戰,如智慧財產權的問題、數據保護規定、道德與倫理問題等。對此,我們需要一種監管模型來處理這些問題。例如,OpenAI在幾年前發表的論文,認為應當透過私人市場來達成監管 AI 安全,其蓋念類似 IEEE 與各國政府關係。在 Model 部署過程中使用 DAO 治理的去中心化協議,讓使用者深入產品部署決策,則是另一種實現方向。