我是一個自動駕駛行業的產品經理,也是ChatGPT的第一批用戶。第一次遇見ChatGPT是在去年十二月的第一個星期,有一個搞AI的朋友在群里發了一張與ChatGPT的聊天截圖,引起了我的興趣,從此我便一髮不可收拾。
剛開始,我與ChatGPT的交互主要限於找樂子:我和ChatGPT一起寫小說,叫它讀我朋友寫的詩,用它和樓上一大早就開始裝修的鄰居吵架。
△一些關於風水的友好建議
後來,我用它畫流程圖,做數據分析,幫我讀懂技術與代碼,它已經成為了我工作中不可或缺的生產力工具。
△該時序圖的內容生成+繪圖相關工作由chatGPT完成
我也發現了各種使用ChatGPT的技巧,甚至形成了一套可操作,可重復的ChatGPT方法論”BORE”。用這套方法論,每個人都可以成為ChatGPT的進階玩家。
一眼看下去是不是有點複雜?別擔心,後面的文章里,我會為大家講清楚這套方法,並結合例子教會大家它怎麼在工作中發揮ChatGPT的威力,接下來我們就一起開始看看吧
BORE:一套ChatGPT提示設計流程
眾所周知,一個描述不好需求、講話糊裡糊塗的產品會讓程序員痛苦無比,不僅影響程序員的心情,也直接影響產出的質量。從這個角度看,用戶在與ChatGPT的交互中就充分扮演了產品經理「給程序員派活」的角色,寫得稀爛的需求自然只能得到稀爛的回應,而如果「需求」設計得當,ChatGPT會給你超乎期待的驚喜。
△我的大學捨友,一位熱情洋溢的程序員朋友
寫好「需求」是一門技術,在自然語言處理中這門技術其實已經有了自己的名字,我們的輸入被叫做”prompt”,也就是提示。而寫好提示的技術就叫做「prompt engineering」,也就是提示工程。這是一門高度依賴經驗的技術,我在接下來的文章中會總結我的提示工程實踐,教大家如何為這個「程序員」寫好「需求」。我總結的技巧中會包含一些具體的應用場景,幫助大家更好地理解。
講清楚背景,為ChatGPT提供充足信息
在我們告知它之前,ChatGPT對於各種具體的業務場景(背景)所知甚少。講清楚背景是發揮ChatGPT強大能力的關鍵。
應用場景1:乾活前先讓ChatGPT進入角色
「幹線物流自動駕駛「目前在自動駕駛領域是一個很火的方向,那麼現在我們就以這個方向作為例子,假裝自己是一家幹線物流駕駛公司的產品。 來看看應用場景1,由於我們現在假裝自己是一家幹線物流自動駕駛企業的產品,可以在需要chatGPT輔助我工作前先運行這條prompt:
“我們公司研發L4級別的自動駕駛卡車系統。我們的車輛擁有一輛L4自動駕駛車輛所需要的算力,傳感器與能力,但是目前車上會有司機作為安全員,自動駕駛系統會輔助司機的駕駛,幫助卡車司機開車更輕鬆,更安全,更節油。我將提供產品經理日常工作中的一些實際問題。這可能涉及設計具體的自動駕駛功能,進行數據分析,分析具體的行駛場景並提供有效的反饋等。你能夠明白這件事嗎?」
這個例子中,我們告訴了ChatGPT宏觀的業務背景,並順便檢驗了prompt的效果。在讀到上面的內容後,ChatGPT就自動代入了自動駕駛產品經理的角色。後文的所有其他例子都是在ChatGPT進入角色的前提下進行的。
我們來詳細拆解這條prompt的設計:
1.闡述背景,點明當前的業務範圍及業務目標:「我們公司研發L4級別的自動駕駛卡車系統。」然後進一步告知當前業務的細節:「我們的車輛擁有一輛L4自動駕駛車輛所需要的算力,傳感器與能力,但是目前車上會有司機作為安全員,自動駕駛系統會輔助司機的駕駛,幫助卡車司機開車更輕鬆,更安全,更節油。」告訴chatGPT大致的任務範圍:「我將提供產品經理日常工作中的一些實際問題。這可能涉及設計具體的自動駕駛功能,進行數據分析,分析具體的行駛場景並提供有效的反饋等。」
2.確定效果,我一般會反問一句它是否理解,以此來檢驗傳達的信息是否清楚,有沒有被正確地理解。
下面是場景1的運行結果:
應用場景2:起草文檔的結構與框架
熟悉了業務,就要開始乾活了。ChatGPT進入角色後,我們來試試讓它提供一個產品試乘報告的框架。我們為ChatGPT提供了「背景」,定義了「任務目標」:
“現在,作為一個產品經理,你需要去試乘我司的產品,用敏銳的目光去發現改進點,並提供建議。請為我提供一個試乘體驗報告框架模板,模版要涵蓋產品體驗的不同方面,使用邏輯嚴密,清楚的語言,有優雅,清晰,易於理解的結構。這是一款自動駕駛卡車。這輛卡車上有司機,它將在一條主要是高速的長途貨運路線上裝載貨物運營。”
我們給ChatGPT的prompt可以被拆解成以下的部分
- 闡述背景:這是一款自動駕駛卡車,車上有司機,跑的是長途
- 定義任務目標:扮演的角色是產品,任務是寫試乘報告模版框架,內容涵蓋哪些方面,需要使用語言特點如何等等
下面是場景2的運行結果:
△場景2的運行結果
小作業:ChatGPT非常細心,可以捕捉到微小的細節,所以「寫背景」這件事很重要。不信把場景1中的”我們公司研發L4級別的自動駕駛卡車系統」換成」我們公司研發L4級別的自動駕駛卡車「,再運行場景2試試。
給ChatGPT打績效:定義目標&關鍵結果,試驗並調整
各位在科技公司工作的同學們一定對OKR非常熟悉:這是一個標準績效管理工具,我相信這篇文章的很多讀者都寫過OKR,被OKR打過績效。不過在這裡,我們主要是運用OKR來描述任務目標,管理任務的預期結果,並在任務的目標和期望上與ChatGPT達成共識。
那麼,OKR是什麼呢?我們先來回顧OKR的內容:OKR的英文是Objectives and Key Results,由兩個部分,”Objectives”,任務目標和”Key Result”,關鍵結果組成。定義「任務目標」表達了我們希望實現什麼,而定義「關鍵結果」則讓ChatGPT知道實現目標所需要達成的具體、可衡量的結果。
我們在之前的場景中其實已經為ChatGPT定義了OKR,例如在「應用場景2 起草文檔的結構與框架」里,「提供一個試乘體驗報告框架模板」就是「O」,而”要涵蓋產品體驗的不同方面,使用邏輯嚴密,清楚的語言,有優雅\清晰\易於理解的結構”則可以看做「KR」。
添加細節在ChatGPT的prompting中會起到立竿見影的效果,ChatGPT會對這些小細節做出巨大的反應。例如,有研究人員發現在GPT-3(可以理解為ChatGPT的爸爸)的輸入前加入”Let’s think step by step”,就讓它的推理準確率從17.7%暴增到78.7% [1]。
現在,作為ChatGPT的使用者,各位自然是巴不得它能夠發揮出全部性能,又快又好地出活。既然已經有了順手的胡蘿蔔(OKR),那麼是時候請我們親愛的小毛驢(ChatGPT)拉磨了
△設定了好的目標就是成功了一半
接下來我們看一個具體的例子,更好地理解這種思想與ChatGPT提示工程的結合。
應用場景3:分析具體業務場景
我們來看應用場景3,自動駕駛產品經理在工作中常常要定義各種複雜場景,我們在這個prompt中要求ChatGPT協助我們定義一個簡單的他車激進切入場景:
「在我車在高速上行駛時,常常會有他車從相鄰車道從非常近的距離切入我車車道,造成碰撞風險。請用自然語言描述與定義這個場景。
語言風格:清晰,有邏輯性,可靠,容易使用計算機程序建模。
建模要求:描述清楚事情的過程和時序關係。注意用數字量來定義臨界點。將切入的步驟編好序號。建模要體現兩輛車的交互
我們的自動駕駛車輛被稱為ego,他車被稱為npc。」
在這個例子中,我們在闡述了背景,定義了任務目標的基礎上再給出對任務的詳細要求(也就是key results)。prompt從多個方面規定了對於理想答案的標準。
用剛才的框架對這條prompt進行拆解:
- 闡述背景:宏觀的業務背景已經在「讓ChatGPT快速進入角色」中給出。所以我們進一步為ChatGPT描述了微觀的具體業務場景(高速上被他車切入)。
- 定義任務目標:任務目標O是「用自然語言描述與定義這個場景。」
- 定義關鍵結果:這裡的KR有「a. 語言風格:清晰,有邏輯性,可靠,容易使用計算機程序建模。b. 建模要求:描述清楚事情的過程和時序關係。注意用數字量來定義臨界點。將切入的步驟編好序號。建模要體現兩輛車的交互。c. 我們的自動駕駛車輛被稱為ego,他車被稱為npc。」
KR可以根據個人需求定制。例如在這個例子中,我們用自然語言給場景建模的目的可能是想要給程序員寫PRD,所以要求「有邏輯,容易使用計算機程序建模」。而公司內如果有「黑話」,比如把自動駕駛車叫做ego,也可以告訴它。
- 試驗並調整,改進:這是一個試驗並調整的過程。如果對ChatGPT生成的內容不能讓人滿意,有三種可能性:第一種是我們這個老闆當得不好,指令給得不夠清楚。這時候可以調整prompt,看看背景和OKR有沒有需要補充的地方。重新生成回答。經過幾次調整後,就可以得到比較滿意的答案。第二種是ChatGPT這位員工乾得不好,這時候我們可以指出生成內容中的錯誤,讓它重新回答。第三種是你運氣比較背,碰到一次不太好的結果。這時候你可以優中選優,相同prompt讓ChatGPT多生成幾次,然後選一次最滿意的,讓我們一起贊美AI的任勞任怨。
在這個過程中,我們給ChatGPT定了「OKR」,乾完活了還要「復盤」,一個不對還要打回返工,是不是像極了屏幕後面的各位打工人們。
下面是這條prompt的運行結果,以及為答案糾偏的過程。
△場景3的運行結果
△通過「打績效」來對ChatGPT糾偏
ChatGPT生成的回答不是完美的,所以通過”試驗並調整”來糾偏非常重要。
小作業:上面回答的第4點中,有什麼明顯違反常識的錯誤?我們可以通過什麼方式來讓ChatGPT修正這個錯誤?
小結
講到這裡,我們復習一下上面所講的內容。我們以背景,目標,關鍵結果,改進四個步驟為抓手,打出了組合拳,沈澱了一套ChatGPT prompting方法論
那麼,接下來,我們給這種方法取一個好記又好聽的名字:BORE,讀作[bɔːr],記住這個名字就等於記住了這套方法。在「BORE」方法中,四個字母分別是四個單詞的首字母,B代表Background,O代表Objectives,R代表key Results,E代表Evolve,「BORE”本身也是個英文單詞,有「鑽孔」的意思,很好記。
最後我們給出這四個流程的詳細定義:
1. 背景B(Background):闡述任務的宏觀背景和微觀場景,讓ChatGPT得到充分的信息。
2. 目標O(Objectives):明確任務的目標,告訴ChatGPT需要生成的內容是什麼。
3. 關鍵結果R(key Results):列出完成任務所需達成的關鍵結果,即需要滿足的具體要求和指標。這些關鍵結果可以根據實際需求進行定制。
4. 改進E(Evolve):試驗並調整,下面三種改進方法進行靈活組合,最終得到滿意答案。
a. 「從答案的不足之處著手,更新並迭代prompt」,
b. 「在後續對話中指正ChatGPT答案缺點」,
c. 「在prompt不變的情況下多次生成結果」
撬動外部工具,放大ChatGPT能力
這裡,我們還有一些其他的ChatGPT進階技巧:將ChatGPT的能力與外部工具結合,放大ChatGPT的能力。
作為產品經理,我們要為業務畫時序圖,畫流程圖等。有時我們也要用一些生動的圖像,數據的分析去支撐需求改動,讓我們的需求更有說服力,這樣我們會更有可能通過產品評審會。
△很多程序員都想要的實用職場技巧
然而,到此為止,ChatGPT展現的能力都是文字 or 代碼上的,難道就沒有辦法了嗎?
等等?ChatGPT可以生成代碼?
应用场景4:利用ChatGPT画时序图
既然ChatGPT可以生成代碼,那麼代碼是不是可以轉化為各種各樣的圖像?感謝各位程序員的開源精神,目前我們有很多基於代碼的工具可以使用,讓我們搜索一下「code to diagram」(代碼轉圖表)試試。
好得很,當然有,出來的第一個結果就提供了足足6種工具,那麼接下來就趕快試一下。
在這裡,我們選擇mermaid(意思是美人魚),不僅是因為它支持十幾種圖像,而且它還提供了一個在線編輯器,代碼貼進去就可以馬上生成圖像。生成器的網址在:https://mermaid.live/
△mermaid項目主頁
那麼,我們試著在應用場景3的基礎上深入,以ChatGPT已有的輸出為基礎,要求它畫出「在我車在高速上行駛時,常常會有他車從相鄰車道從非常近的距離切入我車車道,造成碰撞風險。」的時序圖。
请看下面的prompt:
“目前有一款用來將代碼轉化為各種圖表的工具,叫做mermaid。請閱讀下面的內容,寫一份可以生成mermaid時序圖的代碼。請注意,時序圖要與我提供的內容保持完全一致。
內容:在高速公路上,當ego車在行駛過程中,一個npc車輛突然從相鄰車道切入ego車道,且距離非常近,這種場景可以描述為:
1.NPC車輛在相鄰車道以速度V_npc靠近ego車輛。2.當水平距離d_npc達到閾值d_critical時,NPC車輛開始切入操作:a. NPC車輛向內側車道轉向,同時NPC車輛的前輪觸碰到ego車道的車道線,並壓在車道線上。b. NPC車輛逐漸進入ego車道,直到完全進入,並擺正位置。3.在這個過程中,ego車輛應該進行以下反應:a. 自動駕駛系統應該能夠檢測到NPC車輛的切入行為,並識別它的行為意圖。b. 如果檢測到了NPC車輛的切入行為,自動駕駛系統應該能夠進行迅速反應,採取避讓措施以確保安全行駛。c. 具體的避讓措施可以包括剎車、加速、轉向等,以確保避免與NPC車輛發生碰撞。4.當NPC車輛完成切入操作後,NPC車輛的速度會逐漸回到原始速度V_npc,並行駛在ego的前方。”
我們來拆解這段prompt,仍然是上文中提到的BORE方法:
1.闡述背景:我們提示了ChatGPT對話中所說的mermaid是代碼轉圖表工具,並在「內容」中提供了需要他轉換成時序圖的文字。
2.定義任務目標:請閱讀下面的內容,寫一份可以生成mermaid時序圖的代碼。
3.定義關鍵結果:時序圖要與我提供的內容保持完全一致。
4.改進,嘗試並調整:這段prompt經過多次調整,我也多次讓ChatGPT打回重做,得到的結果是優中選優的(在圖中我們可以看到調整prompt+重新生成加起來共9次)。
最後,我們得到了可以生成時序圖的代碼:
△場景4的運行結果
將得到的代碼粘貼到mermaid live editor中,就可以生成結果了
△mermaid在線生成圖表頁面
最後是成品圖。
1. BORE框架仍然管用:之前提到的設計原則仍然管用,例如「提供背景Background」,有時候你不妨把得到的運行結果直接粘貼給它看(如果是文字的話)。而ChatGPT仍然也會對你設定的「關鍵結果key Result」起反應,比如畫圖畫得太醜,你就可以督促它畫好看點,配色好一些等等,它會有反應的。
2. ChatGPT會有一定瞎編&錯誤的情況:有時候ChatGPT會對不瞭解的信息亂編一氣,代碼中的計算過程也不一定對。你必須足夠小心,看看有沒有錯的地方,這要求你對它使用的數學方法與工具都比較瞭解。
3. 上下文有限:ChatGPT目前上下文能力有限,只能讀到上下文的幾千個字,所以會有「忘記」的情況,這種時候你可以把前面的內容重新粘貼到最新的對話里,提醒它一下。另外,這也意味著chatGPT只合適小規模數分,如果你的代碼比較多,全部靠它就不現實了。
4. 思想為主,工具為輔:數據只是數據,如何解釋數據才是其真正價值所在。別忘了在工作中業務價值才是數據分析的最終目的,你的思考不能省,ChatGPT只能作為輔助工具。
一些關於CHATGPT與人工智能的想法
使用ChatGPT的注意事項&想法網上有很多,我提出個人感觸比較深的幾點
1. ChatGPT的使用者要負起責任,當好「把關人」。這個東西經過了人類反饋的強化學習訓練,非常喜歡講一些「看起來是對的,完全符合語言邏輯,但是其實是胡說八道」的東西。使用者一定要當一個合格的把關人,要對生成內容有基本的判斷能力。特別是自動駕駛產品經理,我們設計的車輛將會在道路上行駛,是人命關天的事情,一定要有責任感。同時,openai會收集對話信息用於改善產品,要注意保密問題。
2. ChatGPT「省工不省腦」。「描述清楚到底想要什麼」和「知道需要做什麼」這兩件事並不比上手去做簡單太多。對於第一件事,清晰地描述需求是每個產品的基本功,很多人做不到這一點。對於第二件事,你也必須夠懂業務,心裡有數,才能知道「要做什麼才是對的」。在這個層面上,我們和ChatGPT之間倒是有點像領導和員工的關係了(老闆負責規劃戰略,想活派活,發出指令,而員工負責執行)。
3. 人工智能是人類新長出來的器官,未來世界里每個人都是通才。有個比喻說互聯網和手機是新的器官,極大地擴展了人類的記憶容量。每個人都可以通過手機,即時從互聯網獲取大量的信息,就像多了一個用來記憶的器官一樣,人工智能也是如此。每個人工智能都是人類新長出來的器官,用於完成特定的任務。在它們的輔助下,每個人在未來世界里都將成為通才。
4. 要用ChatGPT創新?想點不一樣的組合。在心理學中,心理學家從兩個方面評價創造力。第一個是發散思維(對某一問題產生不尋常想法的能力)。第二個是聚合思維(整合不同來源的信息,從而解決問題的能力)。從這個角度看,「把兩個看似不相關的東西結合在一起,發揮出更大的威力」這件事也許就有點創造力的意思。除了文中把ChatGPT和績效評估,ChatGPT和圖表語言結合以外,有人目前還整了很多更新更狠的活。有人給小愛同學接了openai的api就變成了人工智能音箱,讓ChatGPT寫AI繪圖的prompt就能出很多好看的圖,ChatGPT和搜索引擎結合在一起就做出了new bing。就在最近(2月20日),微軟發佈了一篇叫做「ChatGPT for Robotics」的文章,研發人員就建立了一套用於給機器人任務撰寫prompt的方法論和設計原則,用ChatGPT調api,試著讓機器人也聽得懂人話 [2]。在想”ChatGPT可以做什麼”的時候不妨當一下縫合怪,可謂廣闊天地,大有可為。
△ChatGPT for Robotics論文配圖
這是一個嶄新的時代,各種偉大的事物不斷地誕生。祝大家接下來玩得愉快,能夠用BORE「鑽」出更多ChatGPT的潛能!