前日,Cognition 公司宣布世界上第一個 AI 程序員 Devin 誕生。
它能自主學習不熟悉的技術,端到端地處理整個開發項目。甚至可以自行修改 bug,訓練自己的 AI 模型。
SWE-bench 基準測試表明,Devin 能夠處理 13.86% 的問題,表現遠超過 Llama、GPT-4 等 AI 大模型。
這一則新聞一出現,立即引爆了整個科技圈,就連 SPotify 的工程師也深感擔憂,表示:" 目前尚不清楚智能體會在幾年内取代軟件開發人員,但免費午餐已經不複存在。"
Devin 的出現再一次提醒了我們,理解機器人、掌控機器人,以及學會與機器人共存已經變得十分迫切。
在此背景下,今天上午,微軟中國首席技術官韋青老師坐客混沌,爲同學們帶來一堂更加落地實操的 AI 課程。
基礎班,他幫助我們學會以工程師的視角寫提示詞,以便更好地讓機器人理解我們的意圖。提高班,他爲我們厘清了智能體的形成與發展,通過實證的方式分享了多個智能應用開發案例。
以下根據課程内容整理:
授課老師 | 韋青 微軟(中國)首席技術官 & 工程師
編輯 | 混沌商業研究團隊
支持 | 混沌前沿課
基礎班:機器有自己的語言
今天,我将針對 " 個人與企業的智能化轉型 " 這個話題探讨一些應用、一些方法,試圖以一種實證的方式讓大家領會這項新技術。希望通過我的梳理,幫助大家厘清思路,加速成長爲新時代的機器使用者。
開始前,我想要提醒大家,思考不能淪爲空想,就算我們已經看到了山的頂峰,不意味着我們已經踏入其中。如果隻靠想象存活在這個範式巨變的時代裏,我們将寸步難行,哪裏也抵達不了。所以,想象隻是初始階段,親身嘗試才是我們更應該留心的。
機器有自己的語言。雖然人類交流的語言與程序員的計算機語言不盡相同,但本質上是相似的。從語法、語義、語用的角度來講,同樣有能指,也有所指,有不同的語法保證語義。
當我們嘗試去描述世界的時候,人與人之間的交流往往會有潛台詞,比如我以爲你知道,所以我不用說出來。但是機器跟我們沒有這樣情感上的默契,這說明如果我們能夠對機器如何理解世界、如何處理數據、如何表征世界有一定了解,能夠極大地提高我們操作、控制、使用機器的能力。
使用機器最好的方法,是把自己放在程序員的位置,了解他們是怎麽在計算機面前描述世界的。舉例說明:大家都知道,世上的所有事情都是靠人或者人指派的對象一步一步實現的,也就是說,我們在描述事情時,不需要達到計算機語言的水準。而且真正的程序員有時候也不一定要寫計算機語言。計算機行業裏,有一種方式叫 " 僞代碼 ",程序員寫了一個大緻的邏輯,但并不是嚴謹到能夠讓計算機識别的一種約定俗成的、邏輯性比較強的描述方式。
某種意義來講,如果我們以僞代碼的方式,不是特别嚴謹和古闆地描述一件事情的流程,基本上會有三個類型:順序結構 、 選擇結構、循環結構。
我們設想一下行動的步驟,往往是做了第一步之後做第二步、第三步、第四步。要麽做到第四步之後出現多條路徑,我們要對此做一些判斷和比對。第三種類型—— " 不斷地重複的 " 即 " 循環 ",是指達到目标後繼續往下走,或是未達成目标,不斷回到起點,再重新操作一遍。雖然這些方式看起來很簡單,但我們一旦學會用一種相對抽象的方式去描述世界的話,我們的日常生活的事情也會慢慢地井井有條,更加符合邏輯。
而要想讓機器人更準确地明白我們的意思,首先要重點掌握的技能是 " 描述 "。大語言模型幫我們描述事情、講道理、寫報告、部署任務時,不僅是我們的助手,在這一過程中,我們對世界的理解和語言能力也會提高。所有的動作和行動要靠一個對象實施,它可以是人,也可以是機器,甚至可以是各種動物,我們将這種具備能力的對象稱之爲 " 類 "。它指事物的分類,分類後的每個類别下面會有各種實體的對象。
基礎班:如何像程序員一樣使用提示詞?
如果我們真的理解了怎麽爲這個世界建模的話,我們其實用語言表征的全是對這個世界的行動和執行行動的對象,或者受到行動影響的結果的對象的一種精準的描述。值得注意的是,提示詞也是一種語言,它既是人類的語言,也是一種計算機語言。一旦我們高效地、準确地使用了這種語言後,會激發出人工智能最大的潛能。盡管有時候我們随意地用一些詞彙發布指令,大語言模型依然可以理解,但要實現最終目的,可能就會比預期要低一些。
舉個例子:我自己也經常用一些比較簡單的提示詞,而且據我了解,很多公司的工程師、研發團隊也在用。大家會發現,其實這并不複雜,它的結構已經比較完備,比如 BROKE 框架:什麽事情都要描述它的背景,然後讓大語言模型知道自己充當的角色是什麽,同時告訴它要實現的目标,定義關鍵結果。非常簡單的框架,就能夠更好地讓機器馬上理解我們的意圖。如果我們真的學會并且習慣用這種方式去跟機器打交道的話,你會發現我們跟人打交道一樣會變得更加高效、更加嚴謹,更加有成效。
再舉一個更加複雜的例子:一般來說,如果我們沒有經過訓練,在 " 描述 " 的時候,我們會非常直截了當地告訴機器我們要做什麽。但實際上沒那麽簡單,它是一個權衡利弊的選擇。我們對機器說得很簡單,希望機器能夠透徹地理解我們的潛台詞,但潛台詞是人類所特有的,它屬于語言符号中 " 語法、語義、語用 " 中的語用部分。如果我們能夠更好地在語法和語義的層面把它描述清楚,那麽機器處理起來就更方便了。所以," 描述 " 裏有更深入的描述,對輸出的 " 描述 " 也有更深入的 " 描述 "。爲什麽還需要 " 訓練 "?因爲有時候語言模型并不确切地知道怎麽回答,我們可以用一種問答的方式讓它更加明白我們要的是什麽。經過 " 調節 ",最後優化,也就是不斷地叠代。
關于提示詞,大家可以從中挑出适合自己的。這世上沒有什麽最好的或最壞的,隻有适合你的和不适合你的:
......
篇幅所限,本文僅作部分展示
點擊下方海報,觀看完整課程!
提高班:" 智能體 " 是未來的趨勢
在提高班裏我們就希望呢有很多的機器人的集群,叫智能體的集群,來幫助我們解決問題。而且呢大概率事件啊,從此之後的話,要麽就是智能體,要麽就智能體的集群将又會成爲熱詞,如果我們現在理解了它們之間的關系,哎和怎麽去更好地使用它,哎我們可能就能夠不必再被這種新的熱詞所誤導。
接下來我用微軟的 Semantic Kernel 作爲示例。
上圖的 " 自主代理(agent)" 任務執行是微軟的工程師針對大語言模型構建出來的。這些類别暗含很多信息,它表示,要想搭建一個能夠驅動機器理解我們的自然語言并且執行,會有這些功能,比如提問、内核等。
當然,當這個智能體本身靠大語言模型不能解決問題時,可以設計很多連接器去調用外部的能力、外部的資源。很多人以爲,大語言模型出現之後就不需要其他的計算機能力了,其實這是一個僞命題。因爲如果你有編程能力,本就可以繼續使用。同樣,很多人擔心人被機器取代,但是我們要等着機器超越我們,還是主動跳到機器的肩膀之上,這取決于我們對于未來的選擇。
最後是 " 應答 "。指令是人類發布給機器的,因此需要讓機器具備收到指令後完成任務的能力。這表示什麽?表示我們要知道如何教導機器、指揮機器、利用機器實現我們的目标。機器的思維肯定與人類不同,盡管它表現的方式有可能相似,但它的計算方式天差地别。因此,提示詞有助于機器更好地理解我們的意圖,幫助我們完成任務。
上圖是一段非常強大的叫做計劃員的提示詞,大家可以一條一條地捋。當我作爲一個用戶,通過 Semantic Kernel 發出一個命令或寫出一段提示詞的時候,它會把我的說法按照 1-10 的标準和要求解讀,最後基于解讀的成果進行實施。另外這裏面還提到,從一個目标創建一個計劃,然後變成函數之後,開始有輸入、有能力、有輸出。一旦機器能夠基于語言理解,把這種輸入、處理、輸出的一個一個的函數建立起來的話,機器就會開始利用人類的自然語言寫出計算機能理解的代碼來了。
關于優秀提示詞,我找到了一則關于發布翻譯指令的優秀示範,詳情如圖下:
我用上述的提示詞做了一次試驗。我從網上收集的一篇由帕克實驗室的 Mark Weiser 寫的一段非常有名的論文,叫《21 世紀的計算機》。這是原文的一部分,用到剛才的那些指令、提示詞直譯和意譯的翻譯對比如下:
如圖所示:左邊的 " 直譯 " 指令雖然很準确,但沒有右邊的 " 意譯 " 難度高。可以看到,通過更高效的、更符合我們願景的方式描述,就可以讓計算機表達出超出我們想象的對語言能力的理解、加工,及輸出結果。
提高班:應用開發實戰案例
接下來,介紹一下應用開發。
在此,我想特别強調,盡管現在的大語言模型還隻是一個工具,尚處在一個痛點驅動、需求驅動的開發過程。比如智能應用開發案例,GitHub 在開發 Copilot 的時候正是這樣的一個過程。如果親身做過産品開發,會發現它沒有任何獨特之處,其實這很正常,因爲新的大語言能力就是一種工具,它隻不過可能比原來更高效、更有獨特的特征。但是它的需求,同樣還是一個發現 - 實現 - 擴展的過程。
GitHub Copilot 的經驗告訴我們,首先你要知道你要什麽,然後用我們稱之 " 最小作用法 " 去做出一個雛形,通過不斷地發現,實現雛形的叠代,最後找到 " 暫時的全局最優解 "。也就是說,先有一個方案做起來,然後把它擴展,用到更多的地方,實現更大的規模。
對此,我想提醒一句,盡管我們今天談的是 AI、大語言模型,但它作爲一個工具,作爲一個企業的或者個人的工具,在使用、開發等方面沒有什麽本質的不同,都是問題驅動的。
另一個案例,大家可能在網上也經常看到,它就是 Richard Sutton 的 " 苦澀的教訓 "。其中,Richard Sutton 提到,我們不應該用人的思維和方式去要求機器,機器就是機器,人就是人。人的心智和氣其所涉及的世界的複雜性是巨大且根深蒂固的,試圖用簡單的方式理解心智——比如對空間、物體、多個代理或對稱性的基本概念,實際上是一條死路。這些概念屬于複雜多變的外部世界,不應該作爲基礎内置于我們的系統中。
因爲機器有它通過概率搜索與學習的擴散性,它的能力是可以發散的。如果完全按照人的方式去約束它的話,它很難做好。我們真正需要做的,是開發出能夠探索和理解這種複雜性的元方法。這些方法的核心在于它們能夠找到合理的近似解決方案。其中最爲關鍵的是,這個尋找過程應該由機器根據我們給出的方法來實現,而不是由我們自己來實現。
再一個智能應用開發經驗分享,是微軟的一個 CTO 叫 Schillace。他在開發了很久的大語言模型爲基礎的人工智能應用後總結出了 9 條法則:(如圖)
他在其中強調了模型跟代碼不矛盾,不是說有了大語言模型就不用做程序員了,也不是說有了大模型之後還要守着程序員不放,而是要靈活應變。
......
篇幅所限,本文僅作部分展示
點擊下方海報,觀看完整課程!
總結:人 - 機時代的 5 個特點
所以,如果我們真的理解了智能機器的特質,就能更好地進入下一個時代。那麽,人 - 機時代有什麽特點呢?我總結爲五點:
第一,學會提問很重要。提出一個正确的問題,就已經解決了問題的一半。提出問題要求我們對我們到底想要什麽,有非常清晰的認知。人類這種物種,很難真正知道自己想要什麽。所以,首先我們要知道怎麽提出正确的、合适的問題。
第二,機器是人教出來的。我們給機器什麽數據,它就會表現出什麽能力。當我們還在驚歎于機器怎麽有這樣的能力時,其實我們要非常清晰地認識到,人作爲有極大主觀能動性的動物,我們怎麽教育機器,機器就會具備什麽樣的能力。
第三,機器習得的知識領域是有限的。包括機器的智能,實際上都是從數據中學到的。它再怎麽強,也不會強過我們給它的知識範疇。有人可能會說,機器也可以有想象力、發揮力,經常說出我們不知道的内容,讓我們感到非常驚豔,但是你不要忘記,機器學的是全人類的知識,從全人類的角度來講,它比每個單個個體懂得都多,但它不會超出全人類的知識範疇。
人類的經驗可達域或已達域,和知識的已達域是不一樣的。知識可以被機器知道,但是并沒有實證,并沒有理解。那麽機器是否超越了整個人類的知識邊界呢?這裏有一個極大的問号,我個人認爲是沒有超越的。
第四,人 - 機結合的力量最強大。機器不是萬能的,人也不是萬能的,但兩相結合會産生非常強大的能力。人具備主觀能動性,機器能夠把文字、圖像、視頻等各種各樣的信号提供給人,來塑造一個更偉大的、更高級的具備主觀能動性的人。這在物理學、數學上早已經被證明。機器最擅長的是理解,然後堅定地執行,在執行的基礎上,它也可以糾偏,但都是在人給授權的規則之下。
第五,人和機器各司其職。從底層來講,一旦我們理解了人跟機器的不同,我們就不會輕易地拿人的想法套用在機器上:比如認爲機器會思想,機器有感情,機器理解人類……這些都是把人的思維範式映射到了機器上。機器不會像人這樣思考問題,對它來講根本沒有人這一概念,也沒有思考這一概念。它是根據數據計算出模式,識别出模式,要麽是分類,要麽是拟合。
這些是最基本的人機關系。
......
篇幅所限,本文僅作部分展示
點擊下方海報,觀看完整課程!