背景
前段時間,我和公司的一位項目經理進行了交流。她負責多個項目的執行和傳遞,同時也深受各種POPO群消息轟炸的困擾。在公司,POPO被用作日常工作協同工具,功能類似于釘釘、飛書和企業微信。
我在日常使用ChatGPT的過程中對其代碼編寫和語義了解這兩個能力尤其印象深刻。是以,我決定借助ChatGPT GPT4的能力開發一個POPO群消息助手産品。
當我開始這個項目時,釘釘和飛書尚未推出智能助理。随後他們的智能助理釋出會上也公布了群消息助手功能,這也證明了這個功能是剛需。
産品實作
剛畢業那幾年我一直在寫程式。轉行成為産品經理後,我的編碼經驗主要是用Python編寫腳本和算法,幾乎不再編寫工程代碼了。
POPO群消息助手是我很長一段時間來寫的第一個工程軟體。從産品構思到第一個版本的上線運作,累計大概花了四五天的時間。
産品的功能很清晰:
- POPO群消息助手就是一個POPO賬号。
- 将這個賬号加入任意一個POPO群後,它就會把該群當天的所有聊天内容按照不同的主題進行分類,總結出每個主題的關鍵資訊和下一步計劃。
- 每天晚上它會自動把總結資訊發到群裡。任何一個人發消息@它,它也會發送相關總結資訊。
整體産品的實作邏輯也比較簡單:
- 收集POPO群的消息。
- 按照特定的格式将消息發送到GPT接口,由GPT進行群消息的概括。
- 将概括的内容再發送到群内。
基于這次實踐經驗,我認為如果要利用ChatGPT完成一個工程型代碼的開發,還是需要具備一定的技術基礎:
- 了解一些基礎的技術架構。例如前後端的概念,用戶端、服務端、第三方服務之間的差別等,這樣才能提出合理的問題。
- 能讀懂代碼。雖然ChatGPT可以直接編寫代碼,但你不能隻通過一個需求就讓它寫出大量完整的應用程式。你還需要通過多個問題來完成程式不同部分的代碼,這些代碼的組合仍然需要你自己完成,而且很多時候你也需要直接修改代碼。
- 對代碼運作環境有一定的了解,例如Linux,需要會執行Shell指令。
如果完全沒有上述基礎,雖然可以通過ChatGPT學習,但這可能并不提高效率,而更像是重新學習。
實作步驟
ChatGPT具有以下幾個特性:
- ChatGPT目前隻能處理字元串,并且輸入和輸出都有一定的字元串長度(token數)限制。
- ChatGPT對于明确具體的問題能夠一次性給出精确的答案,對于抽象和籠統的問題則需要多次追問和人工調整,才可能得出接近的回報。
- ChatGPT也可能會犯錯誤,需要人工進行糾正。
盡管POPO群消息助手的産品實作邏輯很簡單,但基于ChatGPT的特性,我還需要經過反複的詢問和調試才能完成産品開發。
整個開發的過程有幾個部分工作:
建構生産和運作環境
首先,需要在伺服器上安裝開發架構。畢竟要實作的是一種服務端應用,與單機版軟體有所不同。
我近期主要使用Python,是以選擇了一個簡單的Python架構——Flask。
之前對Flask有一定了解,在春節前就基于Flask将GPT接入到了個人公衆号裡,後來也因為衆所周知的原因關閉了。
對于代碼倉庫管理,選擇了目前最主流的工具——Git。
基于上述選擇,我分别在個人電腦和伺服器上配置了開發環境和線上運作環境。
我對環境的搭建并不熟悉。
因為平時隻寫Python腳本,在自己的電腦上使用Jupyter notebook或VS Code運作就行,很久沒有寫過在伺服器上運作的程式了。
是以安裝和配置的整個過程都是一步步向ChatGPT詢問,然後複制指令在終端運作的。
比如下圖就是我在詢問如何從Linux伺服器上下載下傳檔案。
調用POPO開放平台的服務
平時經常檢視各種第三方接口文檔,是以POPO開放平台接口文檔的閱讀是沒什麼問題。但對于一些非功能性的接口調用,如擷取接口的Token,接口調用的簽名驗證等,我平時并不關注。這些對于開發人員來說是标準的流程,但對我來說卻是新事物。
關于如何使用開放接口,我的經驗是将以下幾部分内容分别輸入ChatGPT,然後它就可以直接傳回調用代碼。
内容包括:
- Token
- 接口調用位址
- 接口描述和接口參數
- 示例代碼
我将這些内容分别粘貼給ChatGPT,然後将其傳回的代碼複制到IDE中直接運作,一切順利。整個過程非常神奇。
比如下面GPT就在幫我改寫接口示例代碼。
代碼邏輯實作
代碼邏輯的開發通常是最耗時的部分。由于我日常程式設計量不多,對于文法和各種庫的熟悉程度偏低,每次寫代碼時才查閱各種相關資料,挺費時的。
而ChatGPT擅長寫代碼邏輯,隻要需求清晰,它不僅能妥善處理邏輯,而且函數定義清晰,基本上也會考慮異常處理,其能力超越許多專業程式員。
如果産品功能很簡單,隻需要一個或幾個函數就能運作,那麼經過幾個問題和追問後,ChatGPT就能給出可直接運作的代碼。
但如果産品功能達到一定複雜度,代碼量也相應增加,那麼情況就會變得複雜。這也和前面提到的ChatGPT的使用特性有關。
比如如果直接告訴ChatGPT用Python來實作POPO群消息助手,它是無法實作的。我必須給它提供一系列背景資訊和産品實作邏輯,讓它了解整體需求。
同時,由于複雜的背景和需求超過了ChatGPT的token限制,整體代碼的輸出也超過了token限制。是以必須要一步一步告訴它。
也就是說,我需要把複雜問題拆解成簡單問題,然後得到簡單問題的答案,最後組合成複雜問題的答案。
整個拆解、詢問、彙總的過程,都需要人工來完成。
并且這個過程還需要反複調整。
整個開發過程中,我應該詢問了上百次。且在整個過程中,基本不可能在ChatGPT那保持一個始終穩定的背景和需求,讓他直接給我正确答案。
首先,複雜問題的拆解本身就不是一步到位的,人的了解也是一個逐漸接近正确的過程,需要不斷嘗試。
其次,ChatGPT本身也會出錯。
是以人的判斷和參與在整個過程中是非常重要的,并且最後還是由人來彙總出正确的完整代碼。
這也就是為什麼我認為,如果想用ChatGPT來完成一個有一定複雜度的産品開發,自己還需要有一定的編碼能力。
下圖就是ChatGPT犯錯的時候。
寫在最後
基于這次使用ChatGPT完成軟體開發的經曆,我認為它首先是産品經理的好助手。
産品經理通常有很多想法,但由于不會程式設計,這些想法最終隻能停留在紙上。有了ChatGPT的幫助,對技術有一定了解的産品經理,就能夠自己制作出各種簡單的産品,一個人能變成一支隊伍。
對于專業的程式員來說,ChatGPT能大大提高編碼效率,也會整體上提升代碼品質,這對于個人來說也是好事。
當然,能夠大幅度提高效率的技術,往往也會帶來行業的重大變革。是以,ChatGPT對于程式員這個職業會産生什麼樣的影響,是進一步要關注和思考的了。
關于這些問題,本文就不詳細探讨。
用一句流行的話來結束,打敗我們的不是AI,而是用AI的人。
感謝閱讀,歡迎關注公号「何必多想」