我問了鵝廠程序員:你們工作中怎麼用ChatGPT?如何高效Prompt?

圖片

圖片

👉騰小云導讀

當你還在錯誤使用對話 AI 工具如 GPT,可能會覺得其作用不過是知識平移總結或簡單問答。實際上,當了解先進的用法、知悉如何做到 better prompt,你會發現:AI 不是來替代你的,是來幫助你更好工作。如果還用搜索引擎的“關鍵詞匹配”、“關鍵詞命中”思路去思考人工智能的使用,已然有些落後。本篇在詳細介紹幾個GPT幫助程序員工作(乾貨滿滿)的應用場景之後,將爲你分享AI的正確打開方式——better prompt。歡迎閱讀和分享。

👉看目錄,點收藏

1.背景

2. AI可以幫助程序員做什麼?

2.1 技術知識總結

2.2 拆解任務

2.3 閱讀代碼/優化代碼

2.4 代碼生成

2.5 生成單測

2.6 更多AI應用/插件使用體驗

3. Prompt 能力

3.1 Prompt 是什麼?

3.2 Better Prompt

4. 總結

01、背景

尤記得每個月「本月全球最流行編程語言」發佈的時候,都會在程序員屆掀起腥風血雨。“Java 下降了一名,怎麼可能”、“JavaScript 又佔據榜首,門檻太低,寫個腳本就算用了嗎?”、“C# 這種單平臺語言也就是閉環生態內的產物了” 這類言論層出不窮,大家也都樂此不疲,已然是以前的流量密碼。

然而這一切現在似乎已經悄悄變化了。大家開玩笑說現在使用的最多的編程語言,已經是英語(自然語言)了。

現在 GPT 已經開啓了人工智能狂潮。在社交圈裏不聊上兩句 ChatGPT,感覺不只是要和時代脫節,更是已經被開除 IT 籍了 ~

筆者在 2022 年 12 月初開始體驗 ChatGPT。一開始我向它提一些有趣的問題,例如“告訴我 TCS 相關的知識”等等。相信絕大多數人一開始使用的時候都是如此,那時候互聯網上認爲它的功效應該是代替知乎,讓 ChatGPT 作爲問答知識類的平臺。知乎已死的聲音甚囂塵上。

後來大家又發現,它的很多回答都是胡編亂造的。例如你問它一些新上映的電影,它即使不知道也會胡編亂造一通。大家又開始貶低它,覺得只不過就是一個普通的聊天機器人,還是尬聊型選手。

去年相關的論文的分享介紹比較少,市面上的評價分析的角度還停留在認爲 ChatGPT 只能針對已有知識進行總結,或者是平移。

但是隨着使用的人數越來越多,大家才知道,ChatGPT 與語言無關,你用任何語言去提問,它都可以很好的理解你的意思。 因爲它使用的是語言模型,而不是具體的某個語言庫。如果還用搜索引擎的“關鍵詞匹配”、“關鍵詞命中”思路去思考人工智能,就已經顯得有些落後了。本篇在介紹 AI對話工具能如何幫助程序員工作(乾貨滿滿)之後,將爲你分享AI的正確打開方式——better prompt。

02、AI 可以幫助程序員做什麼?

2.1 技術知識總結

剛開始接觸學習一門技術的時候,難免需要去查看文檔。現在的手冊非常豐富。往往對於一個初學者來說,需要接觸的信息太多、排版五花八門,學起來雲裏霧裏。

這時候就可以藉助 ChatGPT 的總結能力,例如我想學習一下 K8S 的相關知識,我發給它一個文檔的地址,讓它幫我總結。

prompt: https://kubernetes.io/zh-cn/docs/concepts/overview/ 總結這篇文檔。

image.png

可以看到,它很好地總結了這篇中文的文檔,並且對每一個關鍵點進行了概括。用最少的語言讓你能夠搞懂你想要的知識點。

因爲 ChatGPT 是有上下文的,它知道你需要的內容是中文的總結,所以在這裏你繼續發一篇英文的文檔給它,它也會用中文幫你總結。

prompt: 總結這篇文檔https://kubernetes.io/docs/concepts/overview/components/ 。

