0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GPT-4處于一個什么樣的編碼地位

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-06-16 10:42 ? 次閱讀

面試環(huán)節(jié)第一步——回答問題,寫軟件需求

面試環(huán)節(jié)第二步——上手寫代碼

測試用例

比 ChatGPT 背后 GPT-3.5 更為強大的模型 GPT-4,已正式對外發(fā)布。在 OpenAI 官方發(fā)布的 GPT-4 Developer Livestream(https://www.youtube.com/watch?v=outcGtbnMuQ)視頻中,我們親眼見證了 OpenAI CTO Greg Brockman 演示了 GPT-4 將一張手繪草稿架構圖變成一個現(xiàn)實可滑動的網站;同時,它也能幫助我們直接生成代碼,甚至當我們把代碼運行報錯的界面截一個圖發(fā)給 GPT-4 時,它就能給出相應的解決方案提示。

這種直接對標程序員飯碗的工具,在日常開發(fā)場景下,生成的代碼是否真的可用?如果說 ChatGPT 達到了 Google L3 級別工程師,能拿到 18.3 萬美元的薪資,那么 GPT-4 處于一個什么樣的編碼地位?

近日,前 Google 軟件開發(fā)工程師、現(xiàn)任 IT 在線學習平臺 Scaler 的教學系統(tǒng)設計師 Naman Bhalla 模擬了 GPT-4 去參加 Uber 這類公司面試會遇到的問題,其以“設計一個分布式緩存系統(tǒng)”為主題,探討 GPT-4 在面試環(huán)節(jié)中的表現(xiàn)情況。

目前,他還把包含所有測試用例的完整代碼放到 GitHub 上公開了出來:https://github.com/Naman-Bhalla/lldassignments/tree/master/src/main/java/dev/naman/lldassignments/casestudies/distributedcache/solution

整體而言,在寫需求、回答問題、寫代碼環(huán)節(jié)中,GPT-4 能力達到普通工程師級別。不過,在測試用例環(huán)境,GPT-4 似乎失去上下文的邏輯性,甚至一度把自己搞懵。

接下來,我們將分享 Naman Bhalla 測試的全過程。

面試環(huán)節(jié)第一步——回答問題,寫軟件需求

軟件項目開發(fā)過程中,對于程序員而言,實施軟件開發(fā)的基礎就是要先寫一份軟件需求說明。

因此,在開始時,Naman Bhalla 提出要求 GPT-4 ——“為 Uber 構建一個分布式緩存,給我寫一份問題需求?!?/p>

一句話之后,GPT-4 快速地給出了標題、問題描述、具體的要求:

標題:Uber 的分布式緩存系統(tǒng)

問題描述:

設計并實現(xiàn)一個分布式緩存系統(tǒng),可以有效地存儲和管理 Uber 服務的數據。該緩存應支持高可用和可擴展的架構,以滿足 Uber 不斷增長的對快速和高效數據檢索的需求。

要求:

1.設計一款分布式緩存系統(tǒng),可以支持以下操作:

a. Put(key, value): 將鍵值對存儲在緩存中。

b.Get(key):如果它存在于緩存中,檢索與給定鍵相關的值。

c.Delete(key):從緩存中刪除與給定鍵相關的鍵值對。

2.緩存應該有一個可配置的大小(鍵值對的數量)和一個可配置的生存時間(TTL,Time to live)。當緩存達到最大容量時,系統(tǒng)應該刪除最近使用最少的項目(LRU)來為新的項目騰出空間。

3.確保緩存分布在多個節(jié)點上,以提高可擴展性和可用性。設計系統(tǒng)能夠良好地處理節(jié)點故障和網絡分區(qū)。

4.實施一致性散列的機制,將鍵值對均勻地分布在緩存的各個節(jié)點上。

5.系統(tǒng)應該支持水平擴展。它應該很容易地從緩存中增加或刪除節(jié)點,而不會有明顯的停機時間或數據損失。

6.為數據的一致性和容錯性實施讀和寫的法定人數。該系統(tǒng)應該能夠處理并發(fā)的讀和寫,而不會造成數據的不一致。

7.包括監(jiān)控和記錄功能,可以跟蹤高速緩存系統(tǒng)的健康和性能。

8.設計一個簡單的用戶界面或命令行界面來與緩存系統(tǒng)進行交互,允許用戶執(zhí)行諸如放、取和刪除等操作

9.編寫測試案例來驗證緩存系統(tǒng)的正確性和可靠性

GPT-4 能夠說出基本要求,準確度也不錯。可以說,過了第一關。

緊接著,Naman Bhalla 針對分布式緩存中一些經典的問題進行了提問,比如:“如何確保代碼中支持類似于讀取自己的寫入數據(Reading your own writes)的一致性問題?”、“緩存可以支持哪些功能?是不是包括一些優(yōu)化、可擴展性和對客戶可用性的保證?”

對于提供一些文字解答方面,GPT-4 給出的答案都很充分,還列出了多個小點,便于大家很直觀地看出回答的錯與對。

針對第一問時,其答復道:

讀取自己的寫入數據(Reading your own writes)的一致性保證了一旦客戶端進行了寫操作,所有來自同一客戶端的后續(xù)讀操作都會返回更新的數據。為了保證分布式緩存系統(tǒng)的這種一致性水平,你可以實施以下策略:

基于 Session 的方法。

客戶端緩存。

粘性路由。

讀后寫的一致性。

版本管理或時間戳。

因果一致性。

第二個問題,GPT-4 回答,“緩存可以支持各種功能、優(yōu)化和保證,以提高它的性能、可擴展性和對客戶的可用性。其中一些功能包括驅逐策略、生存時間(TTL)、數據一致性、緩存分區(qū)、緩存復制、緩存的持久性等等”。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

面試環(huán)節(jié)第二步——上手寫代碼

當問題以不錯的結果完成之后,接下來,所謂是騾子是馬,拿出來溜溜,由此也進入了程序員崗位最為重要的實操環(huán)節(jié)——寫代碼。

Naman Bhalla 給出的要求是,讓 GPT-4 用 Java 編寫一個分布式緩存的代碼,支持以下要求:

值得注意的是,上文解答過程中,足以讓 GPT-4 能夠把 Naman Bhalla 提出的 5 項要求弄懂。

不過,當拿到最新寫代碼需求時,GPT-4 首先還是有些懵,其表示,“由于問題的復雜性和和響應格式的限制,我不能提供分布式緩存系統(tǒng)的完整代碼。但是,我可以給你一個系統(tǒng)組件的大綱和一些代碼片段,由此可以幫助你開始實施這個系統(tǒng)。你可以根據你的要求修改和擴展這些代碼片段。”

于是它提供了四個部分的代碼片段:

CacheNode

DistributedCache

ConsistentHashing

CacheClient

當然,這對于想要“坐享其成”的程序員而言,未必是一個好消息,大家都想要拿來就能用的代碼,必然不想聽到只給代碼片段的回復。

因此,當 Naman Bhalla 繼續(xù)要求 GPT-4 實現(xiàn) CacheNode 的完整代碼時,GPT-4 還是滿足了他的小心思,提供了完整的算法和代碼:

除了 CacheNode 這部分的代碼之外,Naman Bhalla 相繼得到了 GPT-4 提供的 DistributedCache、ConsistentHashing、EvictionStrategy(接口以及LRU 和 LFU 實現(xiàn))的代碼。

680f8414-05eb-11ee-962d-dac502259ad0.jpg

不知道什么原因,GPT-4 決定不再提供關于 Request Collapsing、Async Processing、Prefetching 的代碼。不過,如果進一步跟它提要求,支持這些功能時,它還是嗒嗒嗒地敲下了這些代碼。

682222d6-05eb-11ee-962d-dac502259ad0.jpg

當然,在這過程中,站在程序員的角度來看,想要 GPT-4 生成的代碼即可用,首先要看得懂這些代碼,知道分布式緩存系統(tǒng)實現(xiàn)的具體邏輯,否則,缺失哪一塊都不知道,更別論拿著代碼去運行了。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

測試用例

完整的代碼有了之后,便進入了寫測試用例的時候了。Naman Bhalla 直接要求 GPT-4 編碼每個部分的 junit 測試示例。

GPT-4 的回復是:

為了測試 DistributedCache 的實現(xiàn),我們將創(chuàng)建一個名為"DistributedCacheTest "的 JUnit 測試類。這個測試類將涵蓋以下情況:

測試基本的 put 和 get 功能。

測試刪除功能。

測試添加和刪除一個緩存節(jié)點。

測試請求合并。

測試 prefetching。

很顯然,GPT-4 知道要測試哪些用例,也寫了正確的測試用例。

6831b1b0-05eb-11ee-962d-dac502259ad0.jpg

不過,它并沒有寫最后一個關于 prefetching 的測試用例。因為它的邏輯沒有被定義。為此,GPT-4 提供了一些建議,如「你需要在 DistributedCache 類中實現(xiàn) prefetchKeys 方法,該方法根據給定的鍵生成一個 prefetch 的鍵列表。一旦你實現(xiàn)了這個方法,你就可以添加一個測試案例來驗證 prefetch 是否按預期工作?!?/p>

承接上文,Naman Bhalla 建議 GPT-4 還是自己直接給出一個自定義 prefetch 的示例。不出意料,GPT-4 照做了,然后實現(xiàn)了測試。

684e0928-05eb-11ee-962d-dac502259ad0.jpg

Naman Bhalla 表示,由于在面試過程中,面試官經常問程序員如何在代碼中支持 XXX。于是,他本著好奇的性子,就問 GPT-4 在實現(xiàn)中如何支持讀取自己的寫入數據(Read your own writes)。

68583b1e-05eb-11ee-962d-dac502259ad0.jpg

Naman Bhalla 注意到,GPT-4 所寫的一個測試用例是不穩(wěn)定的,因為它產生了非確定性的輸出。由于并發(fā)性,它產生了非確定性的輸出。當 Naman Bhalla 進一步向 GPT-4 問了這個問題,它很快就糾正了錯誤。

686f1c26-05eb-11ee-962d-dac502259ad0.jpg

然而,當要求 GPT-4 實現(xiàn)對給定線程的密鑰請求的粘性,以確保沒有一致性問題。

GPT-4 答復道:“為了確保每個鍵的請求都進入同一個線程,你可以在 CacheNode 類中使用ExecutorService創(chuàng)建一個線程池。每個鍵將根據其散列代碼被散列到一個特定的線程,以確保對一個特定鍵的所有操作都由同一個線程執(zhí)行。”

事實上,它提出了一個非最佳的 ExecutorService,但告訴 Naman Bhalla 最佳的解決方案是什么,并且也進行了編碼。

687e4aac-05eb-11ee-962d-dac502259ad0.jpg689a6f7a-05eb-11ee-962d-dac502259ad0.jpg

不知何故,GPT-4 在這里開始發(fā)狂了。開始不斷重復自己的代碼,而不是完成代碼。另外,ExecutorService 的實現(xiàn)是錯誤的。它沒有擴展超類,也沒有實現(xiàn)它的所有方法。

68a4b458-05eb-11ee-962d-dac502259ad0.jpg

當 Naman Bhalla 要求 GPT-4 修復這個問題時,“它似乎已經瘋了”,Naman Bhalla 無奈地說道。

因為,GPT-4 不僅沒有修復上面的問題,反而又創(chuàng)建了一個新的 Cache 類,它基本上在做與 CacheNode 相同的工作。Naman Bhalla 稱,最初認為 GPT-4 這樣做可能是為了提高代碼質量。但似乎它已經開始忘記上文了,再次定義了許多先前已經定義的類。

68b5e8ae-05eb-11ee-962d-dac502259ad0.jpg68c28000-05eb-11ee-962d-dac502259ad0.jpg

為了讓 GPT-4 回歸正軌,Naman Bhalla 復制粘貼了它之前寫的 CacheNode 的代碼,并要求它為新的 ExecutorService 修改它。

68d6fd00-05eb-11ee-962d-dac502259ad0.jpg68e4bf12-05eb-11ee-962d-dac502259ad0.jpg69028ad8-05eb-11ee-962d-dac502259ad0.jpg

最終,GPT-4 雖然犯了一些錯誤,但在提示下得到了修復。修復完成之后,Naman Bhalla 又要求 GPT-4 再寫一些測試用例來全面測試。特別是針對并發(fā)請求。但由于 GPT-4 已經開始失去上文背景,所以它不可避免地又犯了錯誤,Naman Bhalla 不得不告訴它之前寫的代碼。

69111742-05eb-11ee-962d-dac502259ad0.jpg69268a46-05eb-11ee-962d-dac502259ad0.jpg

幾經折騰,GPT-4 終于實現(xiàn)了正確的測試用例:

693a779a-05eb-11ee-962d-dac502259ad0.jpg

寫在最后

整體而言,GPT-4 提供了完整的分布式緩存系統(tǒng)代碼,其能力處于一個不錯的水平。不過,距離理想中的一鍵就能生成可用的代碼,還有很長的距離,仍然需要程序員從中不斷提供“提示語”,并優(yōu)化糾錯。

那么,如果讓 GPT-4 作為工程師入職,你會支持還是拒絕?
責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編碼
    +關注

    關注

    6

    文章

    920

    瀏覽量

    54711
  • 代碼
    +關注

    關注

    30

    文章

    4697

    瀏覽量

    68085
  • GPT
    GPT
    +關注

    關注

    0

    文章

    347

    瀏覽量

    15246

原文標題:讓 GPT-4 幫我設計一個分布式緩存系統(tǒng),從嘗試到被我逼瘋!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    GPT-4發(fā)布!多領域超越“人類水平”,專家:國內落后2-3年

    排隊申請內測。 對于GPT-4的性能,很多國外網友的描述都是“GPT-4,起飛!” ? 多模態(tài)大型語言模型GPT-4 GPT-4被定義為OpenAI發(fā)展的另
    的頭像 發(fā)表于 03-16 01:58 ?4598次閱讀
    <b class='flag-5'>GPT-4</b>發(fā)布!多領域超越“人類水平”,專家:國內落后2-3年

    ChatGPT升級 OpenAI史上最強大模型GPT-4發(fā)布

    ChatGPT升級 史上最強大模型GPT-4發(fā)布 OpenAI正式推出了ChatGPT升級版本,號稱史上最強大模型GPT-4發(fā)布。OpenAI期待GPT-4成為
    的頭像 發(fā)表于 03-15 18:15 ?2716次閱讀

    關于GPT-4的產品化狂想

    GPT-4是條件,而不是結果
    的頭像 發(fā)表于 03-26 10:48 ?2895次閱讀
    關于<b class='flag-5'>GPT-4</b>的產品化狂想

    史上超強模型GPT-4張手繪草圖能生網站、60秒搞定游戲開發(fā)!

    雖然此前 OpenAI 首席技術官 Mira Murati 不斷給大家打預防針,希望外界能夠對下GPT(即 GPT-4)的技術水平更加冷靜務實些,少
    的頭像 發(fā)表于 04-12 11:17 ?1611次閱讀

    GPT-4是這樣搞電機的

    GPT-4寫電機基礎程序沒問題
    的頭像 發(fā)表于 04-17 09:41 ?921次閱讀
    <b class='flag-5'>GPT-4</b>是這樣搞電機的

    微軟GPT-4搜索引擎重大升級 新Bing開放AI能力

    微軟GPT-4搜索引擎重大升級 新Bing開放AI能力 微軟和OpenAI合作將人工智能技術應用于必應搜索帶來了更多不一樣的搜索體驗。 此前Open AI發(fā)布了新代大型人工智能語言訓練模型
    的頭像 發(fā)表于 05-05 17:15 ?2523次閱讀

    一個前沿:GPT-4和物聯(lián)網

    Chat GPT-4有何特殊之處?它不僅僅是般的聊天機器人——其誕生將徹底改變各個行業(yè)。它可以生成非常人性化的文字內容,同時運用最尖端的深度學習算法,以致使用者可能甚至不會意識到自己正在與臺計算機對話!它可比擬于擁有
    的頭像 發(fā)表于 05-16 11:36 ?882次閱讀

    GPT-4 的模型結構和訓練方法

    GPT-4 的發(fā)布報道上,GPT-4 的多模態(tài)能力讓人印象深刻,它可以理解圖片內容給出圖片描述,甚至能在圖片內容的基礎上理解其中的隱喻或推斷下時刻的發(fā)展。
    的頭像 發(fā)表于 05-22 15:21 ?2541次閱讀
    <b class='flag-5'>GPT-4</b> 的模型結構和訓練方法

    可商用多語言聊天LLM開源,性能直逼GPT-4

    在針對英語、中文、法語、阿拉伯語、西班牙語、印度語這 6 種語言的評測中,GPT-4 的勝率為 54.75%,BLOOMChat 的勝率為 45.25%,稍弱 GPT-4。但與其它 4
    的頭像 發(fā)表于 05-25 11:14 ?944次閱讀
    可商用多語言聊天LLM開源,性能直逼<b class='flag-5'>GPT-4</b>

    人工通用智能的火花:GPT-4的早期實驗

    人工智能(AI)研究人員直在開發(fā)和完善大型語言模型(LLMs),這些模型在各種領域和任務中表現(xiàn) 出非凡的能力,挑戰(zhàn)我們對學習和認知的理解。由OpenAI開發(fā)的最新模型GPT-4[Ope23
    發(fā)表于 06-20 15:49 ?1次下載

    GPT-4已經會自己設計芯片了嗎?

    ? GPT-4已經會自己設計芯片了!芯片設計行業(yè)的老大難問題HDL,已經被GPT-4順利解決。并且,它設計的130nm芯片,已經成功流片。 GP
    的頭像 發(fā)表于 06-20 11:51 ?908次閱讀
    <b class='flag-5'>GPT-4</b>已經會自己設計芯片了嗎?

    OpenAI宣布GPT-4 API全面開放使用!

    OpenAI 在博客文章中寫道:“自 3 月份以來,數百萬開發(fā)者請求訪問 GPT-4 API,并且利用 GPT-4 的創(chuàng)新產品范圍每天都在增長?!?“我們設想基于對話的模型未來可以支持任何用例?!?/div>
    的頭像 發(fā)表于 07-12 14:55 ?1203次閱讀

    GPT-3.5 vs GPT-4:ChatGPT Plus 值得訂閱費嗎 國內怎么付費?

    GPT-3.5 vs GPT-4:ChatGPT Plus值得訂閱費嗎?ChatGPT Plus國內如何付費?? ChatGPT-3.5切都很好,但ChatGPT-4(通過ChatG
    的頭像 發(fā)表于 08-02 12:09 ?4063次閱讀
    <b class='flag-5'>GPT</b>-3.5 vs <b class='flag-5'>GPT-4</b>:ChatGPT Plus 值得訂閱費嗎 國內怎么付費?

    GPT-4沒有推理能力嗎?

    今年三月,OpenAI 重磅發(fā)布了 GPT-4 大模型,帶來了比 ChatGPT 背后 GPT-3.5 更強的推理、計算、邏輯能力,也引發(fā)了全民使用的熱潮。在各行各領域研究人員、開發(fā)者、設計師的使用過程中,「GPT-4 是最為領
    的頭像 發(fā)表于 08-11 14:20 ?846次閱讀
    <b class='flag-5'>GPT-4</b>沒有推理能力嗎?

    ChatGPT plus有什么功能?OpenAI 發(fā)布 GPT-4 Turbo 目前我們所知道的功能

    OpenAI 發(fā)布 GPT-4 Turbo 目前我們所知道的功能分析解答 在最近的OpenAI DevDay上,該組織發(fā)布了項備受期待的公告:推出GPT-4 Turbo,這是對其突破性AI模型
    的頭像 發(fā)表于 12-13 09:19 ?996次閱讀
    ChatGPT plus有什么功能?OpenAI 發(fā)布 <b class='flag-5'>GPT-4</b> Turbo 目前我們所知道的功能