2024AI輔助編程指南_第1頁
2024AI輔助編程指南_第2頁
2024AI輔助編程指南_第3頁
2024AI輔助編程指南_第4頁
2024AI輔助編程指南_第5頁
已閱讀5頁,還剩213頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第1AI打開開發(fā)者的新2011—2016年,AndrejKarpathy不僅在斯坦福大學(xué)深耕密集神經(jīng)網(wǎng)絡(luò)架構(gòu)和像素處理計算機視覺的研究,同時還在Google做兼職工作。在GoogleYouTube視頻系統(tǒng),并成功開發(fā)出一套先進的特征學(xué)習(xí)系統(tǒng)。隨后,他選擇加入OpenAI,導(dǎo)團隊成功構(gòu)建了自動駕駛系統(tǒng)。Karpathy賬戶上擁有近80萬粉絲。當(dāng)ChatGPT這一創(chuàng)新技術(shù)問世時,他發(fā)表了一條引人注目的推文:“最熱門的新型編程語言是英語”(ThehottestnewprogramminglanguageisEnglish)。他的話絕非戲言,這既是對編程藝術(shù)的深情頌歌,也是隨時將你的英語指令轉(zhuǎn)換為精確的代碼命令,實現(xiàn)編程愿景。隨后,他的另一條推文道出了許多開發(fā)者的心聲:“Copilot極大地提升了我的編充分利用Copilot的功能,但它已經(jīng)為我自動生成了大約80%80%。我感覺自己不是在編程,而更像是在與Copilot供必要的提示和進行精細(xì)的編輯即可?!盞arpathy向微軟的GitHubCopilot致敬,這一創(chuàng)新舉措標(biāo)志著AI輔助編程新時代的的AI挑戰(zhàn)需要我們正視?你該如何在這片叢林中披荊斬棘,成為一名游刃有余的AI編程專家?具加速編程過程,使代碼編寫更加高效、智能且充滿樂趣?,F(xiàn)在就讓我們挽起袖子,共同踏上這場充滿挑戰(zhàn)與機遇的AI輔助編程之旅吧!編程的演變與算、移動互聯(lián)網(wǎng)及AI等領(lǐng)域的突破性發(fā)展提供了堅實的支持。圖1-1圖1-1我們從20世紀(jì)40從機器在計算機時代的早期,開發(fā)者不得不與0和120世紀(jì)50年代,F(xiàn)ortran和COBOL這兩種高級編程語言誕生,它們允許程序員通過DISPLAY、READ、WRITE和IF/THEN/ELSE將這些代碼轉(zhuǎn)換成計算機能夠理解的二進制代碼(0和1)言的出現(xiàn)無疑極大地推動了計算機革命的進程。隨著C和Pascal等編程語言的興起,面向過程編程的概念開始普及。這些編程語言得得心應(yīng)手。在面向?qū)ο缶幊填I(lǐng)域,C++和Java等編程語言脫穎而出。這些編程語言引入了全新的抽象化,允許開發(fā)者使用類和對象來模擬現(xiàn)實世界中的實體,并封裝數(shù)據(jù)和行Python、Ruby和JavaScript的編程任務(wù)變得更為簡單。這些編程語言極大地減少了完成任務(wù)所需的代碼量。機器學(xué)習(xí)和隨著機器學(xué)習(xí)和AI技術(shù)的快速發(fā)展,TensorFlow、PyTorch等框架和專業(yè)庫應(yīng)運而模型架構(gòu)的設(shè)計和訓(xùn)練過程的優(yōu)化。AILanguageModel,LLM)如同智能助手,隨時準(zhǔn)備在開發(fā)者的命令下生成代碼。讓我們來看一個簡單的例子。在這個例子中,我們使用具有強大編程能力的ChatGPT。我們將使用一段提示語來引導(dǎo)ChatGPT出的提示如下。提示:用Python圖1-2展示了來自ChatGPT的響應(yīng)。圖1-2當(dāng)ChatGPT我們成功地獲取了ChatGPT附帶了關(guān)于程序運行機制的詳細(xì)說明。只需要單擊圖1-2右上角的“Copycode”DevelopmentEnvironment,IDE)中,并加以運行和測試。生成式在深入剖析AI輔助編程工具的工作原理之前,我們首先需要對其基石——生成式(GenerativeAI,或稱為GenAI)有一個基本的了解。生成式AI作為人工智能領(lǐng)域圖1-3以生成式AI和LLM統(tǒng)。在這一宏大領(lǐng)域中,機器學(xué)習(xí)(MachineLearning,ML)算法為基礎(chǔ),不需要硬編碼即可進行預(yù)測或決策。深度學(xué)習(xí)(DeepLearning,DL)的神經(jīng)網(wǎng)絡(luò)(這正是“深度”一詞的來源),實現(xiàn)了對數(shù)據(jù)更深層次的抽象和表示。深度學(xué)習(xí)在圖像識別、語音識別等領(lǐng)域取得了令人矚目的成果。生成式AI生成式AI中最引人注目的則是LLM,如GPT-4、Gemini、Claude和LLaMA2等。這些人類語言高度相似的文本。然而,生成式AI并不僅限于LLM。生成式AI音頻和視頻等多種類型的數(shù)據(jù)。第2章將深入剖析生成式AI的工作原理和機制。在此之前,我們先了解一下AI編程工具的優(yōu)缺點。AI輔助編程工具的優(yōu)AI縛,從而專注于解決高級問題和實現(xiàn)創(chuàng)新。GitHub選擇“Copilot”(副駕駛)這一術(shù)語,恰如其分地描繪了這些工具的角色——它們?nèi)缤{駛艙中值得信賴的伙伴,為復(fù)雜且枯燥的編程工作提供導(dǎo)航,讓開發(fā)者能夠?qū)W⒂谡嬲匾氖虑?。在接下來的?nèi)容中,我們將深入探討這些強大的AI們在現(xiàn)實世界中的廣泛應(yīng)用。最小化搜索境,他們通常會求助于Google或StackOverflow,速返回IDE中繼續(xù)工作。但有些時候,搜索過程仿佛一場漫長的馬拉松。StackOverflow予啟發(fā),于是深入研究相關(guān)主題,甚至可能在YouTube上觀看教學(xué)視頻。經(jīng)過30多分鐘的苦苦思索,最終找到解決方案。所有開發(fā)者都經(jīng)歷過這種挑戰(zhàn)。事實上,StackOverflow在2022報告》(涵蓋70000多名開發(fā)者)中強調(diào)了搜索答案的挫敗感。該報告顯示,62%受訪者在搜索答案上每天花費超過30分鐘,而25%的受訪者更是超過1個擁有50名成員的開發(fā)團隊,每周因搜索答案/解決方案而損失的時間達到333~651小時。們的閃亮算法騎士——AI輔助編程登場。微軟的研究證明:90%以上使用GitHubCopilot的開發(fā)者能以更快的速度完成任務(wù)。為了驗證這一點,微軟進行了一次編程實驗。他們招募了95些開發(fā)者分為兩組,要求他們用JavaScript開發(fā)HTTP服務(wù)器。結(jié)果顯示,使用GitHubCopilot的開發(fā)者完成任務(wù)的速度比不使用該工具的開發(fā)者快55%。不僅是微軟,麥肯錫公司也進行了一項研究。他們調(diào)查了來自美洲和亞洲的40開發(fā)者,這些開發(fā)者的經(jīng)驗和背景各不相同。在數(shù)周內(nèi),他們完成了3項常見的軟件任務(wù)——代碼生成、重構(gòu)和文檔編寫。研究結(jié)果表明,在保持文檔和代碼的整潔性方面,AI時間減少了近一半。而在編寫新代碼和重構(gòu)代碼方面,使用AI的時間與傳統(tǒng)方法幾乎相同。然而,對于特別復(fù)雜的任務(wù),AI并不明顯,僅縮短了不到10%的時間。有趣的是,研究還發(fā)現(xiàn),盡管AI碼的整體質(zhì)量(如錯誤率、可讀性和可維護性)者逐漸熟悉并使用這些工具,代碼質(zhì)量還得到了邊際提升。麥肯錫公司的研究為我們揭示了AI的啟示。優(yōu)化日AI們能夠更專注于解決復(fù)雜的業(yè)務(wù)問題,并加速軟件功能的部署。面對空白的代碼編輯器,許多開發(fā)者可能會感到無從下手。然而,借助AI生成工具,開發(fā)者可以在IDE從而激發(fā)創(chuàng)造靈感,迅速進入高效的編程狀態(tài)。高效調(diào)整與優(yōu)化現(xiàn)從在線庫中檢索代碼片段,輸入提示框中,并基于特定標(biāo)準(zhǔn)請求AI進行迭代性調(diào)整。當(dāng)面對新的編程環(huán)境或編程語言時,AI庫,并提供全面的框架使用指南。生成新代碼方面表現(xiàn)高效,并能與IDE無縫對接。當(dāng)這些工具協(xié)同工作時,開發(fā)者觀察到的時間效率提升高達1.5~2.5倍。充當(dāng)你的顧通過ChatGPT,示。提示:和最佳實踐。要求涵蓋與代碼組織、文檔、工具和思維方式相關(guān)的策略。ChatGPT的響應(yīng)如圖1-4圖1-4ChatGPT與IDE集成與IDE的無縫集成對于AI輔助編程具有舉足輕重的作用。這種集成確保了開發(fā)流程著降低操作的摩擦,讓開發(fā)體驗變得更加流暢。實時反饋機制更是與IDE集成的亮點之一。當(dāng)開發(fā)者編寫或修改代碼時,集成工具進行煩瑣的人工審核或外部檢查。此外,AI輔助系統(tǒng)還能通過深入洞察更廣泛的編程領(lǐng)域來優(yōu)化IDE的使用體驗。它度相關(guān)的代碼建議。這凸顯了AI于其能夠深入理解并優(yōu)化整個開發(fā)過程。表1-1展示了一些流行的AI輔助編程工具及其支持的IDE表1-1一些流行的AI輔助編程工具及其支持的根據(jù)微軟的一項深入調(diào)查研究,高達88%的GitHubCopilot用戶反饋,在使用此工是,GitHubCopilot幫助他們在IDE中減少了搜索時間,這極大地促進了開發(fā)者持續(xù)處于高效的“心流”狀態(tài)。適配你的代碼在編程領(lǐng)域,一些先進的AI的內(nèi)部庫、API(ApplicationProgrammingInterface,應(yīng)用程序接口)能精準(zhǔn)滿足項目的獨特需求?;虿槐煌扑]的代碼片段,從而保障代碼庫的魯棒性和可維護性。此外,對于新加入開發(fā)團隊的成員,這些能夠適配代碼庫的智能工具更是一大福及學(xué)習(xí)編程規(guī)范。然而,借助AI輔助編程工具,這一過程將大幅縮短。檢查代碼完整性和安全性。任何瑕疵都可能為系統(tǒng)埋下安全隱患,導(dǎo)致潛在的漏洞和數(shù)據(jù)泄漏風(fēng)險。評估等。隨著技術(shù)的不斷進步,越來越多的AI邊緣案例。給開發(fā)者之前不會引入新的問題。開發(fā)者可以在IDE中直接查看和采納這些建議。此外,AI輔助編程工具的一大優(yōu)勢在于它們能夠快速分析拉取請求(PullRequest,PR),軟件版本的演進提供便利。AI驅(qū)動的文檔生成任務(wù),有時甚至被置于次要地位,這在一定程度上削弱了文檔應(yīng)有的價值。幸運的是,隨著人工智能技術(shù)的快速發(fā)展,AI性的改變。這些智能工具如同數(shù)字抄寫員,能夠在極短的時間內(nèi)高效生成大量文檔,且內(nèi)容質(zhì)量上乘,表達清晰。之所以能實現(xiàn)這一點,是它們依賴于LLM這一核心技術(shù)。LLM在處理自然語言方面展現(xiàn)出卓越的能力。現(xiàn)代化支持2011年,MarcAndreessen在《華爾街日報》上發(fā)表了頗具遠(yuǎn)見的卓識——“軟件作為一名杰出的企業(yè)家和風(fēng)險投資家,Andreessen是技術(shù)史上的一個里程碑。AndreessenAWS等云平臺的崛起與寬帶互聯(lián)網(wǎng)的普及,如同打開了潘多拉的盒子,徹底改變了行業(yè)的游戲規(guī)則。它們不僅打破了服務(wù)器成本和網(wǎng)絡(luò)技術(shù)的傳統(tǒng)壁壘,更為像Uber、Netflix及眾多社交媒體平臺這樣的創(chuàng)新者提供了改寫行業(yè)規(guī)則的舞臺。從Andreessen這篇深具洞察力的文章中,我們不難窺見,創(chuàng)新的車輪正在飛速轉(zhuǎn)能難以與日新月異的技術(shù)創(chuàng)新保持同步。IBM敏銳地將這一挑戰(zhàn)作為契機,傾注大量資源研發(fā)出AI輔助編程工具。2023年月,IBM正式推出WatsonxCodeAssistantforZ,該系統(tǒng)能在大型機系統(tǒng)上將COBOL代碼優(yōu)雅地翻譯成Java代碼,并輸出高質(zhì)量的面向?qū)ο蟠a。Watsonx.ai模型作為IBM的得意之作,具備對115依托的則是1.5萬億個token(分詞)的強大支撐。該模型擁有約200億個參數(shù),無疑是當(dāng)前代碼開發(fā)領(lǐng)域的一顆璀璨明珠。然而,將擁有數(shù)千億行代碼的COBOL系統(tǒng)遷移到現(xiàn)代語言絕非易事。像COBOL將不堪設(shè)想。要知道,世界上大部分信用卡處理是通過大型機完成的。入2.08億美元,卻在數(shù)年后不得不終止項目。挑戰(zhàn)。年輕的開發(fā)者往往接受的是現(xiàn)代編程語言的培訓(xùn),對大型機開發(fā)持懷疑態(tài)度。同時,眾多經(jīng)驗豐富的大型機開發(fā)者即將步入退休年齡。IBM深知,要應(yīng)對大型機開發(fā)的嚴(yán)峻挑戰(zhàn),AI的介入不可或缺。盡管傳統(tǒng)的代碼轉(zhuǎn)換器或翻譯器已存在多年,但它們往往只是簡單地將COBOL的“面條式代碼”轉(zhuǎn)換為Java的“面條式代碼”,并未帶來實質(zhì)性改進。因此,這些Java者做大量的潤色工作,這也是許多項目步履維艱甚至失敗的原因。但IBM表示,通過運用生成式AI,到10倍。其他公司也在積極把握現(xiàn)代化的機遇。GitHub的首席執(zhí)行官ThomasDohmke子中提到:“使用COBOL問題?!痹诮邮堋敦敻弧冯s志采訪時,他表示,2023年他聽到的關(guān)于COBOL比過去30年都要多。他還透露,許多公司都在詢問如何在遷移項目中使用GitHubCopilot。ChatGPT也精通傳統(tǒng)編程語言。表1-2表1-2常見的傳統(tǒng)編程語言下面的例子展示了AI段。MODULEComplexModuleIMPLICITNONETYPE::REAL::real,imagOPERATOR(+)(a,b)TYPE(ComplexType),INTENT(IN)::a,bTYPE(ComplexType)::cc%real=a%real+b%realc%imag=a%imag+ENDENDTYPEComplexTypeENDMODULEComplexModule現(xiàn)在,你訪問ChatGPT提示:的。圖1-5展示了來自ChatGPT圖1-5ChatGPTChatGPT能夠精確地辨識所提供的代碼片段是用Fortran出這段代碼定義了一個名為ComplexModule的模塊,還詳盡地解釋了該模塊中的關(guān)鍵組成部分。具體來說,該模塊包含一個名為ComplexType的派生類型,用于表示復(fù)數(shù),還包含一個重載的加法運算符“+”,該運算符被設(shè)計為處理兩個復(fù)數(shù)之間的加法運算。隨后,ChatGPT對這段代碼進行了逐步深入的解析。AI輔助當(dāng)我們探討AI輔助編程工具的潛力和優(yōu)點時,AI如第一代iPhone,也曾顯得稚嫩。AI讓我們深入探索AI輔助編程工具的一些不足之處。幻對于LLM,幻覺是指模型輸出的數(shù)據(jù)看似準(zhǔn)確,但實際上并不正確,或者與模型所訓(xùn)練的輸入數(shù)據(jù)不符。幻覺給軟件開發(fā)帶來巨大挑戰(zhàn)。它會導(dǎo)致不準(zhǔn)確的代碼建誤導(dǎo)初學(xué)者,并有可能削弱開發(fā)者對AI工具的信任。于人類反饋的強化學(xué)習(xí)(ReinforcementLearningfromHuman來努力減輕這一現(xiàn)象的影響。但我們必須意識到,鑒于LLM幻覺現(xiàn)象似乎是一項艱巨而長期的任務(wù)。此外,在使用AI輔助編程工具時,我們觀察到某些編程語言的表現(xiàn)更為出色。例如,Python、JavaScript、TypeScript和Go廣泛的代表性和豐富的數(shù)據(jù)集,使得AI強大的建議。知識產(chǎn)權(quán)MatthewButterick獨鐘。他的人生軌跡涵蓋了寫作、字體設(shè)計以及文檔編輯和排版程序的開發(fā)。然而,2022年6月,當(dāng)他接觸到GitHubCopilot而激發(fā)他撰寫一篇題為“ThisCopilotisStupidandWantstoKillMe”客文章來表達他的不滿。Butterick的憤怒并未隨著這篇博客文章的發(fā)表而平息。他的不滿很快升級,最終演變?yōu)閷ξ④?、GitHub和OpenAI提起的集體訴訟。訴訟的核心爭議在于GitHub違反服務(wù)條款和隱私政策,并可能涉及版權(quán)侵犯。這一法律糾紛凸顯了AI往往是海量現(xiàn)有代碼的混合體,代碼的所有權(quán)問題變得尤為復(fù)雜。AI需要依賴法院裁決來明確相關(guān)權(quán)益。與此同時,微軟已經(jīng)為GitHubCopilot的用戶構(gòu)建了一道法律屏障。微軟承諾,在AI輔助編程工具與開源軟件方法的結(jié)合進一步加劇了法律問題的復(fù)雜性。許可證,如GNU通用公共許可證(GeneralPublicLicense,GPL)的第2版和第3權(quán)的權(quán)利,甚至要求他們公開整個代碼庫的源代碼。隱AI內(nèi)部如何妥善保護數(shù)據(jù)?這些數(shù)據(jù)是否會被用作訓(xùn)練數(shù)據(jù)?不同供應(yīng)商在數(shù)據(jù)處理上可能有著截然不同的做法,這也導(dǎo)致一些開發(fā)者對AI編程工具持謹(jǐn)慎態(tài)度,甚至選擇完全避免使用它們。Gridspace公司的聯(lián)合創(chuàng)始人兼聯(lián)合工程負(fù)責(zé)人AnthonyScodary技術(shù)基礎(chǔ)涵蓋語音識別、語音合成、LLM和對話系統(tǒng)等多個領(lǐng)域。Gridspace公司并沒有選擇利用現(xiàn)有的AI路——自主研發(fā)AI輔助編程平臺。Gridspace公司的AI輔助編程平臺基于Kubernetes集群中的Docker服務(wù),以IDE定代碼庫進行微調(diào)。Scodary表示:“通過自研的AI將自己的知識產(chǎn)權(quán)和數(shù)據(jù)發(fā)送給其他公司。同時,這也意味著我們擁有了一個更小、更高效、更符合我們工作風(fēng)格的模型?!彪m然Gridspace偏好,但在評估AI輔助編程工具時,深入了解其對數(shù)據(jù)隱私的影響至關(guān)重要。安在題為“SecurityWeaknessesofCopilotGeneratedCodeinGitHub”的研究論文中,YujiaFu等學(xué)者深入探討了GitHubCopilot在安全方面的隱患。通過對35.8%的代碼片段存在通用缺陷枚舉(CommonWeaknessEnumeration,CWE)實這些安全問題并非局限于某一特定編程語言,而是跨越了42種不同的CWE類別,呈值以及異常情況檢查或處理不當(dāng)這3個類別的問題尤為突出。需要注意的是,這些CWE問題中有11個被列入2022年CWETop25清單。然而,這并不意味著AI度的安全意識都是非常重要的。訓(xùn)練數(shù)據(jù)AI輔助編程工具所依賴的LLM它們在現(xiàn)實應(yīng)用中的表現(xiàn)與實用性。以下是對這些差距的詳細(xì)分析。AI數(shù)據(jù)的質(zhì)量和范圍對AI輸出質(zhì)量的重要性。LLM中的開源代碼質(zhì)量參差不齊,你無法預(yù)知下一個項目會是什么質(zhì)量。優(yōu)秀的項目與劣質(zhì)的代碼共存,這導(dǎo)致AI知識截止日LLM的訓(xùn)練數(shù)據(jù)往往有明確的截止日期,這相當(dāng)于一個時間快照。當(dāng)編程語言或代而帶來挑戰(zhàn)。泛化差見問題。根據(jù)RieJohnson和TongZhang在論文“Inconsistency,Instability,andGeneralizationGapofDeepNeuralNetworkTraining”種差距是提高模型性能的關(guān)鍵。上下文理AI細(xì)致地考慮上下文環(huán)境。偏間產(chǎn)生偏差,甚至可能引發(fā)數(shù)據(jù)的濫用。同樣,AI成有害或不恰當(dāng)?shù)妮敵?。例如,?dāng)給出“defrace(x):”的代碼提示時,AI輔助編程工具自動填寫了一組有開發(fā)者的新麥肯錫公司的研究深刻揭示了AI準(zhǔn)和質(zhì)量控制的深入實踐。同時,探索并了解生成式AI課程,以提升工作效率。在整合AI需要明確的是,上述建議并非硬性準(zhǔn)則。鑒于AI段,我們應(yīng)保持靈活性和開放心態(tài),隨時準(zhǔn)備應(yīng)對可能出現(xiàn)的挑戰(zhàn)。職業(yè)發(fā)展雖然沒有確鑿證據(jù)證明使用AI下可能會成為就業(yè)市場的主要變化。招聘熱潮中的AIIndeed等網(wǎng)站的招聘欄開始熱鬧起來,越來越多的招聘者開始尋找具有AI工具經(jīng)驗的求職者。從初級開發(fā)者到高級熱門人才,所有級別的職位都在招賢納士。AI升生產(chǎn)效率。對于開發(fā)者,這可能是在職場中晉升的一條途徑。開發(fā)者普遍認(rèn)為,AI輔助編程工具已經(jīng)開始流行。例如,GitHubCopilot在獨立軟10倍開發(fā)者Bolt,在你說出“修復(fù)錯誤”之前,就能迅速解決問題并給出解決方案。所以你可能會想:在AI輔助編程工具的幫助下,我能成為10單位的。此外,“10然成為10倍開發(fā)者聽起來很棒,但請記住,這可能是一廂情愿的幻想。開發(fā)者的技能根據(jù)麥肯錫公司的研究,AI識。以下是一些考慮因素。盡管AI子落在開發(fā)者的肩上。一些開發(fā)者發(fā)現(xiàn)自己需要對AI的結(jié)果一輪又一輪地進行修正,以達到最佳的精確度;而另一些開發(fā)者則不得不對AI入“兔子洞”。理解組織的要AI工具獲得最符合組織目標(biāo)、性能目標(biāo)和安全性的結(jié)果。解決棘手問AI發(fā)者就需要登場了。小AI更高層次的問題解決和創(chuàng)新。件許可的迷宮、潛在的偏見風(fēng)險及安全隱患等。在大多數(shù)情況下,AI輔助編程工具應(yīng)被視為我們的得力助手,而不是我們自身知疑已經(jīng)成為開發(fā)者工具箱中不可或缺的強大補充。第2AI輔助編程技術(shù)的工作原在本章中,我們將深入探索AI輔助編程工具的內(nèi)在機制,揭開它們背后的神秘面紗。具體來說,本章將首先帶領(lǐng)讀者簡要回顧這些工具的發(fā)展歷史;然后探討Transformer模型和LLM的工作原理,并借助OpenAIPlayground后提供一系列實用的評估建議,幫助讀者了解如何對LLM的性能進行全面評估。的軟件開發(fā)項目中更明智、更有效地利用AI輔助編程工具。AI輔助編程工具的主要功GitHubCopilot、Tabnine、CodiumAI和AmazonCodeWhisperer等AI輔助編程工具具也有很多共同的常見功能,如表2-1所示。表2-1AIAI輔助編程工具日新月異,表2-1中所列的功能并不是一成不變的。顯然,AI輔助便利。智能代碼自動補全與上下文感知的代智能代碼自動補全(也叫自動代碼完成或IntelliSense)是許多IDE中的一個神奇提供幫助。事實上,這項技術(shù)最早可以追溯到20世紀(jì)50年代末的拼寫檢查程序。這項技術(shù)的突破發(fā)生在20世紀(jì)90年代中期。當(dāng)時,MicrosoftVisualBasic5.0不僅有效減少了代碼錯誤,還極大地提升了開發(fā)者的工作效率。兩者之間存在一個顯著的區(qū)別:AI輔助編程工具由生成式AI僅是代碼,還有自助式文檔、規(guī)劃文件和幫助指南等。得益于生成式AI,能夠根據(jù)給定的上下文,嫻熟地生成、調(diào)整和理解類人文本(human-liketext),能力。使用這些工具,我們有時仿佛在與代碼進行智能對話。以LLM為核心,它們可以捕捉到用戶輸入中的上下文和意圖變化。編譯器與AI輔助編程工了解編譯器的工作內(nèi)容對熟悉AI步驟。詞法分析(分詞編譯器宛如一位語言教師,它會將用戶的代碼拆解成一個個token,析和理解其深層含義。語在語法分析階段,編譯器會檢查token由正確的命令構(gòu)成,還會確保代碼具有正確的結(jié)構(gòu)。語義分析(錯誤檢查涉及語法的正確性,還關(guān)系到代碼背后所承載語義的正確性。是最終的機器代碼,但已經(jīng)初具雛形。效。它會調(diào)整中間代碼,使其運行速度更快,占用空間更少。機器這是代碼轉(zhuǎn)換的終極階段。編譯器將優(yōu)化后的中間代碼進一步轉(zhuǎn)換為CPU理解的機器代碼或匯編代碼。的文本變?yōu)閯討B(tài)的、能夠執(zhí)行的任務(wù)。AI輔助編程工具(如GitHubCopilot)行模式識別并提出代碼建議。由于AI的建議可能會有很大的差異。然后編譯器會將這些代碼編譯成機器可以運行的程序。LLM基于預(yù)測模式,而不是編譯引擎。如果有些知識在訓(xùn)練中不常見,它們可能無法被捕捉到。所以,AI括號。此外,AI的建議。在發(fā)現(xiàn)錯誤方面,AI建議。AI確關(guān)閉文件,或者建議你以更有效的方式循環(huán)使用數(shù)組。說到邏輯錯誤,AI可能未曾考慮過的替代方法或解決方案,引導(dǎo)你朝著正確的方向解決問題。一言以蔽之,AI開發(fā)者的敏銳洞察力。上述缺點真正凸顯了將AI預(yù)相結(jié)合的重要性。畢竟你不僅希望代碼優(yōu)秀,還希望它們準(zhǔn)確無誤。能力等2023年10月,Sourcegraph的首席執(zhí)行官兼聯(lián)合創(chuàng)始人QuinnSlack見地的文章。在這篇文章中,他深入探討了像GitHubCopilot這樣的AI具,并提出了一種新穎的思考模式,他稱之為“AI代碼層級”。Slack的分級框架為我們理解AI輔助編程工具的功能提供了一個清晰的視角,同時他還對那些銷售輔助編程工具的公司所宣稱的夸張說法進行了批判性的審視。圖2-1顯示了編程系統(tǒng)中AI能力的不同層級。圖2-1編程系統(tǒng)中AI在編程的前3個層級中,重點是以人類為主導(dǎo)的編程過程,主要參與者是開發(fā)者。首先是第0級,開發(fā)者在沒有AI的幫助下手工完成所有編程任務(wù)。第0為AI的介入奠定了基礎(chǔ)。然后是第1級,即代碼補全階段。在這個層級,AI開始介入并發(fā)揮作用,它根據(jù)開發(fā)環(huán)境中的事件來輔助完成單行或多行代碼。盡管如此,開發(fā)者仍然占據(jù)主導(dǎo)地位,負(fù)責(zé)指導(dǎo)整個程序的開發(fā),AI工具。在第2級,即代碼創(chuàng)建階段,AI的能力顯著增強。此時,AI不僅能夠編寫更長的代碼段,還能夠完成更復(fù)雜的任務(wù),如設(shè)計API,甚至修復(fù)現(xiàn)有代碼。盡管如此,這些活動仍然需要人類的監(jiān)督和指導(dǎo)。在這個層級,AI一個深入的理解,才能生成既正確又適用的代碼。接下來進入第3級,也就是受監(jiān)督的自動化階段,我們可以看到AI在編程領(lǐng)域的重大轉(zhuǎn)變。AI任務(wù)后都進行人工檢查。使用這一層級的AI者。AI個過程中還會向開發(fā)者尋求解釋和指導(dǎo)。第4級標(biāo)志著完全自動化的實現(xiàn),AI在此層級真正地增強了自身的能力。它能夠獨官或產(chǎn)品經(jīng)理,你對頂尖工程師的信任程度。第4級所追求的正是這種信任關(guān)系。AI不只是被動響應(yīng),它還能夠主動監(jiān)控代碼,發(fā)現(xiàn)并解決問題。第5級是AI主導(dǎo)的完全自治。與前4個層級相比,在第5級,AI令,而且能夠設(shè)定自己的目標(biāo)。這些目標(biāo)是基于AI想象成在一個充滿競爭的世界中,AI科幻小說,但考慮到技術(shù)發(fā)展的速度,不難想象,這個層級很可能會成為現(xiàn)實。到目前為止,像GitHubCopilot這樣的工具大致處于第3級。雖然確定其確切層級存在一定難度,但Slack的分級框架為我們提供了一個非常有用的參考,可以幫助我們理解技術(shù)及其關(guān)鍵交互。毫無疑問,AI人的速度發(fā)展。生成式AI和采用AI輔助編程工具并不要求你成為生成式AI而更靈活和有效地利用這些工具。在這里,“透明性”(transparency)術(shù)得到廣泛接受和應(yīng)用,清楚地理解其工作原理至關(guān)重要。我們是否采納這項技是附加特性,更是基礎(chǔ),是編程工作的基石。接下來將簡要介紹生成式AI和LLM,技術(shù)演變生成式AI的歷史可以追溯到幾十年前,早期的代表作之一是20世紀(jì)60省理工學(xué)院的教授JosephWeizenbaum開發(fā)的聊天機器人ELIZA。ELIZA的設(shè)計靈感則的算法。ELIZA的技術(shù)水平相對初級,至今你仍然可以在網(wǎng)絡(luò)上找到它的蹤跡。有趣的是,許多人發(fā)現(xiàn)與ELIZA至有人誤認(rèn)為自己正在與一個真實的人進行交流。這種現(xiàn)象被稱為“ELIZA效然而,生成式AI的發(fā)展歷程并非一帆風(fēng)順。它的核心技術(shù)進展緩慢,如同蝸牛爬行。直到進入21世紀(jì)第二個10能力、GPU(GraphicsProcessingUnit,圖形處理器)等先進的硬件系統(tǒng)、豐富的數(shù)據(jù)資源及深度學(xué)習(xí)模型的微調(diào),生成式AI成式AI可以分為兩大類——變分自編碼器和生成對抗網(wǎng)絡(luò)。變分自編碼DiederikP.Kingma和MaxWelling通過他們的開創(chuàng)性論文“Auto-EncodingVariationalBayes”在2013年首次提出了變分自編碼器(VariationalAuto-Encoder,VAE)的概念。VAE那些具有大量特征的數(shù)據(jù)集,每個特征都代表一個維度,例如一幅28像素×28的圖像在784維空間中的表示。低維潛在空間可以看作數(shù)據(jù)的精簡版本,它在保留形式。與傳統(tǒng)的自動編碼器不同,在VAE中,編碼器不是為每個潛在屬性輸出一個策略,而是為生成新的數(shù)據(jù)或圖像提供了無限的可能性。生成對抗網(wǎng)絡(luò)(GenerativeAdversarialNetwork,GAN)是一種用于無監(jiān)督機器學(xué)習(xí)的AI算法,由IanGoodfellow及其團隊在2014年首次提出。GAN的核心機制涉互較量。不斷進化,以更好地識別數(shù)據(jù)的真?zhèn)?。了新的可能。如今,GAN已被廣泛應(yīng)用于創(chuàng)造逼真的圖像、合成語音以及開發(fā)各種創(chuàng)新應(yīng)用。上述類型的生成式AI成為Transformer的突破,使LLM成為現(xiàn)實。Transformer模型在Transformer模型成為主流之前,自然語言處理(NaturalLanguageProcessing,NLP)的首選技術(shù)是循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)。循環(huán)神經(jīng)網(wǎng)絡(luò)專為處理序列或時間序列數(shù)據(jù)而設(shè)計。它通過更新隱藏狀態(tài)炸的問題。因此,循環(huán)神經(jīng)網(wǎng)絡(luò)很難跟蹤數(shù)據(jù)中的長期關(guān)系。Transformer模型的出現(xiàn)徹底顛覆了這一局面。Transformer入序列中不同位置之間的關(guān)聯(lián),而無論這些位置相隔多遠(yuǎn)。這種架構(gòu)使得Transformer模型能夠輕松處理長短期序列,同時避免出現(xiàn)梯度問題。此外,Transformer模型的并行處理能力與GPU或TPU(TensorProcessingUnit,張量處理器)等現(xiàn)代計算硬件架構(gòu)完美契合。由AshishVaswani和他帶領(lǐng)的Google研究團隊開發(fā)的Transformer構(gòu),在2017年發(fā)表的開創(chuàng)性論文“AttentionIsAllYouNeed”中公布。圖2-2展圖2-2TransformerTransformer模型可以視作一位精通語言的大師,擅長揭示語言的復(fù)雜性。它的工Transformer模型就像理解外語句子的語言學(xué)家一樣,讀取并理解輸入文本的含義。在解碼階段,Transformer譯,類似于語言學(xué)家將外語句子譯成母語。Transformer單詞的相關(guān)性,并為每個單詞分配相應(yīng)的注意力權(quán)重。例如,在句子“Thecatsatonthemat”中,當(dāng)模型聚焦于單詞“sat”時,“cat”和“mat”得更高的注意力權(quán)重,因為它們與動作“sitting”直接相關(guān)。Transformer句子,理解單詞之間的相互關(guān)系,并在處理長文本時保持這種理解。這為Transformer詞或標(biāo)記(即整個單詞或單詞的一部分),從而更全面地理解上下文。盡管具備這些能力,但Transformer而這卻是理解句子意義的關(guān)鍵。位置編碼(positionalencoding)顯得至關(guān)重要。它相當(dāng)于為模型提供了一個GPS(GlobalPositioningSystem,全球定位系統(tǒng)),指示每個單詞在句子中的位置,幫助模型區(qū)分類似“Thecatchasesthemouse”和“Themousechasesthecat”這樣的句子。Transformer方法賦予了Transformer模型對文本更深層次的理解。Transformer模型常以預(yù)訓(xùn)練模型的形式出現(xiàn)。由于這類模型已經(jīng)在大規(guī)模數(shù)據(jù)集以通過API被輕松調(diào)用,快速集成到各種語言處理任務(wù)中。企業(yè)和個人可以迅速將Transformer模型集成到自己的系統(tǒng)中,比如集成到AI輔助編程應(yīng)用中。此外,通過在特定領(lǐng)域的數(shù)據(jù)集上進行微調(diào),這些經(jīng)過預(yù)訓(xùn)練的LLM可以進一步優(yōu)化,從而在專業(yè)領(lǐng)域(如醫(yī)療或法律文本分析)語言理解能力,為開發(fā)生成式AI應(yīng)用提供了一個強有力的起點。構(gòu)建和運營LLM的成本是相當(dāng)高的。根據(jù)《華爾街日報》在2023年年初的報道,每位用戶每月在GitHubCopilot上的花銷超過20每月的花銷甚至高達80美元。然而,未來幾年隨著生成式AI基礎(chǔ)設(shè)施的規(guī)?;l(fā)展,預(yù)期每位用戶的成本將會逐漸降低。Transformer模型主要分為兩大類——GPT(GenerativePretrainedTransformer,生成式預(yù)訓(xùn)練Transformer)和BERT(BidirectionalEncoderRepresentationsfromTransformer,來自Transformer的雙向編碼器表示)。是由OpenAI開發(fā)的一款工具,在文本創(chuàng)作、信息總結(jié)和語言轉(zhuǎn)換方面表現(xiàn)出色。GPT基于自回歸的LLM考慮,就像講故事的人逐字逐句地展開敘述一樣。GPT的技能是通過在大量文本數(shù)據(jù)上進行訓(xùn)練而獲得的,它使用解碼器來生成內(nèi)容。在AI輔助編程應(yīng)用領(lǐng)域,用到的Transformer模型主要是GPT。實踐證明,GPT能夠效率。OpenAIOpenAIPlayground是一個生成式AI沙盒,可用于訪問OpenAI開發(fā)的各種模型。它OpenAIPlayground極大地簡化了我們理解和評估各種LLM把握它們的性能和局限。此外,它還允許用戶根據(jù)不同的參數(shù)輸入(如溫度)測試和調(diào)整模型的行為。不過,OpenAI對GPT的使用收取費用。如表2-2所示,費用以token為單位,根據(jù)使表2-2GPT例如,假設(shè)你使用的是GPT-4/8K上下文LLM。你輸入的提示包含1000個token,模型生成的響應(yīng)包含2000個token。那么輸入費用為0.03美元,輸出費用為0.12美元。首次注冊O(shè)penAI賬戶時,你將獲得5美元的積分,可用于OpenAIPlayground,或者輸入:ChatGPTisunbelievable!Ilove圖2-3Tokenizer顯示文本的token在分詞(tokenization)過程中,“ChatGPT”這個短語被分成3個token說,“Chat”“G”和“PT”中的每個都單獨作為一個token。單詞“unbelievable”及其后面的感嘆號被分為兩個token一個表示標(biāo)點符號。至于表情符號,則被分成3個token。每個標(biāo)點符號各占一個token??崭竦膖oken則被合并到相鄰的單詞中。Tokenizer適用于GPT-3、GPT-3.5和GPT-4。需要注意的是,不同的LLM通常采用不或類型的token。根據(jù)經(jīng)驗,1000個token大致等同于750使用OpenAI進入OpenAIPlayground后,你將看到圖2-4所示的頁面。頁面中間是我們與LLM交圖2-4包含提示、資源和互動區(qū)域的OpenAIPlaygroundSYSTEM(系統(tǒng)提示這是為LLM提供背景信息的地方,例如“你是Python編程方面的專家”。系統(tǒng)提示型在對話中的行為,對于確保模型保持在期望的參數(shù)或上下文范圍內(nèi)特別有用。USER(用戶提示這是提示的主要指令。例如,你可以在此處要求LLMAddmessage(添加消息在這里,你可以與LLM假設(shè)你正在開發(fā)一個Python項目,卻不確定如何利用Tkinter(庫)入。在這種情況下,你可以這樣詢問。系統(tǒng):你是擅長Tkinter的Python用戶:我想用Tkinter問如何做?LLMLLM將提供相應(yīng)的代碼解決方案,其中可能包括使用try-except語句塊來嘗試將輸入的年齡轉(zhuǎn)換為整數(shù),并處理可能出現(xiàn)的異常。整個過程與使用ChatGPT其自定義功能,這些功能可以在圖2-4所示頁面的右側(cè)找到。Model(模型你可以選擇不同的模型,甚至可以使用自己微調(diào)的LLM,的編程需求。有關(guān)微調(diào)模型的更多信息,請參閱OpenAI的API文檔。Temperature(溫度值溫度值可以調(diào)整所生成內(nèi)容的隨機性或創(chuàng)造性。數(shù)值范圍為0~2,越確定和集中。表2-3列出了不同類型編程任務(wù)的建議溫度值。表2-3但是,如果使用的溫度值過高,結(jié)果就會變得毫無意義。下面是使用2時的提示示例。提示:在Python中,將數(shù)據(jù)從CSV文件遷移到MySQL如你所見,圖2-5展示的輸出結(jié)果并不具有實際意義。圖2-5溫度值為2時,LLMMaximumLength(最大長度用于設(shè)置生成內(nèi)容時所允許的最大token數(shù)量。這個限額包括了提示(prompt)和回復(fù)(response)的token數(shù)量總和。內(nèi)容生成與token用的具體模型。Stopsequence(終止序列終止序列是一種信號,用于指示LLM應(yīng)在何時停止繼續(xù)生成文本。用戶可以設(shè)定一接收到停止生成的命令。Top核采樣是一種根據(jù)累積概率閾值(用變量p表示,取值范圍為0~1)來選擇單詞的方法。簡單來說,LLM在生成文本時,并不是僅僅從概率最高的幾個單詞中選取,而是根據(jù)設(shè)定的p值考慮一個更寬泛或更狹窄的單詞范圍。當(dāng)p型可以選擇的單詞范圍較小,更集中,這有助于生成更可預(yù)測且連貫的文本。相反,當(dāng)p值設(shè)定得較大時,模型考慮的潛在單詞范圍更廣,能夠生成更多樣化、更具創(chuàng)造性的文本。Frequencypenalty(頻率懲罰頻率懲罰有助于解決LLM的一個常見問題——重復(fù)的短語或句子。取值范圍為0~2,值越大,重復(fù)的短語或句子越少。但是,當(dāng)值大于1難以預(yù)測,甚至變得沒有意義。Presencepenalty(存在懲罰存在懲罰的取值范圍也是0~2,值越大,LLM更廣泛的詞匯或概念。憑借頻率懲罰、存在懲罰和核采樣等工具,OpenAI整適合特定任務(wù)的策略。鑒于LLM的復(fù)雜性,尋找最優(yōu)解通常沒有固定的公式或規(guī)則。評估評估LLM是一項極具挑戰(zhàn)性的任務(wù)。這些復(fù)雜的系統(tǒng)往往缺乏透明度,使得外界難具體信息,正變得日益稀缺。ModelTransparencyIndex(基礎(chǔ)模型透明度指數(shù))的評分系統(tǒng),旨在衡量LLM的排名采用百分比形式。表2-4舞。研究人員認(rèn)為,目前還沒有任何一個主流的LLM的平均透明度僅為37%。表2-4主流LLMLLM的一個顯著優(yōu)勢在于其處理多領(lǐng)域任務(wù)的靈活性(例如軟件開發(fā)),但這同時準(zhǔn)測試,以確保模型在每個特定應(yīng)用場景中都能表現(xiàn)出有效性和安全性。盡管存在這些挑戰(zhàn),但在評估LLMBERTScore是一種評估文本生成模型性能的指標(biāo),它通過對比生成的文本與參考文本,利用預(yù)訓(xùn)練的語言模型BERT別適合用在那些涉及自然語言注釋或代碼評論的場景中。困惑度(Perplexity)是評估概率模型(如LLM)性能的常用指標(biāo)。它衡量模型預(yù)意味著模型在預(yù)測代碼序列中下一個token時具有更高的準(zhǔn)確性和優(yōu)勢,表明模型對代碼的語言模式有更深刻的理解。BLEU(BiLingualEvaluationUnderstudy)最初是為機器翻譯任務(wù)設(shè)計的,現(xiàn)在的質(zhì)量。具體來說,BLEU通過計算n-gram之間的相似度,這有助于衡量生成代碼的語法準(zhǔn)確性。n-gram代碼的質(zhì)量越高。ROUGE(Recall-OrientedUnderstudyforGistingEvaluation)處理領(lǐng)域借鑒的一個指標(biāo),同樣適用于評估代碼生成模型的性能。ROUGE主要通過計算生成文本和一組參考文本之間的n-gram重疊度來衡量它們的相似性。MBXP(MostBasicXProgrammingproblems)基準(zhǔn)測試是專門為評估多語言環(huán)境的多語言評估,從而更準(zhǔn)確地衡量模型在不同編程語言中的代碼生成能力。HumanEval是一個專門用于評估LLM文檔字符串合成程序時的準(zhǔn)確性來進行評估。這個基準(zhǔn)測試對于持續(xù)開發(fā)和提升模型在代碼生成方面的能力起到至關(guān)重要的作用。盡管不同模型在HumanEval上的表現(xiàn)各異,展示了它們各自的熟練程度,但名為HUMANEVAL+由主流LLM生成,但之前未被探測到的錯誤代碼方面發(fā)揮了關(guān)鍵作用。MultilingualMultilingualHumanEval(HumanEval-X)是對原始HumanEval這個基準(zhǔn)測試旨在全面評估LLM在代碼生成和翻譯方面的能力,覆蓋了超過10種不同的編程語言。HumanEval-X引入了一個轉(zhuǎn)換框架,該框架能夠?qū)ython語言中的環(huán)境下的代碼生成和翻譯提供了一個更為全面的基準(zhǔn)。當(dāng)評估LLM時,一種常見的方法是考查其參數(shù)量,這個數(shù)字有時可達到數(shù)千億。但法。首先,模型參數(shù)的擴展在計算能力和能源消耗方面成本極高,這可能導(dǎo)致LLM在實異,但在未見過的數(shù)據(jù)上表現(xiàn)不佳的情況下,這會削弱模型的泛化能力。更全面和多樣化,以準(zhǔn)確衡量模型在大量不同任務(wù)上的性能。最后,微調(diào)是一種在不顯著增加基礎(chǔ)LLM方法。LLMLLM有多種類型,其中備受矚目的一類是開源LLM共享。它們的開放透明讓你能夠洞察模型的運作方式。此外,開源LLM鼓勵開發(fā)者協(xié)作創(chuàng)新,共同開發(fā)插件,以便及時修復(fù)那些煩人的錯誤。開源LLM然而,開源LLM并非完美無缺。它們可能沒有專門的團隊來解決問題、提供支持,者在論壇上尋求社區(qū)的幫助。惡意代碼的途徑。因此,使用開源模型時需要格外小心。讀象形文字。表2-5列出了一些主流的開源LLM表2-5主流的開源注:在LLM中,在提到參數(shù)規(guī)模時,一般用千參數(shù)(K)、百萬參數(shù)(M)、10數(shù)(B)表示。另一類LLM是閉源或?qū)S蠰LM,構(gòu)視為高度機密。開發(fā)這些復(fù)雜系統(tǒng)的公司往往擁有雄厚的財力支持。表2-6展示了這些公司在2023年籌集的風(fēng)險投資金額。表2-6頂級LLM公司在2023打造尖端的基礎(chǔ)設(shè)施。這使得他們開發(fā)的LLM在性能上往往處于行業(yè)領(lǐng)先地位,代準(zhǔn)而設(shè)計的,尤其是在安全性和隱私保護方面。的?它們?nèi)绾翁幚砘糜X和偏見?目前,這些問題的答案往往不夠透明和詳盡。此外,大型AI的生態(tài)系統(tǒng)內(nèi),缺乏靈活性和選擇權(quán)。與開源LLM相比,閉源LLM源LLM那樣從廣泛的社區(qū)輸入和持續(xù)的審查中獲益。評估AI輔助編程工選擇合適的AI使用特定的工具,那么你的選擇可能會受到限制。StackOverflow的2023年《開發(fā)者調(diào)查》是一份快速了解當(dāng)前熱門工具的寶貴資源。該調(diào)查匯集了近90000名開發(fā)者對當(dāng)前流行的AI如表2-7所示。表2-7流行的AI通過表2-7,你可以對眾多可用的AI輔助編程工具有一個全面的了解。在選擇特定試用版本,這讓你有機會先行測試,而不用立即做出全面投入的決定。續(xù)創(chuàng)新能力。如果資金不足,公司可能難以為繼,甚至面臨停止服務(wù)的風(fēng)險。一些AI帶來不便。以Kite為例,它曾是這個領(lǐng)域的先驅(qū)之一,自2014到了2022年,Kite公司決定終止該項目。幸運的是,Kite為社區(qū)提供了持續(xù)使用和進一步開發(fā)該工具的可能。小在本章中,我們揭開了生成式AI和LLM史案例,例如早期的聊天機器人ELIZA個重要里程碑——Transformer模型。此外,我們還親自體驗了OpenAIPlayground,并學(xué)習(xí)了如何根據(jù)需要定制LLM。第3提示工提示工程(PromptEngineering)是機器學(xué)習(xí)和自然語言處理領(lǐng)域的一個重要分目標(biāo)是探索與LLM和復(fù)雜AI系統(tǒng)有效對話的方法,以便它們能夠生成我們所需的答案。這里所指的模型是專門用來處理和生成類似于人類語言的響應(yīng)的模型。正如在向他人尋求建議時需要提供背景信息和明確的請求一樣,LLM同樣需要這樣加信息,以確保LLM能夠準(zhǔn)確理解你的需求。向LLM提問并不總是一次性的,有時更像是與LLM調(diào)整問題,最終獲得有價值的信息。假設(shè)你正在使用AI輔助編程工具開發(fā)一個Web應(yīng)用程序。一開始,你可能會詢問如何用JavaScript密碼加密和安全的數(shù)據(jù)庫連接。每一次與AI化,以使其更好地滿足項目的特定需求。需要注意的是,提示工程師已經(jīng)成為一個非常受歡迎的職業(yè)。根據(jù)WillisTowersWatson提供的數(shù)據(jù),提示工程師的平均年收入約為13于保守。為了吸引頂尖人才,雇主通常會提供十分吸引人的期權(quán)和獎金。效地與LLM進行交流。藝術(shù)與科和語調(diào),以引導(dǎo)AI覺和創(chuàng)造性思維,來精煉自己的語言并激發(fā)出細(xì)致的回復(fù)。另一方面,提示工程同樣包含大量的科學(xué)元素。正如第2章所討論的,你需要深入理解AI并不斷調(diào)整,直至獲得期望的響應(yīng)。感到失望。需要不斷學(xué)習(xí)和適應(yīng)。挑有時提示工程可能會令人感到沮喪。盡管LLM使是對提示語措辭的微小調(diào)整,也可能顯著改變模型的輸出結(jié)果。啰有時LLM可能會過于健談。你給出一個提示,它們會提供一段詳盡的回答,而實際答過于冗長。如果希望LLM直截了當(dāng)?shù)鼗卮?,你可以要求它們“簡明扼要”。在一個LLM中表現(xiàn)出色的提示,在另一個LLM從ChatGPT切換到Gemini或GitHubCopilot,則可能需要調(diào)整提示,因為每個LLM的,對提示的理解和解釋也各不相同。LLM可能會對過長的提示感到困惑,開始忽略或誤解你輸入的部分內(nèi)容。這就好比供過多的細(xì)節(jié),并盡量將提示內(nèi)容限制在一頁以內(nèi)。歧如果你的提示不夠明確,LLM答。因此,提供清晰的提示至關(guān)重要。善提示效果的策略和技巧。提提示(prompt)主要由4個部分組成,如圖3-1圖3-1提示的4在構(gòu)建有效的提示時,上下文是關(guān)鍵,它定義了LLM在回答問題時所扮演的角色。緊接著是具體的指令,比如要求模型進行總結(jié)、翻譯或分類。為了使LLM能夠更準(zhǔn)的輸出格式也很重要。實際上,并不是上述所有組件(即提示的4個主要組成部分)在每種情況下都是必答復(fù)。但作為一般規(guī)則,向LLM提供的細(xì)節(jié)越具體,得到的回答往往越精準(zhǔn)。上下常包括指定LLM在回答時應(yīng)該扮演的角色或身份。通過設(shè)定上下文,LLM針對性。提示:你是一位專注于Java再比如,你想學(xué)習(xí)某種算法的優(yōu)化技術(shù),此時可以提供以下上下文。提示:你是一位擅長算法優(yōu)化的資深軟件開發(fā)人員。提供清晰的上下文有助于引導(dǎo)LLM指過多的指令可能會使LLM感到困惑,從而難以獲得所需的答案。雜。如果指令不夠清晰或相互矛盾,LLM可能會感到迷茫,不確定應(yīng)優(yōu)先考慮哪個指令,或者如何平衡各個指令。其次,指令越多意味著LLM需要處理的信息量越大。LLM理能力,有時還可能導(dǎo)致錯誤或偏差。最后,LLM響得到的回答類型。因此,專業(yè)建議是保持簡單。與其一次性向LLM提出一系列復(fù)雜問題,不如嘗試將長的獨白。型。摘點和要點。摘要對于快速掌握冗長的文檔非常有用。對于軟件開發(fā)者,在表3-1所列的情況下,摘要是一個特別方便的工具。表3-1編程任務(wù)的摘要提示題”。以下是一些專為開發(fā)者設(shè)計的主題建模提示。提示:請從以下文本中識別討論的關(guān)鍵主題提示:請從以下文本中提取關(guān)鍵詞,以推斷其主要話題提示:請根據(jù)以下文本的內(nèi)容,為其推薦標(biāo)簽文本分類文本分類是一項讓計算機為文本分配標(biāo)簽的任務(wù)。情感分析是文本分類的一種應(yīng)用,LLM開發(fā)者,情感分析是一款寶貴的工具,可用于衡量用戶對其開發(fā)的應(yīng)用程序的反饋。提示:提示:向嗎?{text}提示:分類嗎?{text}提示:么?{text}建你可以指導(dǎo)LLM錯誤、優(yōu)化代碼還是更高效地使用API。提示:調(diào)用以下代碼片段時拋出NullPointerException原因并提出修復(fù)建議嗎?提示:議,使其運行得更快或更具可讀性?LLM可能未曾考慮到的想法,特別是在處理復(fù)雜或微妙的任務(wù)時。然而,LLM并非無懈可擊。一個潛在的問題是,模型的回答可能過于簡化,忽略了息或趨勢??傊琇LM獲得更全面的了解并加以掌握。語言,并理解當(dāng)?shù)靥赜械男袨榱?xí)慣,是擴大市場并與目標(biāo)受眾建立緊密聯(lián)系的關(guān)他們量身定制的,而用戶的滿意度直接關(guān)系到企業(yè)利潤的增長。市場中占有一席之地,往往還能使其成為當(dāng)?shù)赜脩粑ㄒ坏倪x擇。增加了項目的復(fù)雜性和成本。這正是LLM成為開發(fā)者工具箱中的一款強大工具。表3-2到的語言翻譯提示,以幫助開發(fā)者更高效地進行軟件的本地化。表3-2語言翻譯提示范例我們應(yīng)當(dāng)審慎地對待LLM的多語言能力,因為它們并非完美無缺。有時這些模型可極其復(fù)雜,直接翻譯并不總是正確的方法;更重要的是要傳達出正確的意義和語境。關(guān)乎如何表達,而這在不同的語言和文化中可能大相徑庭。讓語言專家審查LLM化適應(yīng)性。輸入內(nèi)在構(gòu)建提示時,使用####或"""等特殊符號來明確區(qū)分指令和希望LLM信息,是一種非常有效的策略。這些符號充當(dāng)邊界或標(biāo)記,旨在幫助LLM清晰地識別指令的結(jié)束點和內(nèi)容的開始點。例如,當(dāng)軟件開發(fā)者需要從長篇文檔中提取有關(guān)正在集成的新API可以采用以下提示結(jié)構(gòu)。雜的文本輸入尤其有用。輸出格在提示中,可以告訴LLM提示:創(chuàng)建一個Python函數(shù),接收用戶對象列表(每個對象包含一個用戶的ID名),并返回一個將用戶ID映射到姓名的JSON對象。將輸出轉(zhuǎn)換為JSON格式。ChatGPT"code":"defmap_user_ids_to_names(users):\nuser_map={user['id']:user['name']foruserinusers}\nreturnuser_map","example_usage":"input":{"id":1,"name":"Alice"},{"id":2,"name":"Bob"},{"id":3,"name":"output":"1":"Alice","2":"Bob","3":其他可以進行格式化輸出的提示范例如表3-3表3-3格式化輸出提示范例在構(gòu)建提示時,可以通過指定期望的回答長度來進一步指導(dǎo)LLM。例如,通過使用如“請將回答限制在300字以內(nèi)”。雖然有時LLM通常會在指定的大致范圍內(nèi)給出回答。優(yōu)秀實接下來我們將探討一些制作有效提示的優(yōu)秀實踐,以幫助你從LLM中獲得所需的答案。然而,這些建議不應(yīng)視為一成不變的法則,它們更多是基于經(jīng)驗的指導(dǎo)性建議,可能帶有主觀性,并非不可更改。隨著你與LLM交流的深入,你將逐漸發(fā)現(xiàn)一成部分。越具體越好系統(tǒng)達成默契的關(guān)鍵步驟。提示中的信息越詳盡、越清晰越好。如果提示過于模糊,LLM就可能做出錯誤的假設(shè),甚至產(chǎn)生不切實際的幻想。提示:提示:提示:開發(fā)一個Python格式:YYYY-MM-DD、MM/DD/YYYY和MonthDD,YYYY。它應(yīng)返回一個datetime對象。請?zhí)峁┮粋€腳本,演示該函數(shù)正確處理每種日期格式的至少3個示例,并在附帶文檔中說明任何依賴項、函數(shù)中使用的邏輯,以及如何運行該腳本。提示:開發(fā)一個SQL查詢,從數(shù)據(jù)庫中檢索2023年最后一個季度消費超過500客戶列表。該查詢應(yīng)返回客戶的全名、電子郵件地址、消費總金額和上次購買日期。查詢結(jié)果應(yīng)按消費總金額降序排列。請確保該查詢已針對性能進行了優(yōu)化。專業(yè)術(shù)語與縮略語完整形式,并對所使用的專業(yè)術(shù)語提供清晰的定義或解釋。假設(shè)你正在使用ChatGPT提示:DB在上述提示中,“DB”指代不清,因為它可能指MySQL、PostgreSQL系統(tǒng),而且也沒有說明數(shù)據(jù)庫連接問題的細(xì)節(jié)。提示:在嘗試使用JDBC連接PostgreSQL決這個問題?這個改進后的提示清楚地指明了正在使用的數(shù)據(jù)庫系統(tǒng)(PostgreSQL)法(使用JDBC)以及遇到的具體問題(連接超時)。馬克·吐溫說:“恰當(dāng)?shù)谋磉_和不恰當(dāng)?shù)谋磉_,它們之間的區(qū)別就像閃電蟲和閃零樣本學(xué)習(xí)和少樣本學(xué)習(xí)在零樣本學(xué)習(xí)(zero-shotlearning)就需要采取進一步的措施。少樣本學(xué)習(xí)(few-shotlearning)是解決這一問題的有效途徑。少樣本學(xué)習(xí)指的是LLM能夠利用極少量的示例或訓(xùn)練數(shù)據(jù)來理解任務(wù)要求并執(zhí)行任務(wù)。與傳統(tǒng)的機據(jù)才能完成復(fù)雜的任務(wù)。LLM之所以具備這一能力,是因為它在針對特定任務(wù)進行微調(diào)之前,就已經(jīng)在廣泛的網(wǎng)絡(luò)文本上進行了大規(guī)模的預(yù)訓(xùn)練。表進行歸一化處理,使取值區(qū)間變?yōu)閇0,1]一化輸出的示例。提示:根據(jù)以下示例,將數(shù)字列表歸一化,使取值區(qū)間變?yōu)閇0,1]。輸入:[2,4,6,8]輸出:[0,0.3333,0.6667,1]輸入:[5,10,15]輸出:[0,0.5,輸入:[1,3,2]輸出:[0,1,請生成一個Python的數(shù)字列表。通過這種方式,ChatGPT示。defmin_value=min(numbers)max_value=max(numbers)ifmin_value==max_value:return[0]*len(numbers)#Handlethecasewhere#allnumbersarethesamereturn[(x-min_value)/(max_value-min_value)forxin#Testthefunctionwithoneoftheexamplesprint(normalize([2,4,6,8]))#Output:[0.0,0.3333333333333333,#0.6666666666666666,1.0]引導(dǎo)詞引導(dǎo)詞是一種特殊的關(guān)鍵字或短語,它能夠指導(dǎo)LLM生成特定類型的輸出。在某些一個示例。提示#創(chuàng)建一個簡單的Python函數(shù),該函數(shù)能夠#1.提示輸入華氏溫度#2.將華氏溫度轉(zhuǎn)換為攝氏溫度這里使用def作為引導(dǎo)詞,告知模型接下來應(yīng)該開始編寫一個Python函數(shù)。表3-4出了更多的引導(dǎo)詞。表3-4引導(dǎo)詞CoT提2022年,Google的研究人員在論文“Chain-of-ThoughtPromptingElicitsReasoninginLargeLanguageModels”(Chain-of-Thought,CoT)提示。CoT提示通過將復(fù)雜問題分解為一系列步驟,顯著增強了LLM的推理能力。實際上,CoT型展示少量示例來引導(dǎo)其理解和執(zhí)行任務(wù)。在軟件代碼生成任務(wù)中,CoT提示顯得尤為有效。下面用一個示例來說明。假設(shè)你打算使用Python語言的Flask框架來開發(fā)一個具備用戶注冊與登錄功能的Web序,表3-5展示了如何應(yīng)用CoT提示來指導(dǎo)模型。表3-5CoT引導(dǎo)性問在構(gòu)建提示時,引導(dǎo)性問題可能導(dǎo)致LLM產(chǎn)生不尋?;虿粶?zhǔn)確的回答。為了獲得最免誤解和臆斷至關(guān)重要。提示:請求類比示設(shè)想你并不熟悉面向?qū)ο缶幊讨欣^承的概念。打開ChatGPT提示:讓LLM使用類比來說明。提示:ChatGPT:些特征和屬性也可能是孩子從祖父母那里繼承的。在這里,ChatGPT繼承的核心要素。減少幻在第2章中,我們提到提示LLM導(dǎo)性的,但LLM會把內(nèi)容當(dāng)成真的來響應(yīng)。幻覺對于準(zhǔn)確性要求高的軟件開發(fā)來說尤其具有挑戰(zhàn)性??赡苡|發(fā)幻覺。造成幻覺的原因多種多樣,包括如下這些。LLM性?;蜉^為常見時。容。題的響應(yīng)。LLM不完全理解一些查詢的細(xì)微差別或含義??吹阶銐蚨嗟馁嫡Z或習(xí)語示例時。提示:需回答的格式,導(dǎo)致回答偏離主題或包含虛構(gòu)信息。一種有效的方法是提供一組預(yù)定義的選項,讓LLM改寫成如下形式。提示:另外,考慮要求LLM對某個結(jié)論給出判斷。下面是一個有效的提示。提示:在Java性。提示步驟1創(chuàng)建斐波那契數(shù)列生成器。步驟2使用迭代法。步驟3編寫一個名為generate_fibonacci的Python函數(shù),將整數(shù)n作為參數(shù)。步驟4該函數(shù)以列表形式返回斐波那契數(shù)列中的前n個數(shù)字。安全和隱息。以下是一個包含個人身份信息的提示。提示:你將如何解決John\hDoe報告的賬號john.doe@的登錄問題?提示:提示:如何修復(fù)IP地址為相反,使用更通用的問題往往更安全,例如下面的提示。提示:恰當(dāng)?shù)?。提示:如何檢測和防止SQL提示:如何利用網(wǎng)站的SQL解和控制偏見(通常反映在訓(xùn)練數(shù)據(jù)中)至關(guān)重要。最好使用中性和包容性的語示的反饋也很有幫助,這不僅能提高與LLM互動時的公平性和包容性,還有助于更準(zhǔn)確、更全面地理解主題。到目前為止,我們已經(jīng)了解逐步引導(dǎo)LLM在。然而,AIAgent能夠提供更進一步的功能。它們不僅可以按照提示執(zhí)行任務(wù),還能與LLM協(xié)同工作,發(fā)揮創(chuàng)造力,為你提出的任何目標(biāo)制訂策略和計劃。這些Agent夠利用Pinecone和ChromaDB自治的AIAgent設(shè)你的目標(biāo)如下。提示:表3-6列舉了自治的AIAgent可能經(jīng)歷的階段。表3-6自治的AIAgent自治的AIAgent技術(shù)正站在行業(yè)的前沿,并展現(xiàn)出巨大的發(fā)展?jié)摿Α.?dāng)然,挑戰(zhàn)也資源AIAgent可能會消耗巨大的計算資源,對處理器和數(shù)據(jù)庫造成壓力,這可能導(dǎo)致等無限循在某些情況下,由于缺乏進展或重復(fù)的獎勵機制,AIAgent可能會陷入循環(huán),無法作為新興技術(shù),AIAgent可能存在一些粗糙邊緣,包括漏洞或意外行為,因而可能記憶問AIAgent多任務(wù)處理面對繁重的工作量,AIAgentAIAgent可能會被一些無關(guān)緊要的細(xì)節(jié)困擾,這可能導(dǎo)致它們在選擇工具或方法時支持LLM的另一項創(chuàng)新是檢索增強生成(Retrieval-AugmentedGeneration,RAG)。通過RAG,生成式AI應(yīng)用(例如使用LangChain框架構(gòu)建的應(yīng)用)外部數(shù)據(jù)源,通常是矢量數(shù)據(jù)庫。這為模型提供了更多的具體知識,從而增強的響應(yīng)能力。在處理復(fù)雜的軟件開發(fā)任務(wù)時,針對以下情況,RAG當(dāng)開發(fā)者遇到軟件缺陷和故障時,可以使用RAG源中挖掘出修復(fù)方法和解決方案。RAG或代碼補丁。為代碼審查增添RAG技術(shù)可以獲取公司內(nèi)部的所有編程最佳實踐、標(biāo)準(zhǔn)及必須遵守的規(guī)則。這意味當(dāng)需要對代碼進行測試時,RAG景和模式,并根據(jù)項目需求進行調(diào)整,幫助你更快地開發(fā)出測試用例或腳本。在某些情況下,LLM提示:使用匯編語言編寫RESTfulAPI。ChatGPT:由于匯編語言的低級特性,使用匯編語言編寫RESTfulAPI很高的應(yīng)用場景。小造力、直覺和條理清晰的技巧來構(gòu)建提示,以使LLM提供我們所期望的答案。在這個過程中,并沒有一成不變的神奇公式。如果能夠清晰地表達提示,確保邏輯連貫,并且提供一些示例,則更有可能得到滿意的答案。習(xí)得越多,你的技巧就會越嫻熟。第4GitHub本章將深入探討GitHubCopilot,以下簡稱Copilot。作為AI輔助編程領(lǐng)域的領(lǐng)軍產(chǎn)品,Copilot被譽為生成式AI的“殺手級應(yīng)用”。它為開發(fā)者提供了高級的代碼建議、代碼創(chuàng)建和代碼解釋功能,極大地提升了開發(fā)效率。Copilot通過理解代碼更可靠的代碼。在本章中,我們將細(xì)致了解Copilot的各個方面,包括它的定價策略、配置方法,讀者更好地利用Copilot,本章還會提供一些實用的Copilot還將介紹Copilot如何通過合作伙伴計劃與其他企業(yè)進行協(xié)作??偠灾?,本章旨在全面而深入地介紹Copilot的功能和應(yīng)用。GitHubCopilot簡2021年6月,微軟推出了GitHubCopilot。GitHub首席執(zhí)行官NatFriedman在一篇博文中將Copilot形容為“AI編程助手”,Copilot程任務(wù),進而加快開發(fā)者的工作進度。Copilot是微軟與OpenAI合作的成果,最初基于Codex構(gòu)建而來,Codex是為編程專門定制的GPT-3的一個變體。為了增強Codex種名為中間填充(Fill-In-the-Middle,F(xiàn)IM)的新方法,從而提高了代碼建議的質(zhì)量和響應(yīng)速度。隨著更先進的GPT-3.5Turbo的加入,F(xiàn)IM了代碼建議的接受率。為了增強安全性,Codex結(jié)合了AI系統(tǒng),能夠即時識別并阻止?jié)撛诘娘L(fēng)險編程模式,并特別關(guān)注那些常見的漏洞,如硬編碼憑證和SQL全性。版本和價格Copilot提供30天免費試用服務(wù)。試用期結(jié)束后,用戶有以下3種選擇。個人版?zhèn)€人版Copilot月費為10美元,年費為100美元。個人版Copilot生成,這對于確保代碼的可靠性和穩(wěn)定性至關(guān)重要。此外,個人版Copilot還具備篩查易受攻擊編程模式的能力,并避免提供任何可能涉及版權(quán)問題的公共代碼建議,從而確保所生成的代碼是獨特和原創(chuàng)的。商業(yè)版商業(yè)版Copilot提供的功能更全面,每位用戶每月收費19美元。商業(yè)版Copilot個人版Copilot的所有功能,并增添了一些專為企業(yè)設(shè)計的額外功能。商業(yè)版Copilot簡化了許可證管理,這對公司管理訂閱和訪問權(quán)限非常有利。商業(yè)版Copilot還具備管理組織政策的功能,有助于統(tǒng)一管理所有項目,保持項目間的一致性。商業(yè)版Copilot的另一大亮點是其頂尖的隱私保護措施,這對于確保敏感業(yè)務(wù)數(shù)據(jù)的安全至關(guān)重要。此外,商業(yè)版Copilot還支持企業(yè)代理,以確保整個公司網(wǎng)絡(luò)的連接安全和順暢。企業(yè)版企業(yè)版Copilot月費為39美元。企業(yè)版Copilot上對系統(tǒng)進行訓(xùn)練,從而提供更有針對性的代碼建議,顯著提升開發(fā)者的工作效率。企業(yè)版Copilot根據(jù)開發(fā)者的內(nèi)部編程習(xí)慣、偏好使用的API行量身定制,有助于推廣最佳實踐,同時遵守企業(yè)安全規(guī)則。企業(yè)版Copilot的另一個優(yōu)勢是可以用COBOL和Fortran由于這些編程語言通常缺乏公共資源庫中的訓(xùn)練數(shù)據(jù),通用LLM言上表現(xiàn)不佳。當(dāng)然,通用LLM也無法了解特定公司的專有編程語言。GitHub系統(tǒng)會持續(xù)掃描公司的軟件倉庫,以增強企業(yè)版Copilot的能力。例如,GitHub些都有助于突出公司正在使用的最新方法和策略。定制模型有助于在整個組織內(nèi)傳播專業(yè)知識。AI知識。通過持續(xù)訓(xùn)練,AI推移變得更加精確。然而,企業(yè)在使用AI隱私和知識產(chǎn)權(quán)風(fēng)險。2023年,Gartner的研究表明,僅有不到10%的大型企業(yè)開始使用AI企業(yè)猶豫不決的態(tài)度部分出于對安全性和精確性的擔(dān)憂。然而,隨著AI發(fā)展,預(yù)計在可預(yù)見的未來會有越來越多的企業(yè)開始采納這些工具。總之,AI編程工具帶來的好處不容忽視。案例:AMD公司的硬件編在AMD公司的一項有趣案例研究中,我們看到了定制模型的實際應(yīng)用。成立于1969年的AMD公司是CPU和個人計算機半導(dǎo)體領(lǐng)域的領(lǐng)導(dǎo)者。開發(fā)與Web應(yīng)用程序等軟件的開發(fā)有著本質(zhì)上的不同。開發(fā)者需要對硬件系統(tǒng)有深更高的精確性和兼容性。會推遲產(chǎn)品的發(fā)布,還會影響產(chǎn)品在市場上的競爭力。誤。2023年,AMD公司在對Copilot多的懷疑,但所有懷疑都是合理的。在一個試點項目中,AMD公司為Verilog和SystemVerilog等各種HDL(HardwareDescriptionLanguage,硬件描述語言)創(chuàng)建了一個定制版的Copilot。HDL是一種特殊的編程語言,專門用于概述電子電路(尤其是數(shù)字邏輯電路)的架構(gòu)、設(shè)計和功能。HDL模和仿真至關(guān)重要。實驗結(jié)果超出預(yù)期。令人驚訝的是,Copilot生成的代碼實際上比AMD編寫的代碼更符合AMD公司的標(biāo)準(zhǔn)。如此顯著的改進,促使一些開發(fā)者從Vim(高度可定制的文本編輯器)轉(zhuǎn)而采用VisualStudioCode作為IDE。案例:Shopify另一個有趣的案例發(fā)生在Shopify公司。Shopify輕松建立在線商店。該平臺在美國市場占有約10%的份額,在歐洲市場則占有約6%的份額。顯然,為了支持其廣泛的業(yè)務(wù),Shopify需要龐大的基礎(chǔ)設(shè)施支持。目前公司擁有大約300個公共代碼倉庫和5000個私有代碼倉庫。此外,Shopify對其代碼進行大約1500次部署。Shopify公司是首批擁抱Copilot流程,提升了開發(fā)者的工作效率。目前,Shopify公司有近2000名開發(fā)者正在使用Copilot。最引人注目的是,其中70%的開發(fā)者認(rèn)為它非常有用,75%的開發(fā)者經(jīng)常使用它,而且Copilot提供的代碼建議約有26%被采納。盡管一些功能〔比如與命令行界面(CommandLineInterface,CLI)的集成〕尚代碼編寫更好代碼的靈感。隨著時間的推移,Copilot間來調(diào)整他們的日常工作流程并適應(yīng)新功能。Copilot也有一個學(xué)習(xí)曲線。早期采用Copilot時,經(jīng)驗豐富的開發(fā)者并不熱衷于使用它,他們傾向于將其視為后,高級開發(fā)者對Copilot的使用開始變得更加活躍。Shopify公司的代碼庫中有大約100萬行代碼是用Copilot編寫的,這表明Copilot該公司的業(yè)務(wù)具有重大意義。案例:善運營和實現(xiàn)增長。該公司在全球120多個國家擁有733000多名員工。2023年,埃森哲咨詢公司對內(nèi)部450名開發(fā)者進行了Copilot任何具體的任務(wù)或目標(biāo)。經(jīng)理們只是要求每個人像往常一樣工作。埃森哲咨詢公司對Copilot的試用長達6·在編程方面,Copilot建議的接受率為35%,其中88%后仍然有效?!どa(chǎn)力得到顯著增強。拉取請求增加了50%,合并率提高了15%·效率得到大幅提升,構(gòu)建次數(shù)增加了50%,成功率提高了45%·開發(fā)者非常滿意:高達96%安Gartner的一項調(diào)查研究了2000多名首席信息官(CheifInformationOfficer,CIO),發(fā)現(xiàn)其中66%的CIO計劃在2023一趨勢已經(jīng)持續(xù)了多年。損害、法律糾紛和運營中斷。此外,隨著數(shù)據(jù)隱私法規(guī)變得日益嚴(yán)格,CIO必須保持對合規(guī)性的警覺,以避免罰款并維護客戶的信任。因此,GitHub將安全性作為Copilot計劃的一個重點。GitHub開發(fā)了一套基于LLM系統(tǒng),能夠在不安全的編程模式出現(xiàn)時立即檢測并修復(fù)它們。此外,GitHub還推出了Copilot掃描代對于學(xué)生、教師和流行開源項目的維護者,Copilot份驗證過程。使用在開始使用Copilot之前,首先需要創(chuàng)建GitHub賬戶。GitHub和協(xié)同軟件開發(fā)的在線服務(wù)。它建立在Git管理功能的工具。4-1所示。單擊YourCopilot命令以啟用你的Copilot。你可以選擇計劃類型,然后圖4-1Codespaces與VSCodeCopilot有兩種使用方法。一種方法是通過Codespaces的開發(fā)環(huán)境,運行在VisualStudioCode(簡稱VSCode)上,可直接在GitHub站上使用。另一種方法是使用VSCode桌面版,當(dāng)然,也可以選擇VSCodeCopilot擴展。本書將重點介紹如何使用VSCodeCopilot擴展。VSCode本身是免費的。圖4-2顯示了VSCode的主界面。VSCode臺上,包括Windows操作系統(tǒng)(如Windows7、8、10和11)、macOS和各種Linux發(fā)行版(如Ubuntu、Debian、Fedora等)。圖4-2VSCodeVSCode主界面的左側(cè)是活動欄,里面有一堆圖標(biāo)。你可以使用它們來加載文件和你將看到輸出“Hello,Copilot!”的代碼。這是使用以下提示創(chuàng)建的,Copilot會圖4-3可以在VSCode中安裝擴展,例如Copilot提示:#寫一個“Hello,Copilot!”字符#聲明了這是一條注釋。這是指示Copilot值得關(guān)注的是,代碼是用Python擴展名為.py。Copilot根據(jù)文件的擴展名來判斷并采用相應(yīng)的編程語言。VSCode主界面的右上方有一個運行程序的圖標(biāo)。單擊它,VSCode將啟動終端。你代碼建議在VSCode中使用Copilot的方法非常簡單。當(dāng)你開始輸入代碼時,Copilot就會啟假設(shè)你在PythondefCopilot會立即提供一個完整的函數(shù)體,如圖4-4(ghosttext),圖4-4當(dāng)用戶輸入函數(shù)頭時,CopilotCopilot建議的代碼在你的機器上可能有些不同,這很正常,因為底層LLM組復(fù)雜的概率來工作的。GitHub果所需的if-else結(jié)構(gòu)。你可以按Tab鍵接受代碼建議。但如果Copilot按Esc鍵跳過它們。將鼠標(biāo)指針懸停在生成的代碼上,你會看到更多選項,如圖4-5圖4-5AcceptWorld(接受單詞)按鈕,一次選擇代碼中的一個單詞。如果單擊上面有3通過單擊工具欄左側(cè)的“1/2”按鈕,你可以瀏覽Copilot選方案。如圖4-5按鈕將切換至第二個方案,而單擊“<”按鈕則會返回至第一個方案。你還可以使用表4-1表4-1用于瀏覽代碼建議的快捷鍵如果按Ctrl+Enter快捷鍵,VSCode將創(chuàng)建一個新的選項卡并顯示10(見圖4-6)圖4-6VSCode顯示了10要選擇其中一個備選方案,請

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論