image.png

目前 chatgpt 的免費版本數據庫的截止時間是 2021 年,也就是說如果問它比較新的內容,它是無法總結的,甚至是會隨意編撰。例如這裏詢問一個關於電影《流浪地球 2》的問題,讓它總結一下 wikipedia 裏的介紹。

prompt: 總結:https://zh.wikipedia.org/zh/%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%832

image.png

因爲這時候電影還沒有上映,所以之前的內容還都是錯誤的,它的總結是不準確的。

當我們將整個網站的內容複製進來,讓 chatgpt 進行總結。但是這時候會發現,文章太長了,會收到報錯。

圖片

這時候,就要運用自己的想象力,使用 prompt 來進行突破了。我們需要把文章進行段落拆分,每一段都符合它的標準。

圖片

圖片

將內容拆分成 7 段,發送完成之後,它就會自動總結了。

圖片

這樣,才能得到了一篇文檔的正確總結。

2.2拆解任務

上文所描述的內容,可以算是藉助 AI 讓程序猿日常生活效率提升。那麼在工作當中,AI 如何幫助我們提效?

我們從需求端獲取一個需求以後,很多情況下我們的任務並不能夠非常準確的估計時,原因就是我們並沒有將任務拆分清楚,所以並不能夠對每一項任務進行估計,導致風險的發生。

這時候可以簡要描述一下我們這次的需求點,讓 ChatGPT 幫我們進行任務拆解。

圖片

可以看到任務整體被拆成了一個個細小的任務。它可以很快的讓我們將任務轉換爲 task,或者是需求跟蹤單。這既方便和產品經理進行溝通,也便於我們自身排期。轉換成 KANBAN 模式也便於瞭解當前進度。

如果對方仍有疑問,可以繼續詢問拆解。比如我們想要詢問第三步應該如何進一步實現。可以看到它甚至給了我們具體的 UI 交互。我們可以利用這樣的提示對我們的交互以及實現提供一定的參考。

圖片

2.3閱讀代碼/優化代碼

開發者經常接手別人的代碼。質量參差不齊,還會夾在很多奇怪的命名。當我們閱讀整體邏輯或者修改邏輯,可能會因爲自身閱讀的問題造成理解偏差,進一步引發 bug。

如果將這個方法交給 AI 去閱讀呢?可以看看效果。

prompt: 

逐行解釋下面的代碼 + 代碼內容, (在這裏使用了一段在 github上面的開源代碼進行展示, 這段代碼是一段定時器相關的內容)。

image.png

可以看到 ChatGPT 正確的理解了我們的代碼,對代碼進行了解釋和說明。

但是這時候只是生成了一個整體的說明,並沒有對每一行分別進行解釋。這時候繼續和它對話:

prompt: 可以在每一行代碼上面加上註釋,便於我理解嗎?

image.png

這時候它會逐行的進行代碼標註,便於你對每一行進行理解。如果你接着對它提出一個粗淺的優化需求,它也會照做。

prompt: 這段代碼可以進行重構和優化嗎?邏輯有些繁瑣。

image.png

你可以對某一個部分提出更細節的要求,爲它提出更好的優化方向。在這裏我們提出了關於參數順序耦合的問題,可以看到 GPT 也理解到了我們的需求,並且做出了對應的優化,如下:

prompt: children: (isCounting: boolean, durationTime: number, startCount: () => void) => React.ReactNode // 子組件,接收三個參數,返回一個React節點這裏面的參數太多了,而且對順序有強依賴,該怎麼優化這裏?

image.png

2.4代碼生成

開發者在工作中還有一種場景的工作量比較大,需要複雜的邏輯思考。但是實際上最終的代碼可能只需要幾行就可以搞定。你在思考過程中覺得很痛苦,想和身邊的同事去溝通。也許你給他解釋完這個邏輯以後,他非但不能幫你思考,反而將一人份痛苦變成兩人份。

例如,我們要進行數據轉換,是否也可以交給AI來做?我們發送給 GPT 這樣的 prompt,將數據結構進行轉換。數據源爲:

