之前文章《智能原生:AI藍海世界的關(guān)鍵鑰匙》等里面提到過幾次智能原生,普遍反饋是有點不好理解。 大概是因為AI削薄了業(yè)務、產(chǎn)品、技術(shù)之間的邊界,至少在現(xiàn)階段很難像過去那樣把這幾者弄得涇渭分明,然后各研究各的,也能成為一個專業(yè)領(lǐng)用。想弄清楚就得一會在業(yè)務(領(lǐng)域模型)、一會在產(chǎn)品、一會在技術(shù),來回貫穿,所以很麻煩(過去其實也是,沒有網(wǎng)絡的技術(shù)特征,哪里會有互聯(lián)網(wǎng)思維)。 這次我們用一個例子來說明AI應用的各個關(guān)鍵環(huán)節(jié)。 假如我們真想像某些開源項目那樣,構(gòu)建一個百分百基于AI的公司,那到底都需要干什么?又需要幾個步驟? 當然,我們這不是個技術(shù)文章,最后還是要回到這種新的應用形式到底要匹配什么樣的思維模式,能夠創(chuàng)造什么樣的價值。 從自己到底想要干什么開始 現(xiàn)實前提是現(xiàn)在的大模型到不了你和它說一句:給我干一個只有AI的公司,它就把活干了的程度。 大模型很像一個有純粹智商的甕中之腦,所以要干什么,怎么干都需要人做引導和價值判斷,從類似賺不賺錢、有沒有趣這類視角做設定。 所以,所有的工作就簡化成兩部分:你輸入給這個甕中之腦(大模型)什么,它回復了你什么? 最終智能的效能=甕中之腦(大模型)的智商x現(xiàn)實的理解縱深(表現(xiàn)為prompt)。 現(xiàn)在假設目標干個只有AI的軟件公司,這個公司里面除了你全是智能體,你和它說幾句話,它就幫你把軟件干出來了。 我們看看這事怎么干。 需要注意的是,這個產(chǎn)品是個應用,但也是個公司。 因為是個公司,所以第一步要對軟件公司以及軟件產(chǎn)品開發(fā)這件事進行分解,這樣才能構(gòu)建好需要讓大模型理解的東西。 這是業(yè)務也是產(chǎn)品。 先是要分解過程,為了簡化我們這里假設就三個步驟:弄清楚要干什么(需求分析),把軟件開發(fā)出來(開發(fā)和評審),測試發(fā)布。 也要分解到底需要幾個角色,比如要有個老板拍板,它要負責發(fā)起決定干不干;要有產(chǎn)品經(jīng)理,它要負責確定產(chǎn)品到底干成什么樣;要有程序員,它負責把代碼寫出來并且進行CodeReview;要有測試,他負責驗證寫出來的產(chǎn)品行為是不是對的。 只有角色還不能充分描述我們的業(yè)務(軟件開發(fā)),還要有過程和活動。 過程再加上特定的活動(比如任務)負責把角色串起來,讓他們彼此配合完成特定的目的。 單有過程(決定了推進持續(xù)),角色(決定有事的時候誰干什么)也還是不夠的,還要有數(shù)據(jù)的描述,比如當前的任務是什么,每個角色上一步的輸出是什么等。 這些設定比較清楚之后,就可以進入下一步,打造不同的智能體。 上面這個就是人對領(lǐng)域的設定,也可以認為是經(jīng)常說的領(lǐng)域模型。其實有N種解法,而解法本身的選擇和價值判斷有關(guān)。 領(lǐng)域模型連接價值判斷和甕中之腦的純粹智商(大模型)。 這種對領(lǐng)域的分解有什么意義呢? 簡單可以理解成:為了更好的全自動的和甕中之腦(大模型)交互。 既然就說一句話不行,比如給我生成一個XX軟件產(chǎn)品,甕中之腦的智商又夠了,那就需要讓它清楚現(xiàn)實,好發(fā)揮它的智力。 而需要輸入能給它帶來真實的變化的,這種變化需要一種管理體系,這個管理體系需要依賴領(lǐng)域模型(過程、角色、活動、數(shù)據(jù)等)。 這部分因為作為甕中之腦的大模型只認識提示詞,所以不管你干了多少事最終都要變成它能更好理解的提示詞(當然你可以很長)。 另一部分目的則是重用這些約定俗成的詞,比如程序員,比如產(chǎn)品經(jīng)理。每個詞后面其實折疊了很多細節(jié)?,F(xiàn)在的模型是基于人類累積到現(xiàn)在為止的知識訓練出來的,所以這些詞背后約定俗成的意義也被包含在模型里面了,不需要重頭解釋每個詞了。這也能提高和大模型的交互效率。 上面的工作做完了,就到了第二步,打造不同的Agent。 這一步很詭異的是確實主要是技術(shù)的活,但本質(zhì)卻不是。由于這不是一個技術(shù)文章,我們就簡略一些做描述,還是只關(guān)注它和過去的差異。 打造不同Agent 一個方法是不做抽象就按角色做出一個個Agent,比如總經(jīng)理的Agent、程序員的Agent。Agent里面要有自己對應的基礎提示詞,還要有按照執(zhí)行時間點填充的實時信息,比如: 你是誰,要干什么;要有當前的階段描述,比如現(xiàn)在的需求分析階段,有哪些事要做;要有一定的記憶,比如我上一輪到底說什么了,我產(chǎn)出的代碼是什么等。 當然也可以抽象一點,按職能來分,比如代表任務的Agent,代表對話的Agent等。 之后任務的Agent要調(diào)度各種角色。 真做的話,里面會包含很多細節(jié),比如檢查生成的代碼是否合適這一環(huán)節(jié),那要檢查多少輪次才算合格呢? 但基本定位就是聲明自己的角色、以及當前活動的上下文、當前活動的目標。 這里舉個簡單例子:比如ChatDev把程序員和CodeReviewer角色的prompt弄成了下面這樣({}里面的部分是要根據(jù)執(zhí)行時的情況填寫的)。 'Programmer':[ '{chatdev_prompt}', 'YouareProgrammer.wearebothworkingatChatDev.Weshareacommoninterestincollaboratingtosuccessfullycompleteataskassignedbyanewcustomer.', 'Youcanwrite/createcomputersoftwareorapplicationsbyprovidingaspecificprogramminglanguagetothecomputer.Youhaveextensivecomputingandcodingexperienceinmanyvarietiesofprogramminglanguagesandplatforms,suchasPython,Java,C,C++,HTML,CSS,JavaScript,XML,SQL,PHP,etc,.', 'Hereisanewcustomer'stask:{task}.', 'Tocompletethetask,youmustwritearesponsethatappropriatelysolvestherequestedinstructionbasedonyourexpertiseandcustomer'sneeds.' ] 'CodeReviewer':[ '{chatdev_prompt}', 'YouareCodeReviewer.wearebothworkingatChatDev.Weshareacommoninterestincollaboratingtosuccessfullycompleteataskassignedbyanewcustomer.', 'Youcanhelpprogrammerstoassesssourcecodesforsoftwaretroubleshooting,fixbugstoincreasecodequalityandrobustness,andofferproposalstoimprovethesourcecodes.', 'Hereisanewcustomer'stask:{task}.', 'Tocompletethetask,youmustwritearesponsethatappropriatelysolvestherequestedinstructionbasedonyourexpertiseandcustomer'sneeds.' ] 把階段的Prompt模板弄成了下面這樣: 'Coding':{ 'assistant_role_name':'Programmer', 'user_role_name':'ChiefTechnologyOfficer', 'phase_prompt':[ 'Accordingtothenewuser'staskandoursoftwaredesignslistedbelow:', 'Task:'{task}'.', 'Taskdescription:'{description}'.', 'Modality:'{modality}'.', 'ProgrammingLanguage:'{language}'', 'Ideas:'{ideas}'', 'Wehavedecidedtocompletethetaskthroughaexecutablesoftwarewithmultiplefilesimplementedvia{language}.Asthe{assistant_role},tosatisfythenewuser'sdemands,youshouldwriteoneormultiplefilesandmakesurethateverydetailofthearchitectureis,intheend,implementedascode.{gui}', 'Thinkstepbystepandreasonyourselftotherightdecisionstomakesurewegetitright.', 'Youwillfirstlayoutthenamesofthecoreclasses,functions,methodsthatwillbenecessary,aswellasaquickcommentontheirpurpose.', 'Thenyouwilloutputthecontentofeachfileincludingcompletecode.Eachfilemuststrictlyfollowamarkdowncodeblockformat,wherethefollowingtokensmustbereplacedsuchthat'FILENAME'isthelowercasefilenameincludingthefileextension,'LANGUAGE'intheprogramminglanguage,'DOCSTRING'isastringliteralspecifiedinsourcecodethatisusedtodocumentaspecificsegmentofcode,and'CODE'istheoriginalcode:', 'FILENAME', '```LANGUAGE', ''''', 'DOCSTRING', ''''', 'CODE', '```', 'Youwillstartwiththe'main'file,thengototheonesthatareimportedbythatfile,andsoon.', 'Pleasenotethatthecodeshouldbefullyfunctional.Ensuretoimplementallfunctions.Noplaceholders(suchas'pass'inPython).' ] } 對這個步驟做簡單總結(jié)就是下面這兩點: 最終目標都是要形成一段話(prompt)在不同的步驟上用(現(xiàn)在的大模型只認這個); 這段話是變的。 每次需要根據(jù)不同的執(zhí)行狀態(tài)做出調(diào)整。 這和人其實差不多,人也是每次接受不同的信息(按角色),然后給出自己的判斷和理解。 這就是為什么之前總說,這次大模型的核心進展是概念理解和判斷能力,沒有這個,這種智能體跑不起來。 這步看著確實是技術(shù)的活,但底子其實不是。 程序員的角色是提高效率,但從本質(zhì)上看,這事行不行,能搞到什么程度,不是程序員能驗證的。 程序員解決效率問題,但理解領(lǐng)域的人才能判斷上限。(智能效能=大模型的智商高度x現(xiàn)實理解的縱深) 也就是說,過去說的圖靈測試2.0的判斷人不是程序員,甚至都不是人工智能科學家,而是理解領(lǐng)域的人要自己操練大模型做判斷。要在這個背景下去理解角色中心式計算和圖靈測試2.0。 隨著使用深入肯定發(fā)生角色的重新定義,而角色的重定義等也不是技術(shù)能定義的事(參見:AI的脈絡:非共識時刻的認知價值)。 啟動整個公司 上面這些都做完以后,就需要把整個軟件公司啟動起來。等著外面的輸入。 這個公司里有很多智能體,還保留了一個可以對話的入口。 比如可以和它說,幫我做一個TODO的小應用(和真正的公司很像,你說一句,然后一堆人就把活干了)。 啟動程序就需要按照指定過程,先需求再開發(fā)然后測試發(fā)布,依次給每個角色分配任務,直到最終認為產(chǎn)品合格了,再把產(chǎn)品發(fā)布出來。 這時候,最終的公司就變成了這樣: 一個人:決定到底要干什么軟件產(chǎn)品。用什么樣的過程,用幾個角色,每個角色到底負責什么。 不同角色的智能體:每個的產(chǎn)出可以是一個階段性成果,也可以是代碼,當然復雜了也可以是美工的圖,圖標等。擴展起來還可以加上蜘蛛爬取某些實時的網(wǎng)上信息,讓配圖等更符合最新的風格。 公司就是應用,應用的邊界也就成了公司的邊界。 從公司角度看,和過去不一樣的點是什么呢? 大量的智能體在干活,人只做原則設定。 從應用的角度看和過去比,不一樣的點是什么呢? 這個應用在一個大邊界下,你可以給它設定任何目的,什么軟件都能開發(fā)。過去要依賴平臺化才能張開自己的任務種類,現(xiàn)在都靠AI。 智能原生公司 基于這個例子,我們可以進一步總結(jié)一些關(guān)于AI智能應用的關(guān)鍵特征: 第一,和領(lǐng)域相關(guān)的部分是人的活。 這部分拆分未來可能模型能做一部分,但是在眾多變量里面判斷哪部分有價值,比如到底干什么,什么樣才叫合格等估計一直是人的部分。也許方法論部分(比如什么過程等)未來可以模型干,但現(xiàn)在模型干這個費勁。這是邊界問題。 第二,這種應用是按角色來的(角色中心式計算)。 比如程序員的角色可能需要調(diào)用一大堆工具Git、Python等才能完成自己的職責。但這些最終要變成提示詞(prompt)才能驅(qū)動自己的活動。每個角色到底能不能成立,要看圖靈測試2.0能不能過。 很多時候可能物理約束大于智能約束。我們這個例子里面沒有物理約束(比如把汽車從北京開到蘇州)。 所以智能原生化估計得從這類領(lǐng)域先開始。 第三,需要很多的配套措施。Agent要記住自己說了什么,要知道當前在干什么等,這需要一套完備且繁瑣的機制。寫程序似乎只需要記錄代碼就完了,但真正的公司需要匯總業(yè)務、財務等各種數(shù)據(jù),并且保證數(shù)據(jù)精度。這一步成本很高,挑戰(zhàn)很大。 第四,工作什么時候算完成了是個問題。產(chǎn)出內(nèi)容到底合適不合適,幻覺了怎么辦等,都是關(guān)鍵制約。放回到具體場景下智能和想象中的智能好像說的是一個東西,其實是兩碼事。所以之前我們說純數(shù)字和幻覺本身不對應過大成本的領(lǐng)域會優(yōu)先。 過去琢磨事對此進行了一些總結(jié),比如把公司的智能原生式思維提煉為:智能優(yōu)先,萬物皆、實時反饋、中心決策。這在上面這種應用的基礎上可能更好理解。 模型的技術(shù)特征決定了需要與之匹配的思維模式(參見:從1到10:AI產(chǎn)品和互聯(lián)網(wǎng)產(chǎn)品的核心差異)。 是普通人的機會么? 上面這個過程看著需要寫代碼驅(qū)動,但本質(zhì)上并不是一個技術(shù)問題。不寫代碼頂多就笨一點,一步一步寫一堆提示詞。代碼可以讓整個事串起來更自動一些,影響效率,不影響價值。 所謂的領(lǐng)域,還真不是模型和代碼能概括的事。 也就是說把甕中之腦的能力用起來正需要理解領(lǐng)域的普通人(不是AI科學家)。 所以理論上,這是普通人的機會,但現(xiàn)在關(guān)鍵問題不在這里,而是你把智能放到自己想的那個場景下,它不一定創(chuàng)造價值。 這是判斷的關(guān)鍵。 同時這也暗示了一個很多人都關(guān)心的問題的答案:AI會取代對應的崗位么? 這是個必然發(fā)生的事。 回到基礎公式:智能效能=模型的智商x現(xiàn)實理解縱深,就會發(fā)現(xiàn)這事取決于模型自身的發(fā)展,也取決于給它適配的對現(xiàn)實進行理解的系統(tǒng)(Agent)。在上面那個但上面軟件公司里也還是要人的,只不過這個角色所需要的能力發(fā)生了巨大變化。 小結(jié) 最后要強調(diào)的是上面這個過程,做著玩是可以的,但不能創(chuàng)業(yè)。做領(lǐng)域拆分然后判斷智能高度,這點會看得比較清楚。也就是說現(xiàn)在的技術(shù)成熟度不匹配合適的商業(yè)價值。但這不影響這趨勢本身,模型的基本為此提供了源源不斷的動力。理解這種基礎原型其實提供了一個發(fā)現(xiàn)的視角和眼睛。地球上有石油已經(jīng)億萬年了,但只有當嵌入到工業(yè)革命的上下文后,它才是財富,所以能看到新現(xiàn)實的新視野還是關(guān)鍵的。 |
|