對OpenAI模型進(jìn)行基準(zhǔn)測試以實(shí)現(xiàn)自動解決錯誤 原創(chuàng)
本文評估了軟件開發(fā)中的LLM,重點(diǎn)關(guān)注它們在解決錯誤方面的有效性。這是軟件開發(fā)人員工作流程中的一個關(guān)鍵任務(wù)。
大型語言模型(LLM)正在日益塑造軟件開發(fā)的未來,為代碼生成、調(diào)試和解決錯誤提供了新的可能性。這些人工智能驅(qū)動工具的最新進(jìn)展促使人們更仔細(xì)地研究它們的實(shí)際應(yīng)用和對開發(fā)人員工作流程的潛在影響。
本文探討了LLM在軟件開發(fā)中的有效性,特別關(guān)注解決錯誤。根據(jù)軟件開發(fā)人員在Raygun公司的人工智能解決錯誤工作中獲得的行業(yè)觀察和見解,將分析LLM當(dāng)前的能力及其對未來開發(fā)實(shí)踐的影響,并討論將權(quán)衡這些技術(shù)融入人們的日常工作所帶來的具有前景的進(jìn)步和挑戰(zhàn)。
一、用于軟件開發(fā)的OpenAI模型
OpenAI公司已經(jīng)成功發(fā)布了更新、更快、更智能的模型。雖然基準(zhǔn)測試網(wǎng)站證實(shí)了這些結(jié)果,但越來越多的非官方證據(jù)表明,人們感覺這些模型更加笨拙。大多數(shù)現(xiàn)有的基準(zhǔn)測試完全側(cè)重于關(guān)注這些模型的邏輯推理方面,例如完成SAT問題,而不是關(guān)注定性響應(yīng),特別是在軟件工程領(lǐng)域。而這里的目標(biāo)是使用錯誤解析作為基準(zhǔn),定量和定性地評估這些模型,因?yàn)榻鉀Q錯誤在開發(fā)人員的工作流程中很常見。
這個綜合評估將涵蓋幾種模型,其中包括GPT-3.5 Turbo、GPT-4、GPT-4 Turbo、GPT- 40和GPT-40 mini。本文將使用現(xiàn)實(shí)生活中的堆棧跟蹤和發(fā)送的相關(guān)信息來評估這些模型如何解決錯誤,還將徹底檢查響應(yīng)速度、答案質(zhì)量和開發(fā)人員偏好等因素。這種分析將導(dǎo)致從這些模型中提取最佳響應(yīng)的建議,例如提供更多場景(例如源圖和源代碼)對其有效性的影響。
二、實(shí)驗(yàn)方法
如上所述,將評估以下模型: GPT-3.5 Turbo、GPT-4、GPT-4 Turbo、GPT- 40和GPT-40 mini。使用的特定變體是截至2024年7月30日由OpenAI API提供的默認(rèn)模型。
為了進(jìn)行評估,從各種編程語言中選擇了七個現(xiàn)實(shí)世界中的錯誤,包括Python、TypeScript和.NET,每種語言都結(jié)合了不同的框架。通過在賬戶和個人項(xiàng)目中抽樣現(xiàn)有的錯誤來選擇這些具有代表性的樣本。沒有選擇瞬態(tài)或未指向直接原因的錯誤。
名稱 | 語言 | 解決方案 | 難度 |
Android missing file | .NET Core | 試圖讀取的.dll文件不存在 | 簡單 |
Division by zero | Python | 空數(shù)組導(dǎo)致的除零錯誤-無錯誤檢查 | 簡單 |
Invalid stop id | TypeScript | 從Alexa請求信封中提取的停止ID無效- Alexa模糊測試發(fā)送了無效的xyzxyz值 | 困難 |
IRaygunUserProvider not registered | .NET Core | IRaygunUserProvider沒有在DI容器中注冊,導(dǎo)致在MAUI中創(chuàng)建主頁失敗 | 中等 |
JSON Serialization Error | .NET Core | 強(qiáng)類型對象映射與提供的JSON對象不匹配,是由Raygun客戶端發(fā)送的不兼容的錯誤有效負(fù)載引起的 | 困難 |
Main page not registered ILogger | .NET Core | 添加了ILogger,但是MainPage沒有作為一個單例添加到DI容器中,導(dǎo)致ILogger<MainPage>在創(chuàng)建MainPage時出錯 | 中等 |
Postgres missing table | .NET Core/Postgres | 當(dāng)被C# 程序調(diào)用時,Postgres丟失表,導(dǎo)致堆棧跟蹤混亂 | 簡單-中等 |
然后使用來自Raygun公司的AI Error Resolution的模板系統(tǒng)提示,其中包含了發(fā)送崩潰報告中的信息。通過OpenAI的API直接在所有模型上進(jìn)行了測試。這個過程產(chǎn)生了35個LLM錯誤響應(yīng)對。然后這些配對被隨機(jī)分配給工程師,他們根據(jù)準(zhǔn)確性、清晰度和實(shí)用性對它們進(jìn)行1到5的評分。此次評估的工程師有11人,其中包括軟件工程師和數(shù)據(jù)工程師,他們的經(jīng)驗(yàn)水平各不相同,既有只有幾年經(jīng)驗(yàn)的工程師,也有多達(dá)幾十年經(jīng)驗(yàn)的工程師。
除了偏好評級,還將對模型的性能進(jìn)行解析分析。這項(xiàng)分析將集中在兩個關(guān)鍵方面,即響應(yīng)時間和響應(yīng)長度,然后將使用這兩個方面來推導(dǎo)這些模型有效性的多種衡量標(biāo)準(zhǔn)。
三、開發(fā)者偏好:定性結(jié)果
總體看法
根據(jù)工程師的評分制作了下面的圖表。由此,有一些明顯的結(jié)果既支持也反駁了非官方證據(jù)。雖然這項(xiàng)分析側(cè)重于解決錯誤,但將這些發(fā)現(xiàn)與引言中討論的其他動機(jī)因素進(jìn)行比較是必要的。例如,模型在解決錯誤方面的有效性可能與它們在代碼生成或調(diào)試等任務(wù)中的性能不同,這可能會影響總體看法。這個更廣闊的視角幫助人們理解大型語言模型對開發(fā)人員工作流程的不同方面的不同影響。
意外發(fā)現(xiàn)
人們認(rèn)為GPT-4是最好的LLM模型,但Raygun公司的軟件工程師認(rèn)為它是最差的。可以使用來自軟件工程師的反饋和一些分析數(shù)據(jù)為這個結(jié)果提供可能的理由,將在下一節(jié)中展示這些數(shù)據(jù)。這些假設(shè)來自于關(guān)注這項(xiàng)研究的工程師進(jìn)行的討論。GPT-4 Turbo及以后的模型在建議更改時包括代碼片段,工程師們表示,這使他們更好地理解解決方案。GPT-4沒有生成片段,并且其解決方案比GPT-3.5 Turbo更長,這表明工程師不喜歡不包含補(bǔ)充資源的更長響應(yīng)。
錯誤模式
工程師們還觀察到,JSON驗(yàn)證錯誤在所有模型變體中的排名一直很低,因?yàn)閮H靠堆棧跟蹤并不能很好地解決這個錯誤;這使工程師在向LLM尋求幫助時,能夠及時了解提示工程以及哪些信息是有幫助的。
場景影響
(1).NET錯誤
.NET錯誤包括所有這些測試用例,除了除零錯誤和無效的停止ID,如上面的表中所述。結(jié)果是只有LLM和工程師知道的場景是堆棧跟蹤、標(biāo)簽、面包屑和自定義數(shù)據(jù)。Raygun公司的工程師看到這些錯誤的報告評分更高,可能是因?yàn)樗麄冎饕褂?NET。然而,在測試不同語言的情況下,仍然觀察到良好的結(jié)果。
(2)其他語言
根據(jù)工程師的評論,這樣做的原因是在采用Python和TypeScript的情況下,堆棧跟蹤與周圍的代碼場景一起出現(xiàn)。在Python中,周圍的代碼場景是作為堆棧跟蹤的一部分提供的,在TypeScript錯誤中,它來自包含源代碼的源映射。有了這些額外的信息,LLM可以生成直接解決錯誤的代碼片段,這也有助于對GPT-4變體的后續(xù)系列進(jìn)行評級。
性能洞察
(1)GPT-4 Turbo的后續(xù)版本性能下降
從GPT-4 Turbo及后續(xù)版本的評分來看,看到評分有所下降,尤其是評估到GPT-4o時,盡管這些結(jié)果仍然優(yōu)于GPT-4,而且大多數(shù)都優(yōu)于GPT-3.5 Turbo。如果將JSON序列化錯誤作為異常值刪除,可以觀察到GPT-4 Turbo之后版本的性能有所下降。這一結(jié)果清楚地表明,GPT-4系列的性能在GPT-4 Turbo達(dá)到峰值后有所下降。
(2)場景對非描述性堆棧跟蹤的重要性
JSON序列化錯誤導(dǎo)致的性能不佳可能是由于需要有關(guān)潛在問題的支持信息。僅僅查看堆棧跟蹤就很難確定錯誤,因?yàn)榇嬖诙鄠€故障點(diǎn)。同樣,這也涉及到包含更多場景(例如源代碼和變量值)的主題,以提示問題可能在哪里。這里的增強(qiáng)可能是源代碼上的RAG查找實(shí)現(xiàn),因此可以將堆棧跟蹤與相應(yīng)的代碼相關(guān)聯(lián)。
(3)響應(yīng)長度對性能的影響
在后續(xù)的模型中,造成性能惡化的一個原因是響應(yīng)長度的增加。這些模型可能在較重的基于邏輯的問題中表現(xiàn)得更好,但這些較長的回答在日常對話中是不可取的。工程師在詢問有關(guān)Python庫的問題時遇到過這種情況,希望得到直接的答案。它每次都會重復(fù)一整個關(guān)于建立庫的介紹部分和有關(guān)問題的無用信息。
如果是這樣的話,希望在GPT-5和其他競爭對手等新模型問世時看到對這一問題的一些修正,但就目前而言,這些模型的冗長現(xiàn)象將繼續(xù)存在。
四、解析分析:定量結(jié)果
響應(yīng)時間和內(nèi)容生成
雖然對LLM響應(yīng)的定性評估至關(guān)重要,但響應(yīng)時間/生成速度和生成的內(nèi)容量也會顯著影響這些工具的有用性。下圖顯示了為錯誤響應(yīng)對創(chuàng)建聊天完成的平均響應(yīng)時間。
有趣的是,就生成聊天完成的平均響應(yīng)時間而言,GPT-4 Turbo是響應(yīng)最慢的模型。這是一個令人驚訝的結(jié)果,因?yàn)橐话愕睦斫獗砻鳎珿PT-4 Turbo應(yīng)該比GPT-4更快。
令牌生成和模型性能
下圖通過測量每個模型生成的令牌的平均數(shù)量來解釋這個令人驚訝的結(jié)果。這表明GPT-4 Turbo平均生成的令牌比GPT-4多得多。有趣的是,之前的圖表顯示GPT-4o生成的令牌最多,但仍然比GPT-4 Turbo快得多。
工程師們還看到,在OpenAI的最新模型GPT-4o mini中,這種更多令牌的趨勢不會持續(xù)下去。與GPT-4 Turbo相比,令牌的平均數(shù)量有所減少,但仍遠(yuǎn)高于GPT-4。生成最少令牌數(shù)量的模型是GPT-3.5 Turbo,它與定性分析結(jié)果一致,工程師更喜歡較短的響應(yīng),而不是沒有補(bǔ)充解釋的較長響應(yīng)。
每個令牌響應(yīng)時間
在按模型檢查響應(yīng)時間和平均令牌計數(shù)之后,可以確定每個模型在響應(yīng)時間和令牌生成方面的速度。
下圖顯示了按模型劃分的每個令牌響應(yīng)時間。在這里看到GPT-4比GPT-4 Turbo更快,但這是由于數(shù)據(jù)中的異常值。考慮到它傾向于產(chǎn)生更長的輸出,其總體響應(yīng)時間仍然比GPT-4長。這可能意味著GPT-4 Turbo在生成太多內(nèi)容時是一個不太理想的模型。
注意:GPT-3.5、GPT 4和GPT-4o模型使用不同的令牌。
GPT-4o與GPT-4o-Mini的比較
有趣的是,與其他來源的研究結(jié)果相比,數(shù)據(jù)顯示GPT-4o和GPT-4o-mini具有相似的反應(yīng)速度。這種差異表明,可能需要更大的樣本量來揭示他們表現(xiàn)中更明顯的差異。另一種解釋是,考慮到是通過總響應(yīng)時間來測量每秒的令牌數(shù),由于首次令牌響應(yīng)時間(TTFT)和其他網(wǎng)絡(luò)的相關(guān)瓶頸,其數(shù)值稍微偏低。
擴(kuò)展模式
繪制響應(yīng)時間與令牌計數(shù)的關(guān)系,并按模型分組,揭示了這些模型擴(kuò)展中的不同模式。對于GPT-3.5、GPT-4o和GPT-4o-Mini擴(kuò)展主要是線性的,令牌數(shù)量的增加會導(dǎo)致響應(yīng)時間的相應(yīng)增加。
然而,這種模式并不適用于較大和較舊的GPT-4系列模型,其中這兩個變量沒有一致的關(guān)系。這種不一致可能是由于樣本量較小或?qū)S糜谶@些請求的資源較少,從而導(dǎo)致響應(yīng)時間不同。鑒于在其他模型中觀察到的線性關(guān)系,后一種解釋更有可能。
GPT-4場景限制
最后一項(xiàng)分析來自生成這些錯誤-響應(yīng)對。雖然GPT-4模型是勝任的,但對于需要長輸入的任務(wù)(例如堆棧跟蹤),其場景長度明顯受到限制。由于這個原因,不能生成一個錯誤響應(yīng)對,因?yàn)榻M合的輸入和輸出將超過模型的8192個令牌場景窗口。
聯(lián)合分析
在評估了定性數(shù)據(jù)后,很明顯GPT-4 Turbo是完成這項(xiàng)任務(wù)的最佳模型。然而,將其與定量數(shù)據(jù)進(jìn)行比較會引入響應(yīng)時間和成本考慮。新的GPT-4o模型比所有其他模型快得多,也便宜得多,這是一種權(quán)衡。如果需要更好的性能,GPT-4 Turbo是首選。然而,如果成本和速度是優(yōu)先事項(xiàng),GPT-4o和GPT-4o-mini是更好的選擇。
結(jié)論
這項(xiàng)研究提供了關(guān)于后期模型性能的混合證據(jù)。雖然一些較新的模型,例如GPT-4 Turbo和GPT-4o,由于能夠包含簡潔的代碼片段而有所改進(jìn),但其他模型(例如GPT-4)由于冗長和不太實(shí)用的響應(yīng)而表現(xiàn)不佳。
關(guān)鍵要點(diǎn)
- 代碼片段很重要:提供代碼片段和解釋的模型更有效,更受開發(fā)人員的青睞。
- 場景至關(guān)重要:添加周圍代碼或源代碼映射可以顯著提高響應(yīng)的質(zhì)量。
- 平衡回復(fù)長度:簡短的回復(fù)通常比冗長的回復(fù)更有幫助。
- 定期評估:持續(xù)評估模型性能,以確保使用最有效的工具來滿足需求。
- 注意場景限制:注意場景長度的限制,并相應(yīng)地制定計劃。
通過關(guān)注這些因素,開發(fā)人員可以更好地利用LLM來解決錯誤,最終提高他們的生產(chǎn)力和解決方案的準(zhǔn)確性。
正如引言中提到的,未來補(bǔ)充這項(xiàng)研究的實(shí)驗(yàn)可能包括對代碼生成的更深入分析。一個可能的實(shí)驗(yàn)可能涉及從解決錯誤中獲取建議,并為LLM提供額外的場景。在理想情況下,如果這項(xiàng)研究要重新進(jìn)行,那么需要納入更廣泛的錯誤,包括更具挑戰(zhàn)性的錯誤,并從更多樣化的工程師那里獲得評分。
原文標(biāo)題:Benchmarking OpenAI Models for Automated Error Resolution,作者:Reilly Oldham