[  
    {  
        "candidates": null,  
        "candidatesX": null,  
        "description": "role---用戶角色",  
        "label": "角色",  
        "name": "role",  
        "optional": true,  
        "schema": null,  
        "type": "String"  
    },  
{  
        "candidates": null,  
        "candidatesX": null,  
        "description": "Topics of the pulsar server to create---需要創建的主題",  
        "items": {  
            "schema": [  
                {  
                    "candidates": null,  
                    "candidatesX": null,  
                    "description": "topic name---主題名稱",  
                    "label": "主題名稱",  
                    "name": "name",  
                    "schema": null,  
                    "type": "String"  
                },  
                {  
                    "candidates": null,  
                    "candidatesX": null,  
                    "default": 1,  
                    "description": "partition number---分區數",  
                    "label": "分區數",  
                    "name": "partitions",  
                    "schema": null,  
                    "type": "Integer",  
                    "validator": ">0"  
                }  
            ],  
            "type": "Object"  
        },  
        "label": "主題列表",  
        "name": "topics",  
        "optional": true,  
        "schema": null,  
        "type": "List"  
    }  
]

我想要得到的數據是 type 爲 List 的數據,並且數據結構爲:

[  
{type:List, name:"topics", needValidates:[{  
    name:"name", type:"String"  
},{name:"partitions", type:"Integer"}] }  
]

GPT 會爲我們得到正確的結果:

圖片

我們只需要輸入目標數據結構,轉換後的數據結構,無需指定語言。因爲它會從你的上下文裏理解到你是想要問什麼實現方式。

還有執行腳本,我們只需要描述清楚我們的需求,它也會幫助我們進行完善。

圖片

此外,它還可以進行進行解釋說明:

圖片

上面可以看到,我們在這裏使用了一次“自然語言編程”的操作流程。不論你是否會使用 python、bash 你都可以正常的描述你的需求。進行生成。

我們還可以進行代碼轉換,例如你寫了一段 js 代碼,你希望將這段代碼轉化爲python,以前我們會通過 Google 搜索看看有沒有對應的轉換器,現在就只需要交給 gpt 來執行。提出你的訴求,它會在 10s 內爲你生成一段沒有 bug,包含異常處理的代碼。這裏我們不展開舉例。

2.5生成單測

我們剛剛那段數據轉化的代碼,如果我們想要進行測試。以前我們可能會苦思冥想很多場景進行補充。現在只需要告訴 AI 幫我生成單測即可。

prompt: (代碼內容) 爲這段代碼生成 unit test。

image.png

如果你覺得測試條件不夠,那就再問它,讓它再生成。

prompt: 數據源不夠豐富,多測試集中邊界條件,比如數據不存在,數據類型無法轉換,數據類型不對等。

image.png

它還會給你解釋這裏都做了什麼操作,這些測試用例覆蓋了不同的場景,包括:

當數據源中沒有類型爲 List 的字段時,應該返回空數組;當數據源中有類型爲 List 的字段時,應該返回正確的字段數組,包括需要的驗證。

2.6 更多 AI 應用/插件

AI 就像是一個基礎應用, 在它上面還有着很多的可能。隨着你用的越多,解鎖的技能也就越豐富。例如現在 GPT 系列甚至推出了自己的應用市場。下面我們來爲各位簡單介紹幾款熱門插件:

  • AIPRM

它是 ChatGPT3.5 時代的應用商店。用戶通過不同的 prompt,對它進行訓練,達到自己的目的。

例如我們在文章最開始介紹的“長文總結”能力:我們普通的和它進行交流,那麼字數限制就會成爲瓶頸。但是如果我們轉化了溝通技巧,那麼就可以突破這一限制。AIPRM 就是一個充滿了奇思妙想的插件系統,你可以在裏面查找/發佈各種你想要的 prompt。

圖片

  • Voice Control for ChatGPT

依託於這樣的系統,我們可以使用它鍛鍊英文(僞需求)。或者是直接用語音和它進行對話,讓它替自己寫代碼,例如我們剛剛所有的腳本說明都可以讓它直接語音轉文字發出去。

它也很好的服務了一些視障人士,因爲它還會讀出每一次 GPT 生成的內容。讓每個人都擁有平等接觸 AI的機會。

圖片

  • ChatGPT Sidebar

隨着使用的人越來越多,ChatGPT 的響應速度越來越慢。有時候只不過想問一個簡單的問題,卻要等上很久。這時候,就可以使用 ChatGPT Sidebar 插件。

它內置了 ChatGPT 的 API,可以直接集成在你的搜索引擎裏,你的每一次搜索都會觸發(也可以設置爲手動),免註冊,使用方便。還可以讓它提示你如何搜索相關的關鍵詞。

圖片

在它的側邊欄裏,我們還可以進行其它的操作。

圖片

  • 著名應用工具使用體驗:Bing Copilot、ChatGPT、Google Bard

那我們再回頭看看幾個影響力比較高的AI工具。筆者個人現常用的基礎 AI 工具大概有 3 種,分別是 Bing Copilot、ChatGPT、Google Bard。最被廣泛使用的 ChatGPT(GPT3-5),我們先來看看它的自我介紹是什麼。

ChatGPT:使用頻率最高的 AI。它有強大的上下文,還可以拆分成爲不同的 conversation,便於它處理不同的對話。

例如一個控制檯的項目,可以單獨做一個對話,這樣它聊的上下文都是圍繞這個主題進行,每次新的問答也無需補充上下文信息。

圖片

Bing :Bing 在很早就使用了 GPT-4,可是因爲對話數實在是太少了(從 5 次擴充到了 15 次),每一次對話的內容長度也很有限(截止目前仍只有 2000 字) 而且不能保存對話上下文,導致使用起來實在很不方便。好處是它是實時聯網的,所以作者主要用於搜索最新的資訊以及總結一些文章和文檔的摘要,以及輔助 ChatGPT 使用,對比一下兩遍生成的邏輯是否一致。優點就是,搜索結果會給出詳細的出處以及引用地址。

圖片

Google Bard (LaMDA) :Google 近期發佈的AI工具目前只支持英文。特點是能夠給出多個回答,而且響應速度很快。集成了 Google it,點擊之後會幫你生成一個最適合你的問題的 google 搜索關鍵詞。這算是和 Bing Copilot 反其道而行之,一個是將 chat 集成到搜索裏,一個是將搜索集成到了 chat 中。

圖片

03、Prompt 能力

3.1Prompt 是什麼?

整體來說,上述 AI 的強大之處有幾點:

總結/理解能力。它能夠很好的總結你發給它的內容,並且進行總結。其實這也就是一種理解能力。因爲它明白了你說的話的意思。

具有強大的上下文關聯能力。你不需要像使用搜索引擎一樣,每一次的操作都是獨立的。你可以將整個對話都變成一個巨大的搜索,通過多次對話來闡述自己想要的信息。甚至還能讓它幫助你向它自己提問。

有豐富的拓展插件潛力

這些能力,相信各位讀者上面的case中都能感知。在上面案例中,爲了更好使用AI、利用這些能力,我們頻繁使用了一個詞叫做 prompt——這在 AI 時代是一個非常重要的內容。

想要用好各類 AI 效率工具,最好的方法就是不斷的提升自己的 prompt 能力。prompt 就是提示詞,表達語言的能力。

在以前的開發生涯中, 我們是“Google 工程師”、 “StackOverflow 工程師”, 被戲稱爲“面向搜索引擎開發”。 每次遇到未解之謎,我們通常會去不斷的更換搜索關鍵詞。

這時候比拼的就是我們的語言表達能力了——我們需要轉換自己的思維,從工程師到產品經理,或者是一個 Business Analysis 的角色。我們需要將接到手的任務,進行拆解,一步步的變爲提示詞。 當你拆解到足夠細的時候,任務就自然而然可以依靠 AI 自動完成了。這個會在項目應用的章節進行具體講解。

3.2Better Prompt

開發者可以利用它的上下文能力,幫助自己糾正語法以及提供更好的 prompt 的訓練。

AI 是不挑語言的?不管你用任何一種語言,它都是利用數據模型進行分析,並不是用單一的語言進行思考。也就是說結果的生成質量不會差異很大。真的是這樣嗎?

實際上,我們通過官網的介紹發現,它對語言的理解是有差異的,目前理解力最強的當然是英文了。我們使用英文進行 prompt,既能鍛鍊自己的英文能力,也能更好的表述自己的問題。可是受限於自身英文水平,我們並不一定每一次都能清晰表達自己的觀點,這時候我們可以利用它幫我們提高這一點。我們故意打錯一段話,來測試一下。

prompt:

you need answer my question obey the format, format should be like this

correct grammar is :
"insert correct grammar here"
________________________________ (keep the diver line)
you can also ask it like this:
"insert better prompt here"


then tell the answer about what i ask below the divier also keep the diver line.

Correct grammar is should correct my question's grammar

image.png

AI 的每一次訓練得到的返回結果都是不一樣的,我們有可能會得到自己想要的,但它也有可能沒有完全理解我們的意思。當我們的訴求沒被完全理解,可以對它進行進一步的訓練。

圖片

在它做對了以後,我們對它進行表彰。然後再去嘗試一下我們其它的問題。可以看到一切正常。

圖片

如果有時候它忘記了,你需要再提醒它一次 format。它就會重新輸出。

04、總結

筆者使用 ChatGPT 等 AI 工具已經 4 個多月了。一開始只是進行簡單的嘗試,並沒有覺得有什麼特別的。直到在瀏覽各類教程時,才發現那些以前分享金融知識的人已經開始利用 GPT 進行代碼創作來豐富自己的武器庫,比如進行圖標分析、軟件製作等等。實際上,AI 並不是簡單的問答而已,它具有解決問題甚至是創造知識的能力。

當然我在使用的過程當中,周圍也有很多聲音在質疑 AI 的能力。認爲它並不能如想象的優秀。例如你直接跟它講,給我做個需求、給我寫篇論文,它都是無法完成的。

因爲其實我們在錯誤地使用 AI。 合理的使用,應該是「我們做我們該做的事情,AI 做 AI 該做的事情」。以前搜索引擎的時代,我們也並不是直接在搜索框裏輸入 “給我答案” 吧?用戶要儘量描述清楚自己的問題。

現在對程序員的要求已然不是簡單的書寫代碼了。因爲 AI 能做,甚至比你的代碼質量還要高。我們需要將自己的思維進行轉換,從程序員變成擁有產品思維的程序員、擁有 BA 思維的程序員。要對自己手裏的任務、方法、邏輯,有更清晰的認知。讓人類做人類該做的事情,讓 AI 做它擅長的事情。

當你把你想要的內容清晰的描述出來以後,你會發現:AI 不是來替代你的,是來幫助你更好的工作的。 以上是本次分享全部內容,歡迎大家在評論區分享交流。如果覺得內容有用,歡迎轉發~

-End-

原創作者|熊彬

技術責編|熊彬

AI對話工具出現以前,當我們想找答案,往往都是通過對搜索引擎初步梳理出的海量信息,進行篩選、對比、總結,形成自己的知識。有網友給小云貢獻了自己與朋友的探討:“現在類GPT工具出現之後,很少人願意去看大段的文章來學習,只願意看到最後給的一小段結果。這感覺就像微博對博客的打擊、短視頻對於長視頻的衝擊,最後形成的是短視和浮躁氛圍。最後導致自身的篩選分析、歸納總結,記憶力等技能無法長進甚至退化。”你怎麼看?GPT等新智能工具的出現,會導致人基本能力不進反退嗎?

圖片

在公衆號評論區聊一聊你的看法。4月20日前將你的評論記錄截圖,發送給騰訊雲開發者公衆號後臺,可領取騰訊雲「開發者春季限定紅包封面」一個,數量有限先到先得😄。我們還將選取點贊量最高的1位朋友,送出騰訊QQ公仔1個。4月20日中午12點開獎。快邀請你的開發者朋友們一起來參與吧!

關注我並點亮星標,公衆號回覆「AIGC」一鍵領取0基礎AI網站搭建教程、LLM模型源件、工具插件、網站源碼和GPU服務器限量優惠。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章