中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
AIGC 生成代碼正流行,對(duì)程序員是好還是壞?

AIGC 最大的價(jià)值將表現(xiàn)為重塑生產(chǎn)力、重塑開(kāi)發(fā)者工作流程?,F(xiàn)在,AIGC 生成的代碼是否可以同于生產(chǎn)?AIGC 會(huì)給開(kāi)發(fā)領(lǐng)域帶來(lái)什么變化?程序員該拒絕還是適應(yīng)輔助編程工具?
6 月 16 日,WasmEdge 創(chuàng)始人和核心開(kāi)發(fā)者、 Second State 聯(lián)合創(chuàng)始人 Michael Yuan 博士,品覽聯(lián)合創(chuàng)始人 &CTO、極客時(shí)間《AI 大模型應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)營(yíng)》講師彭靖田,亞馬遜云科技大中華區(qū)首席架構(gòu)師鄧明軒做客《極客有約》,一起聊了聊 AIGC 與程序員的那些事兒。本文根據(jù)直播內(nèi)容整理,大家可以點(diǎn)擊查看完整視頻(https://www.infoq.cn/video/D8fRLD8POS4Nq0PGHVrH)。
AIGC 生成的代碼如何?
吳少杰:我提前給三位老師準(zhǔn)備了一個(gè)問(wèn)題。作為管理者,我們可能會(huì)遇到一些與大語(yǔ)言模型生成代碼相關(guān)的考慮?,F(xiàn)在我將展示一段設(shè)置好的代碼,邀請(qǐng)三位老師進(jìn)行點(diǎn)評(píng)。

我給大模型的描述是:

你是一個(gè) python 工程師,寫一個(gè)自動(dòng)檢查公司 git 代碼庫(kù)代碼合規(guī)的腳本程序,功能包括:代碼里是否包含數(shù)據(jù)庫(kù)密碼、調(diào)用 pylint 工具檢查代碼是否符合規(guī)范等,把不規(guī)范的代碼文件信息發(fā)郵件給提交代碼的程序員,并抄送他的直屬領(lǐng)導(dǎo)。生成的結(jié)果如下:
import osimport reimport subprocessimport smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText
# 郵件相關(guān)配置SMTP_SERVER = 'smtp.example.com'SMTP_PORT = 587SMTP_USERNAME = 'your_username'SMTP_PASSWORD = 'your_password'SENDER_EMAIL = 'your_email@example.com'SUBJECT = '不規(guī)范的代碼文件信息'
# 檢查數(shù)據(jù)庫(kù)密碼def check_database_password(file_path): with open(file_path, 'r') as file: content = file.read() if re.search(r'\bpassword\b', content, re.IGNORECASE): return True return False
# 使用 PyLint 檢查代碼是否符合規(guī)范def check_code_conformance(file_path): command = f'pylint {file_path}' result = subprocess.run(command, shell=True, capture_output=True, text=True) output = result.stdout return output
# 發(fā)送郵件通知def send_email(file_path, recipient, cc): msg = MIMEMultipart() msg['From'] = SENDER_EMAIL msg['To'] = recipient msg['Cc'] = cc msg['Subject'] = SUBJECT
body = f'不規(guī)范的代碼文件:{file_path}' msg.attach(MIMEText(body, 'plain'))
try: smtp_server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) smtp_server.starttls() smtp_server.login(SMTP_USERNAME, SMTP_PASSWORD) smtp_server.sendmail(SENDER_EMAIL, [recipient, cc], msg.as_string()) smtp_server.quit() print('郵件通知已發(fā)送') except Exception as e: print(f'發(fā)送郵件時(shí)發(fā)生錯(cuò)誤:{str(e)}')
# 主函數(shù)def main(): repo_path = '/path/to/your/git/repository'
for root, dirs, files in os.walk(repo_path): for file in files: file_path = os.path.join(root, file)
# 檢查數(shù)據(jù)庫(kù)密碼 if check_database_password(file_path): send_email(file_path, RECIPIENT_EMAIL, CC_EMAIL)
# 使用 PyLint 檢查代碼是否符合規(guī)范 pylint_output = check_code_conformance(file_path) if 'Your code has been rated at' not in pylint_output: send_email(file_path, RECIPIENT_EMAIL, CC_EMAIL)
if __name__ == '__main__': main()

鄧明軒: 這個(gè)問(wèn)題實(shí)際上是對(duì)大型語(yǔ)言模型的 Prompt 描述,我認(rèn)為這也是當(dāng)前程序員需要學(xué)習(xí)的一項(xiàng)技能,你必須學(xué)會(huì)如何與大型語(yǔ)言模型進(jìn)行交互,你可以告訴它代碼塊是什么樣的,請(qǐng)它簡(jiǎn)化或轉(zhuǎn)化為一個(gè)類或打包到一個(gè)類中完成任務(wù)。因此,Prompt 是一項(xiàng)非常重要的技能,我提醒大家要去學(xué)習(xí),并在實(shí)際工作中不斷提升,這將決定了后續(xù)使用這種基于大型語(yǔ)言模型生成代碼工具的效率。Prompt 寫得越好,效率就會(huì)越高。

關(guān)于 Prompt,吳老師使用的是中文,我個(gè)人認(rèn)為,在當(dāng)前的環(huán)境中,如果你的英文水平能夠達(dá)到一定程度,最好開(kāi)始使用一些英文的 Prompt。我們必須面對(duì)這個(gè)現(xiàn)實(shí),即大型語(yǔ)言模型目前無(wú)論是國(guó)內(nèi)還是國(guó)外訓(xùn)練的,它從各種資源中獲取的數(shù)據(jù)更多是英文的,因此大型語(yǔ)言模型對(duì)于理解英文的偏好和能力要強(qiáng)得多。當(dāng)然,我們希望中文的表現(xiàn)越來(lái)越好,但這之前,我們應(yīng)盡量適應(yīng)這種工具的發(fā)展。

可能有人問(wèn):有了大語(yǔ)言模型,我們是否還需要學(xué)習(xí)英語(yǔ)?根據(jù)我的個(gè)人使用體驗(yàn),雖然目前大型語(yǔ)言模型在翻譯等方面的表現(xiàn)已經(jīng)相當(dāng)出色,但用英語(yǔ)直接與它進(jìn)行交互會(huì)有獲取更多信息的能力。因此,從短期來(lái)看,我仍然認(rèn)為學(xué)習(xí)英語(yǔ)會(huì)有所助益,盡管對(duì)許多程序員來(lái)說(shuō)英語(yǔ)一直是個(gè)難題。

就生成的這段代碼而言,總體結(jié)構(gòu)非常完整,代碼看起來(lái)幾乎可以運(yùn)行,但一些配置項(xiàng)可能需要進(jìn)一步編寫。此外,它提到了 SMTP。在很多年前分析 SMTP 協(xié)議時(shí),我們需要了解各種配置和端口等信息,如果現(xiàn)在要我突然寫這樣的代碼,可能要花很長(zhǎng)的時(shí)間去檢查各種細(xì)節(jié),不過(guò)有了這些工具就可以幫助生成相關(guān)代碼。

我之前與少杰討論過(guò)這個(gè)話題:如果你的基礎(chǔ)扎實(shí),能力為 2,那這個(gè)工具就是一個(gè)倍增器,可以增加 40 倍,變成 80;但如果你的能力只有 1,那么它只會(huì)增加 40。** 你的基礎(chǔ)能力在使用這個(gè)工具時(shí)會(huì)被放大。** 因此,我建議大家深入了解編程語(yǔ)言的本質(zhì)以及底層技術(shù)等知識(shí),你可能無(wú)需記住具體的字段或 main 結(jié)構(gòu),因?yàn)楝F(xiàn)在大型語(yǔ)言模型可以幫助生成。

彭靖田: 這個(gè)問(wèn)題,我從兩個(gè)角度來(lái)考慮。首先,大型模型有能力生成代碼,但最終這段代碼要能運(yùn)行才會(huì)成為有價(jià)值的交付物。因此,我們通常會(huì)將生成的代碼與開(kāi)發(fā)人員編寫的代碼進(jìn)行比較,包括代碼是否適合進(jìn)入生產(chǎn)環(huán)境。這其中的一個(gè)重要方面是 Prompt 的應(yīng)用,比如當(dāng)我們討論一段代碼是否適合在生產(chǎn)環(huán)境中使用時(shí),九要考慮我們的 Prompt 是否會(huì)檢查密碼以明文形式存儲(chǔ)。

現(xiàn)在,我們只進(jìn)行了一輪的對(duì)話和詢問(wèn),目前的輸出結(jié)果已經(jīng)足夠好,開(kāi)發(fā)人員能提供這樣的代碼也相當(dāng)不錯(cuò)了。但這段代碼要投入生產(chǎn)環(huán)境,通常第一反應(yīng)可能是是否需要一個(gè)配置管理器或?qū)⑴渲帽4鏋?YAML 文件?例如在端口號(hào)和配置項(xiàng)中出現(xiàn)的用戶名和密碼,生成的代碼將密碼作為明文字符串放置在代碼文件中,這不是一個(gè)很好的做法。這個(gè)問(wèn)題也在于在初始需求中沒(méi)有給大語(yǔ)言模型足夠詳細(xì)的信息,但通過(guò)進(jìn)行多輪對(duì)話,大型模型可以更好地解決。

關(guān)于一個(gè)優(yōu)秀的大型模型或使用大型模型生成良好代碼的最佳實(shí)踐,我認(rèn)為有兩個(gè)關(guān)鍵點(diǎn)需要注意。第一是描述清楚需求細(xì)節(jié),甚至可以將自己視為一名架構(gòu)師,將大模型想象為擁有不同背景(例如前端、后端腳本等)的員工,作為架構(gòu)師的你應(yīng)該如何提出需求?第二是要多輪問(wèn)詢、逐步完善。我做過(guò)一個(gè)小實(shí)驗(yàn),使用 GPT-4 完整地生成了一個(gè)開(kāi)源項(xiàng)目,目標(biāo)是進(jìn)行完整的雙語(yǔ)電子書(shū)翻譯。這個(gè)項(xiàng)目的整體代碼庫(kù)可能有幾千行,完全是由 GPT-4 生成的,但是經(jīng)過(guò)了許多輪的對(duì)話。

站在架構(gòu)師的角度,最初的問(wèn)題可能不是具體的 100 行代碼程序,而是讓大模型理解你如何設(shè)計(jì)這段代碼,例如需要分成哪幾個(gè)模塊、數(shù)據(jù)庫(kù)密碼檢查是否只需要一個(gè)簡(jiǎn)單的函數(shù)就夠了等,所有這些都可以通過(guò)架構(gòu)設(shè)計(jì)來(lái)完成??傊?,多輪對(duì)話、逐步完善并將自己視為架構(gòu)師,用這種自上而下的設(shè)計(jì)讓中間節(jié)點(diǎn)和葉子節(jié)點(diǎn)的代碼變得更加友好。

鄧明軒: 我完全同意彭老師提到的觀點(diǎn)。作為開(kāi)發(fā)者,我們應(yīng)該將自己視為架構(gòu)師來(lái)思考這個(gè)問(wèn)題。對(duì)于這些編程工具、AI 工具,我們可以稱之為 Copilot,輔助駕駛而非主駕駛。因此,我們真正使用的時(shí)候,不能期望只描述一個(gè)需求就可以迅速完成一個(gè)完整的軟件。相反,它為我們提供了代碼塊,我們有責(zé)任將這些組織起來(lái),包括項(xiàng)目的工程時(shí)間規(guī)劃、項(xiàng)目管理等,只有通過(guò)自己的思考,我們才能更好地利用這個(gè)“副駕駛”。我們不能把方向盤交給它,讓它代替我們駕駛,這是不合適的做法。

另外,彭老師提到我們的任務(wù)是檢查安全性,而在生成的代碼中又涉及密碼等敏感信息,這引發(fā)了一個(gè)問(wèn)題:當(dāng)前的語(yǔ)言模型是基于 Transformer 架構(gòu)的,而且大多數(shù)情況下是盲目生成的,它缺乏自省能力,如果直接向它提問(wèn),它會(huì)按照神經(jīng)網(wǎng)絡(luò)的方式逐字生成結(jié)果。因此,我們需要進(jìn)行多輪對(duì)話。也就是說(shuō),當(dāng)我向它提問(wèn)并生成了一段文本后,我可以將這段文本反饋給它,詢問(wèn)是否符合要求或者提出其他的要求。這些都是與大型語(yǔ)言模型進(jìn)行互動(dòng)的良好實(shí)踐。

Michael Yuan: 我很大程度上同意兩位老師的觀點(diǎn),這里只提出一點(diǎn):當(dāng)運(yùn)行一個(gè) Python 腳本時(shí),很可能是在本地環(huán)境下進(jìn)行分析,在這種情況下,使用明文密碼可能并不是一個(gè)問(wèn)題。

那么,這就涉及到 Prompt 工程師在做什么的問(wèn)題。Prompt 工程師是否會(huì)最終消失?我覺(jué)得不太可能,因?yàn)?Prompt 工程師是在應(yīng)對(duì)需求并解決需求,就和人與人之間的對(duì)話一樣,需要經(jīng)過(guò)多輪交流。

現(xiàn)在,我們公司里大約一半的開(kāi)發(fā)者都在使用 Copilot,每個(gè)人每月支付大約 10 美元,因?yàn)橛幸恍┏绦騿T非常依賴 Copilot。他們之前是這樣使用 Copilot 的:描述一個(gè)算法,然后讓它生成相應(yīng)的代碼,而并不是像今天這個(gè)案例一樣,已經(jīng)將業(yè)務(wù)需求分割好后再描述一個(gè)具體場(chǎng)景。比如我需要對(duì)一個(gè)向量進(jìn)行排序,這都是已知的算法,但我懶得找,所以讓 Copilot 來(lái)幫忙,我寫一個(gè)簡(jiǎn)短的提示,然后讓它生成代碼。這就是 Copilot 和 GPT-3 時(shí)代生成代碼的方法。

今天,我們生成代碼需要進(jìn)行多輪對(duì)話。ChatGPT 令人驚訝的地方在于能夠跟隨對(duì)話,我們可以繼續(xù)提問(wèn),可以在對(duì)話中指代之前提到的內(nèi)容,而它也能理解我在指代什么。當(dāng)我提供描述并生成代碼后,可以運(yùn)行該代碼并將結(jié)果反饋給它,告訴它哪里出錯(cuò)了,然后它可以繼續(xù)生成下一輪代碼,通過(guò)多次迭代,生成的代碼會(huì)越來(lái)越符合預(yù)期。

我認(rèn)識(shí)一個(gè) CTO,他有大約 10 年沒(méi)有寫過(guò)代碼了,最近他想要?jiǎng)?chuàng)建一個(gè) Discord 機(jī)器人,但對(duì)于如何使用 Python 處理他并不熟悉。于是,他向 ChatGPT 描述了想要實(shí)現(xiàn)的功能,然后 ChatGPT 生成了一段代碼。初次生成的代碼并不能正常工作,他就將錯(cuò)誤信息反饋給了模型,然后重新生成了一段代碼。經(jīng)過(guò)幾輪的交互,他花了大約半天的時(shí)間在一個(gè)不熟悉的領(lǐng)域中生成了大致能夠運(yùn)行的代碼。我覺(jué)得這展示了 ChatGPT 的能力,盡管并不能完全理解需求,但通過(guò)不斷交互就能夠逐漸實(shí)現(xiàn)想要的結(jié)果。

這并不是說(shuō)只需簡(jiǎn)單的描述,大語(yǔ)言模型就能完全理解。實(shí)際上很多時(shí)候,我們自己都并不清楚究竟想要什么,我們可能需要先看到一些代碼,然后逐漸明確自己的需求。這個(gè)過(guò)程可能需要花費(fèi)相當(dāng)長(zhǎng)的時(shí)間。盡管如此,我仍然覺(jué)得這是一項(xiàng)令人印象深刻的技術(shù)。

這也給編程工具的用戶界面帶來(lái)了很大的挑戰(zhàn)。Copilot 的使用非常簡(jiǎn)單,你只需在其中編寫注釋,然后讓它將注釋轉(zhuǎn)化為相應(yīng)的代碼。這是一次性的代碼生成過(guò)程,然而要實(shí)現(xiàn)更復(fù)雜的功能,就需要一個(gè)能夠支持對(duì)話的用戶界面了。

生成代碼的質(zhì)量與安全問(wèn)題
吳少杰:AI 生成代碼的質(zhì)量高低與哪些因素有關(guān)?如何消除 AI 生成代存在的安全隱患?

鄧明軒: 這里涉及兩個(gè)問(wèn)題:質(zhì)量和安全性。質(zhì)量與我們對(duì) Prompt 工程的學(xué)習(xí)和掌握有關(guān)。而安全性則有兩個(gè)方面需要考慮:首先是工具本身提供的安全輔助功能,另一方面是作為代碼使用者,我們?nèi)绾慰紤]安全問(wèn)題。

我想提一下亞馬遜云科技推出的 Code Whisperer 工具,它實(shí)際上對(duì)代碼的安全性進(jìn)行了檢查和提示。當(dāng)然,盡管可以使用工具來(lái)輔助我們更好、更快速地發(fā)現(xiàn)安全問(wèn)題,但我們?nèi)匀恍枰獙?duì)項(xiàng)目的代碼負(fù)責(zé)。例如,我們需要考慮是否可能泄露敏感信息或者代碼是否可能被錯(cuò)誤使用,尤其是在涉及對(duì)外服務(wù)的方面,我們還需要考慮這些服務(wù)是否會(huì)對(duì)其他系統(tǒng)造成重大損害。

大型語(yǔ)言模型的多輪對(duì)話會(huì)受限于容量,可能只有幾十 KB,因此檔面對(duì)復(fù)雜的項(xiàng)目,或者一個(gè)由 10 人或 20 人組成的團(tuán)隊(duì)時(shí),其容量可能遠(yuǎn)遠(yuǎn)不夠。此外,還有整個(gè)軟件環(huán)境,包括軟件設(shè)計(jì)和需求描述等方方面面的考慮。因此,作為程序員,我們需要對(duì)這個(gè)領(lǐng)域有全面了解,從頭到尾清楚了解相關(guān)結(jié)構(gòu)。在這種情況下,我們會(huì)將其中的細(xì)微問(wèn)題拆分出來(lái),與大型語(yǔ)言模型進(jìn)行交互,一定程度上避免由于容量限制而無(wú)法處理復(fù)雜的邏輯跟蹤。當(dāng)然,這也涉及到安全性的問(wèn)題。

回到質(zhì)量問(wèn)題,我認(rèn)為質(zhì)量同樣是程序員的責(zé)任。在這方面,工具也對(duì)我們提出了一些要求,如果你的代碼質(zhì)量較高,那它將更容易理解,生成代碼的可用性也會(huì)更高。最終代碼質(zhì)量的責(zé)任仍然在于代碼的擁有者,也就是我們自己,我們需要真正對(duì)此負(fù)責(zé)。

Michael Yuan: 對(duì)于代碼質(zhì)量,有一些簡(jiǎn)單的方法可以采用,例如將代碼與編譯器進(jìn)行鏈接,使生成的代碼立即進(jìn)行自動(dòng)編譯,并通過(guò)編譯器提供的錯(cuò)誤信息進(jìn)行修復(fù)。此外,還可以與數(shù)據(jù)庫(kù)等工具結(jié)合使用,自動(dòng)掃描檢測(cè)常見(jiàn)的問(wèn)題。所以,代碼質(zhì)量并不是一個(gè)無(wú)法解決的科學(xué)問(wèn)題,而是一個(gè)工程問(wèn)題,我們可以通過(guò)各種工具的結(jié)合來(lái)不斷接近最優(yōu)解。

不過(guò),目前對(duì)代碼質(zhì)量的控制問(wèn)題可能會(huì)有一些爭(zhēng)議。目前,從個(gè)人角度來(lái)評(píng)判代碼質(zhì)量的一個(gè)重要標(biāo)準(zhǔn)是可擴(kuò)展性,也就是代碼編寫后是否容易修改。然而,現(xiàn)在有一些流派認(rèn)為,未來(lái)尤其是對(duì)于前端框架而言,這種代碼質(zhì)量可能并不重要。

可以設(shè)想一個(gè)未來(lái)的場(chǎng)景,整個(gè)應(yīng)用程序都是由大型模型生成的,不存在需要人為修改的問(wèn)題,如果需求發(fā)生變化,只需重新生成代碼即可。某些場(chǎng)景下,每次生成的代碼都只使用一次,不存在擴(kuò)展代碼的問(wèn)題。當(dāng)然,現(xiàn)在可能還無(wú)法實(shí)現(xiàn)這一點(diǎn),但這是一個(gè)可能出現(xiàn)的未來(lái),如果成為現(xiàn)實(shí),那么會(huì)對(duì)代碼質(zhì)量的評(píng)價(jià)產(chǎn)生重大影響。因此,我認(rèn)為在架構(gòu)上編寫可擴(kuò)展且優(yōu)雅的代碼并不重要,至少在某些場(chǎng)景中不重要。

我們?cè)僬務(wù)劦诙c(diǎn),即安全問(wèn)題。我認(rèn)為,人類編寫的代碼在某種程度上也是相對(duì)安全的,否則就不會(huì)存在那么多問(wèn)題,也不會(huì)有像 Rust 這樣的語(yǔ)言出現(xiàn)。對(duì)于安全問(wèn)題的解決,人們?cè)诰帉懘a時(shí)已經(jīng)用了很多工具,例如 Rust 通過(guò)編譯器解決內(nèi)存安全問(wèn)題、Java 通過(guò)運(yùn)行時(shí)方法解決內(nèi)存安全問(wèn)題等。

多輪對(duì)話的有趣之處在于,生成的代碼可以通過(guò)工具運(yùn)行,然后將工具的結(jié)果反饋給模型,然后模型做進(jìn)一步優(yōu)化,這個(gè)過(guò)程可能比人類做得更好。

彭靖田: 我最后補(bǔ)充一個(gè)我個(gè)人非常認(rèn)同的觀點(diǎn),即關(guān)于“我們今天應(yīng)該如何解決 AI 生成代碼的安全隱患?”這個(gè)問(wèn)題沒(méi)有太多可討論的,因?yàn)檫@與 AIGC 無(wú)關(guān),代碼就是代碼,無(wú)論是誰(shuí)生成的都存在安全隱患,所以我不想討論這個(gè)問(wèn)題。

我更關(guān)注生成代碼的質(zhì)量高低,也就是 AI 生成代碼的問(wèn)題。目前,有兩種對(duì)此完全不同的觀點(diǎn)。有一類觀點(diǎn)認(rèn)為,每個(gè)人都應(yīng)該開(kāi)發(fā)自己的大模型,因此出現(xiàn)了很多專注于大模型的創(chuàng)業(yè)公司。然而訓(xùn)練語(yǔ)料庫(kù)是有限的,在 OpenAI 和其他國(guó)外大廠已經(jīng)做了很多投入的情況下,是否值得從零開(kāi)始開(kāi)發(fā)一個(gè)大模型還需要探討。我們需要知道的是,一些大模型并沒(méi)有特別針對(duì)編寫代碼這一任務(wù)進(jìn)行增強(qiáng),特別是當(dāng)我們要在生產(chǎn)環(huán)境中將其作為生產(chǎn)力工具替代選擇時(shí)。

我們招聘一個(gè)研發(fā)工程師時(shí)為什么要寫招聘要求?為什么要對(duì)研發(fā)工程師進(jìn)行分類?因?yàn)樗麄兓撕芏鄷r(shí)間進(jìn)行自我訓(xùn)練,他們的訓(xùn)練來(lái)自各種類型的教程、框架手冊(cè)、項(xiàng)目實(shí)踐等。如果你的公司有自己的代碼庫(kù),可能沒(méi)有開(kāi)源,或者你正在進(jìn)行一個(gè)特定領(lǐng)域的項(xiàng)目,有許多開(kāi)源框架和基礎(chǔ)項(xiàng)目代碼,那么是否應(yīng)該進(jìn)行 fine-tuning(微調(diào))?是否可以提升模型的權(quán)重,使通過(guò) fine-tuning 得到的模型能夠更好地解決代碼生成問(wèn)題,而不是從零開(kāi)始開(kāi)發(fā)一個(gè)模型?我認(rèn)為這可能是一個(gè)可以考慮的方向。

關(guān)于 AI 輔助編程工具的使用建議
吳少杰:三位老師平時(shí)會(huì) AI 輔助編程工具來(lái)做些什么?是否可以提供一些使用建議?

Michael Yuan: 我們團(tuán)隊(duì)主要使用 Copilot 來(lái)生成代碼,因?yàn)樗c GitHub 的 IDE 結(jié)合非常緊密,我認(rèn)為這一點(diǎn)非常重要。如果你要在其他地方使用它,你就需要打開(kāi)另一個(gè)用戶界面(UI),這將增加工作量。然而,剛才提到的多輪對(duì)話生成應(yīng)用并且使用人工工具進(jìn)行檢查,這是一個(gè)很好的方向。比如,我可以將它集成到問(wèn)題跟蹤(Issues)或討論(Discussion)中。

關(guān)于代碼質(zhì)量本身,有很多工具可供選擇。今天代碼中的許多問(wèn)題都源自所謂的供應(yīng)鏈問(wèn)題,這意味著你依賴于其他人的代碼,如果其他人的代碼出了問(wèn)題,你的代碼就會(huì)受到影響。另外,復(fù)制、粘貼的代碼可能會(huì)在大型模型中帶來(lái)更多問(wèn)題。這段代碼可能不是在 NPM 或 Cargo 的包管理器中引入的,而是來(lái)自 Apache 或其他許可證的,如果出了問(wèn)題或者上游進(jìn)行了修復(fù),開(kāi)發(fā)者可能并不知道,這種情況下就需要更深層次的代碼檢查器。

在 AIGC 中,這種代碼檢查器也特別有用,其實(shí)就是用同一個(gè)工具解決可以兩個(gè)問(wèn)題:一個(gè)是解決代碼來(lái)源和許可證不兼容的問(wèn)題;另一個(gè)是,如果上游代碼出了問(wèn)題,有工具可以跟蹤并通知開(kāi)發(fā)者,然后對(duì)下游代碼進(jìn)行相應(yīng)的更改。

當(dāng)然在編寫代碼后的測(cè)試是必不可少的。我們?cè)谟玫?Rust 有很多工具選擇,如快速測(cè)試(fast testing)。實(shí)際上,快速測(cè)試也是一種機(jī)器學(xué)習(xí)方法,它不斷測(cè)試輸入和輸出邊界,然后看代碼是否出錯(cuò)。在這方面,我認(rèn)為大型開(kāi)源項(xiàng)目會(huì)提供這種專門的服務(wù)。我們的項(xiàng)目為什么加入 CNCF,主要是因?yàn)?CNCF 與 Google 合作提供了這樣的服務(wù)。但這需要大量的機(jī)器時(shí)間不斷地進(jìn)行編譯和測(cè)試。

另外,每個(gè)項(xiàng)目的情況可能都不一樣。我們使用的是 Rust,因此我們有一套特定類型的工具。而對(duì)于使用 Python 的項(xiàng)目,可能要用其他不同的工具,因?yàn)樗鼪](méi)有內(nèi)存安全的問(wèn)題,但有其他要解決的問(wèn)題。

彭靖田: 我覺(jué)得目前最好用的工具還是 AI 輔助編程工具本身。大部分工作仍然是基于大模型進(jìn)行的,開(kāi)發(fā)框架的遷移還不夠成熟。

我認(rèn)為從安全的角度考慮是非常重要的。比如,對(duì)于我們要與 Autodesk 工業(yè)設(shè)計(jì)軟件(如 AuthCD 和 Rivet)競(jìng)爭(zhēng)開(kāi)發(fā)的 SaaS 產(chǎn)品,如果接入 AI 生成的代碼,需要如何處理呢?實(shí)際上,傳統(tǒng)的軟件工程方法仍然非常有用。軟件工程告訴我們需要進(jìn)行環(huán)境劃分、編寫良好的測(cè)試用例、采用不同的測(cè)試方法,并在各個(gè)環(huán)境中有測(cè)試人員關(guān)注一些邊界情況和使用場(chǎng)景。

舉個(gè)例子,我們有個(gè)環(huán)節(jié)是將用戶上傳的 CAD 圖紙通過(guò)計(jì)算機(jī)視覺(jué)和深度學(xué)習(xí)算法轉(zhuǎn)換為三維模型。但建筑設(shè)計(jì)師繪制的 CAD 圖紙也存在很多問(wèn)題,他們沒(méi)有編譯器,也沒(méi)有測(cè)試環(huán)境,只能依靠施工現(xiàn)場(chǎng)的人逐個(gè)解決。這其中有兩類測(cè)試問(wèn)題:一種是代碼確實(shí)存在問(wèn)題,這類問(wèn)題可以通過(guò)軟件工程的方法解決;還有一類問(wèn)題更偏向于算法和領(lǐng)域場(chǎng)景,即輸入數(shù)據(jù)本身就不夠健壯和穩(wěn)定,這種設(shè)計(jì)上的問(wèn)題需要進(jìn)行降級(jí)處理,捕捉異常。

鄧明軒: 現(xiàn)在的大語(yǔ)言模型在架構(gòu)上有多種路線,但是現(xiàn)在有一種觀點(diǎn)認(rèn)為,模型的架構(gòu)本身并不重要,只要我們有充足的連接,即非線性的連接,并提供足夠多的數(shù)據(jù)給模型進(jìn)行訓(xùn)練,它就能夠產(chǎn)生很好的效果。因?yàn)檫@些模型內(nèi)嵌了大量人類知識(shí),盡管不是全部但可以通過(guò)使用足夠大的模型將文本輸入其中,進(jìn)而實(shí)現(xiàn)預(yù)期的效果。因此我個(gè)人認(rèn)為,底層的算法結(jié)構(gòu)可能并不會(huì)對(duì)上層的應(yīng)用產(chǎn)生太大影響。

關(guān)于代碼質(zhì)量檢查工具的使用,我同意兩位老師提到的觀點(diǎn),即最好的評(píng)估方法就是運(yùn)行它。現(xiàn)在普遍使用的是解釋型語(yǔ)言和編譯型語(yǔ)言。在這種情況下,解釋型語(yǔ)言具有一定的優(yōu)勢(shì),因?yàn)榭梢灾苯訉⑸傻拇a輸入語(yǔ)言環(huán)境中進(jìn)行解釋和運(yùn)行,捕捉可能的錯(cuò)誤,然后返回給大語(yǔ)言模型。對(duì)于編譯型語(yǔ)言如 Rust,需要設(shè)置額外的運(yùn)行時(shí)環(huán)境來(lái)進(jìn)行編譯和運(yùn)行??傊?,對(duì)于代碼質(zhì)量來(lái)說(shuō),“無(wú)論是白貓還是黑貓”,只要能夠滿足需求就是好的。

此外,現(xiàn)在許多與大語(yǔ)言模型相關(guān)的接口使用的都是 Python,在神經(jīng)網(wǎng)絡(luò)和機(jī)器學(xué)習(xí)領(lǐng)域,Python 是主流語(yǔ)言之一,具有動(dòng)態(tài)解析和良好的語(yǔ)言支持。我認(rèn)為,未來(lái)可能會(huì)進(jìn)一步推動(dòng) Python 的發(fā)展,比如在大語(yǔ)言模型中生成一段代碼后,直接在 Python 的運(yùn)行環(huán)境中進(jìn)行評(píng)估和調(diào)試,然后返回結(jié)果給大語(yǔ)言模型。

現(xiàn)在有許多與語(yǔ)言相關(guān)的 LangChain 或其他外圍框架,這可能是未來(lái)的發(fā)展方向之一。通過(guò)額外的框架配合,可以在語(yǔ)言的運(yùn)行環(huán)境中進(jìn)行多輪對(duì)話,自動(dòng)檢查代碼質(zhì)量,無(wú)需人工干預(yù),我們只需要描述要完成的任務(wù),然后讓系統(tǒng)開(kāi)始運(yùn)行即可。如果出現(xiàn)錯(cuò)誤,系統(tǒng)會(huì)自動(dòng)進(jìn)行修改,并再次運(yùn)行。

關(guān)于代碼安全性,實(shí)際上在我了解 CodeWhisper 時(shí),也思考過(guò)版權(quán)問(wèn)題。我們使用大語(yǔ)言模型生成的代碼,但對(duì)于它的版權(quán)關(guān)系并不確定,比如它使用了什么開(kāi)源許可證,如果你的代碼在結(jié)構(gòu)上與某個(gè)開(kāi)源許可證中的代碼完全一致,那根據(jù)過(guò)去的案例,你可能會(huì)被訴訟。這對(duì)于使用這些工具的程序員來(lái)說(shuō)是一個(gè)挑戰(zhàn)。

零基礎(chǔ)如何使用 AIGC 工具
吳少杰:這里有個(gè)觀眾問(wèn)題道,“零基礎(chǔ)學(xué)員如何使用好這些工具,需要提升哪些點(diǎn)?比如大模型給出幾段代碼,但是我卻不懂,很好的調(diào)試可以達(dá)到執(zhí)行?!?

鄧明軒: 如果是零基礎(chǔ),那么了解一些編程概念是有必要的。如果有一些基礎(chǔ),只是不夠深的話,那與大語(yǔ)言模型進(jìn)行互動(dòng)是一個(gè)不錯(cuò)的方法。

可以從簡(jiǎn)單的例子開(kāi)始,比如我們之前寫代碼時(shí)常用的“Hello World”?,F(xiàn)在你可以要求模型給你一個(gè) Rust 版本的“Hello World”,雖然可能一開(kāi)始看不懂,但可以直接運(yùn)行這段代碼,如果出現(xiàn)錯(cuò)誤了就把錯(cuò)誤信息反饋給模型,詢問(wèn)出了什么問(wèn)題,這樣的交互循環(huán)可以讓你快速學(xué)習(xí)新技術(shù)。另外,還可以選擇一段代碼并要求模型解釋它是做什么的。然后進(jìn)一步問(wèn),比如要在其中添加一個(gè)循環(huán)或者一個(gè)條件分支該如何實(shí)現(xiàn)?總之,你可以慢慢學(xué)習(xí),逐漸形成對(duì)編程的基本理解,關(guān)注在代碼的運(yùn)行邏輯上,而不是語(yǔ)法結(jié)構(gòu)。

每種語(yǔ)言都不同,你并不需要詳細(xì)研究每種語(yǔ)言的具體細(xì)節(jié),只需要理解基本的概念,例如循環(huán)、分支,包括遞歸以及更復(fù)雜的數(shù)據(jù)結(jié)構(gòu)等。關(guān)鍵時(shí)通過(guò)交互的方式逐步構(gòu)建這些概念。我認(rèn)為,有了這些工具之后,學(xué)習(xí)編程會(huì)更快速,而不是有些人擔(dān)心的那樣“程序員會(huì)失業(yè),不需要學(xué)習(xí)了”,這實(shí)際上降低了編程和與計(jì)算機(jī)對(duì)話的門檻。

Michael Yuan: “有了更好的工具后,程序員就要失業(yè)了?!边@種話我聽(tīng)了二十多年了。我還記得過(guò)去有種說(shuō)法,“大家都不要學(xué)計(jì)算機(jī)了,因?yàn)槎家《热巳プ隽耍銈儧](méi)有機(jī)會(huì)了。”但事實(shí)證明并非如此。我對(duì)大語(yǔ)言模型的理解是,它是程序員的工具,程序員會(huì)用它來(lái)輔助其他人工作,這就是我不同意 OpenAI 那篇報(bào)告的原因。

OpenAI 的報(bào)告聲稱洗碗和刷房子不會(huì)失業(yè),但實(shí)際上洗碗也會(huì)失業(yè),因?yàn)槌绦騿T會(huì)有更多的時(shí)間開(kāi)發(fā)出洗碗機(jī)器人,取代所有洗碗的人,所以程序員也是可以卷走其他人工作的。大模型可以大幅提高程序員的能力,有了大模型后可以很快地學(xué)習(xí)和理解。

回到之前的問(wèn)題,之前計(jì)算機(jī)科學(xué)的書(shū)籍和教育對(duì)我們有很大的影響,我自己也寫過(guò)幾本書(shū),寫書(shū)的時(shí)候通常會(huì)從背景開(kāi)始、介紹概念開(kāi)始。有些語(yǔ)言容易有些就難,有些語(yǔ)言概念非常多,比如 Rust 概念很多,學(xué)習(xí)起來(lái)比較困難。但使用大模型后,它可以解釋很多東西,還可以完全根據(jù)你的學(xué)習(xí)需求進(jìn)行定制。

為什么很多人的編程學(xué)得不好?因?yàn)榫幊滩皇且环N立竿見(jiàn)影的事情,你需要從一些沒(méi)有意義的事情開(kāi)始做起,比如寫一個(gè)“Hello World”能有什么用?它解決不了實(shí)際問(wèn)題。但就像我之前提到的,有了大模型后,我朋友花了半天時(shí)間寫了一個(gè) Discord 機(jī)器人,你也可以輕松地寫出類似的東西。你可能并不完全理解為什么這樣寫,但你可以逐步改進(jìn),通過(guò)自己的努力學(xué)習(xí)快速掌握它的用法。

鄧明軒: 我當(dāng)年學(xué)習(xí)編程語(yǔ)言的時(shí)候,買了一本書(shū),還要去機(jī)房上課,然后我們敲了一些代碼卻出現(xiàn)了錯(cuò)誤,我們不知道什么意思,老師也不懂,甚至?xí)弦矝](méi)有解釋。我們只能自己摸索和嘗試。在那個(gè)年代,學(xué)習(xí)計(jì)算機(jī)編程是非常困難的。我不知道提問(wèn)的觀眾是多大年紀(jì),可能年齡較小。你們非常幸運(yùn),生活在這個(gè)時(shí)代,有機(jī)會(huì)接觸到不斷發(fā)展和提升的技術(shù)。我鼓勵(lì)你們充分利用這項(xiàng)技術(shù),因?yàn)槲磥?lái)可能會(huì)有各種驚人的可能性出現(xiàn)。

彭靖田: 之前,我將評(píng)估一個(gè)優(yōu)秀開(kāi)發(fā)者技能的維度分為四個(gè)部分:首先,編程和調(diào)試技能,也就是實(shí)際操作的能力,占比 40%;其次,項(xiàng)目管理和協(xié)作能力,占據(jù) 30% 的權(quán)重,這意味著作為一個(gè)獨(dú)立的開(kāi)發(fā)者,你能夠交付代碼,并且能夠與團(tuán)隊(duì)、需求方、測(cè)試方以及其他開(kāi)發(fā)團(tuán)隊(duì)成員進(jìn)行協(xié)作;接下來(lái),算法和數(shù)據(jù)結(jié)構(gòu),占據(jù) 20% 的權(quán)重。計(jì)算機(jī)科學(xué)專業(yè)的人可能對(duì)數(shù)據(jù)結(jié)構(gòu)和算法會(huì)有更深入的理解;最后的 10% 留給軟件工程經(jīng)驗(yàn),也就是在實(shí)踐中積累的最佳實(shí)踐經(jīng)驗(yàn)以及對(duì)優(yōu)秀軟件工程師的觀察和學(xué)習(xí)。

但是現(xiàn)在,我有了不同的看法。關(guān)于那 40% 的技能,我會(huì)進(jìn)一步抽象為大模型的應(yīng)用實(shí)戰(zhàn)能力。這意味著你有更多的最佳實(shí)踐,而不是僅僅學(xué)習(xí)某種編程語(yǔ)言,浪費(fèi)大量時(shí)間和精力去學(xué)習(xí)每一個(gè)知識(shí)點(diǎn)。正如這位提問(wèn)者提到,前后學(xué)了 QBasic、Basic、Java、C++、Python、Go 和 Java 的派生版本等多種編程語(yǔ)言,這些語(yǔ)言都介紹了基本的數(shù)據(jù)類型,這可能會(huì)帶來(lái)一些困擾和混亂。但實(shí)際上,數(shù)據(jù)類型并不是很重要。

一個(gè)沒(méi)有學(xué)習(xí)過(guò)編程語(yǔ)言的人應(yīng)該如何做?以前我們會(huì)從基礎(chǔ)語(yǔ)法開(kāi)始學(xué)起,但現(xiàn)在語(yǔ)法并不那么重要了,重要的是對(duì)編程語(yǔ)言的理解。比如理解編譯型語(yǔ)言和解釋型語(yǔ)言的區(qū)別,為什么自 Python 3 以來(lái)一直在強(qiáng)調(diào)類型標(biāo)注?為什么一個(gè)本來(lái)應(yīng)該非常靈活的語(yǔ)言現(xiàn)在越來(lái)越強(qiáng)調(diào)類型,并且推出了許多相關(guān)庫(kù)?事實(shí)上,這就是所謂的 Prompt 實(shí)際上變成了與英語(yǔ)一樣重要的語(yǔ)言技能。

還有 20% 我留給了人機(jī)和團(tuán)隊(duì)協(xié)作?,F(xiàn)在我們可以與人工智能和大型模型進(jìn)行協(xié)作,它們不會(huì)抱怨、不會(huì)說(shuō)我們蠢,也不會(huì)在背后說(shuō)壞話。如果你無(wú)法與這樣的一個(gè)合作伙伴進(jìn)行有效協(xié)作,那肯定是你自己的問(wèn)題。

這些工具還有哪些問(wèn)題
吳少杰:現(xiàn)在的輔助編程工具還存在哪些問(wèn)題?提供廠商需要做哪些改進(jìn)才能更好滿足程序員的需要?

鄧明軒: 目前工具的交互模式和發(fā)展都處于不斷演進(jìn)的過(guò)程中,還有很多空間可以探索。近一年來(lái),我們經(jīng)歷了一個(gè)技術(shù)爆炸,整個(gè)行業(yè)也在思考這些工具應(yīng)該具備怎樣的形態(tài)。因此,過(guò)多地關(guān)注當(dāng)前工具的局限性可能并不是非常有益。也許三五年后回頭來(lái)看,我們會(huì)發(fā)現(xiàn)現(xiàn)在的情況非常有意思。

不同的廠商推出了自己的工具,但他們并不是要將這些工具作為盈利手段,而是通過(guò)這些新的交互模式將用戶引入到某個(gè)平臺(tái)上。對(duì)于如何將這種能力更多地?cái)U(kuò)展到用戶手中,大家應(yīng)該有相對(duì)一致的想法。我個(gè)人的體驗(yàn)是,我真的很希望有一個(gè)像《鋼鐵俠》中的賈維斯那樣的助手,我可以用自然語(yǔ)言與他進(jìn)行溝通,他能理解并幫助我完成許多任務(wù)。這種輔助性工具確實(shí)是我非常期待的東西。

Michael Yuan:我覺(jué)得投資人可能更加焦慮,因?yàn)樗麄兛赡軙?huì)發(fā)現(xiàn)某個(gè)工具很好,但過(guò)幾天就被 OpenAI 或其他公司干掉了,甚至有些簡(jiǎn)單的工具已經(jīng)被別人復(fù)制了。目前工具方面有很多創(chuàng)新。例如 OpenAI 最近發(fā)布的 Function Core 可以直接從大模型生成數(shù)據(jù)結(jié)構(gòu),然后與核心函數(shù)結(jié)合。

工具創(chuàng)新的領(lǐng)域很多,甚至比底層大模型的創(chuàng)新和迭代速度都要快。為什么會(huì)這樣呢?因?yàn)榈讓哟竽P托枰馁M(fèi)大量資金和時(shí)間進(jìn)行訓(xùn)練,而現(xiàn)在正是一個(gè)百花齊放的時(shí)代,有大量不同的想法和方向。對(duì)我們來(lái)說(shuō),一個(gè)特別有用的工具是如何讓多輪對(duì)話生成代碼的界面更加友好,能夠吸引更多人參與。以前的研發(fā)管理工具中并沒(méi)有考慮到這一點(diǎn)。

吳少杰:三位老師觀察,周圍使用 AI 工具來(lái)生成代碼的人多還是不用的比較多?各自團(tuán)隊(duì)的研發(fā)效率大概能提多少?20% 還是 30%?

Michael Yuan: 實(shí)際上我們有自己的數(shù)據(jù),但我認(rèn)為還不足以進(jìn)行直接比較。Twitter 上有很多比較。實(shí)際上,一些經(jīng)驗(yàn)豐富的人更不愿意使用 AIGC,因?yàn)樗麄冋J(rèn)為自己可以寫得比 AIGC 更好。而那些比較初級(jí)的或者經(jīng)驗(yàn)較少的程序員愿意使用 AIGC,他們代碼編寫速度和完成度要比那些資深程序員高得多,這不是兩倍的差距,而是幾十倍的差距。當(dāng)然,也可以說(shuō)經(jīng)驗(yàn)豐富的開(kāi)發(fā)者寫出來(lái)的代碼更容易擴(kuò)展。但是如果有了幾十倍的差距,那么下次直接重寫就好了。

鄧明軒: 我觀察到,小型初創(chuàng)公司在技術(shù)選型上會(huì)更快一些,因?yàn)樗麄兛赡芨屿`活。對(duì)于一些大型企業(yè),特別是傳統(tǒng)企業(yè),開(kāi)發(fā)部門可能比較龐大、流程也比較復(fù)雜,目前找到合適的方法將這些納入到整個(gè)軟件工程流程中仍是一個(gè)問(wèn)題,所以我認(rèn)為還需要觀察。

如果你的定位是寫一些膠水代碼或者試驗(yàn)性代碼,那可以快速適應(yīng)。另外,如果你所在的公司比較靈活,我建議大家去嘗試。如果你有一個(gè)由 5 個(gè)或 10 個(gè)人組成的團(tuán)隊(duì),并且你們的效率是巨大公司的 30~40 倍,那么你就可以與這些大型公司競(jìng)爭(zhēng)了。

當(dāng)然,對(duì)于傳統(tǒng)的大型軟件開(kāi)發(fā)公司或大型 IT 部門來(lái)說(shuō),短期內(nèi)將這些融入到開(kāi)發(fā)流程中具有挑戰(zhàn)性,大家可能還沒(méi)有完全明白該怎么做。我們可以稍微放慢一些節(jié)奏,在比如半年或一年后,再來(lái)看看如何將這些納入整個(gè)團(tuán)隊(duì)中。

彭靖田: 這是一個(gè)趨勢(shì)性的事情。拿我們團(tuán)隊(duì)來(lái)說(shuō),我們目前沒(méi)有專門的運(yùn)維人員,只有一個(gè)后端同事兼任運(yùn)維工作,如果是一個(gè)大公司就會(huì)需要一個(gè)團(tuán)隊(duì)。他需要管理華為、亞馬遜云科技以及字節(jié)的云平臺(tái),每個(gè)云平臺(tái)都有自己的 Kubernets 集群,這意味著他需要管理 7~8 個(gè)集群。一個(gè)云平臺(tái)上可能會(huì)有多個(gè)環(huán)境,而且不同環(huán)境之間的命名空間和優(yōu)先級(jí)可能也不同。七八年前剛接觸 Kubernets 時(shí),我就覺(jué)得這是一項(xiàng)非常復(fù)雜的工作,包括今天的 Kubernets 生態(tài)社區(qū)中,很多人就在做調(diào)度策略、HPA 等各種工作。

但實(shí)際上,大多數(shù)團(tuán)隊(duì)只使用了容器云的一些基礎(chǔ)功能,特別是在運(yùn)維方面,大部分工作都可以自動(dòng)化。比如 GitLab 現(xiàn)在強(qiáng)調(diào) DevSecOps。整個(gè) CI/CD 流程實(shí)際上由許多腳本組成,以前這些腳本被認(rèn)為是運(yùn)維專家的特殊技能,但實(shí)際上并沒(méi)有那么神秘,也沒(méi)有那么多技巧,大模型可以解決這些問(wèn)題。

我們那位后端同事使用了很多自動(dòng)化技術(shù),但還沒(méi)有將 GPT-4 作為日常工具,最近兩個(gè)月里他一直沒(méi)有解決一個(gè)偶發(fā)性問(wèn)題。我們一直使用較大的節(jié)點(diǎn),最小的節(jié)點(diǎn)大約都有 32 個(gè)核心和近 200GB 內(nèi)存的資源池。在這樣的一個(gè)節(jié)點(diǎn)上,我們通常部署 200-400 個(gè)應(yīng)用程序,而這些應(yīng)用程序的請(qǐng)求資源可能只占用 0.5 個(gè) CPU 核心和 2GB 內(nèi)存,但這時(shí)候,他們的請(qǐng)求已經(jīng)接近我們的資源上限。但它是一個(gè)流水線,不斷地在消耗資源,以至于有的應(yīng)用程序剛啟動(dòng),另一批應(yīng)用程序可能已經(jīng)關(guān)閉了。

這里的問(wèn)題在于,多云環(huán)境中的底層硬盤共享有一個(gè)閾值限制。當(dāng)應(yīng)用程序特別多時(shí),這個(gè)默認(rèn)閾值可能會(huì)被打破,導(dǎo)致應(yīng)用程序無(wú)法啟動(dòng)。他發(fā)現(xiàn)應(yīng)用程序無(wú)法啟動(dòng),但 CPU、內(nèi)存資源都足夠。因?yàn)槎嘣圃谔摂M化存儲(chǔ)時(shí),借用了一部分硬盤來(lái)進(jìn)行虛擬化存儲(chǔ),但實(shí)際上用不滿。他無(wú)法解決這個(gè)問(wèn)題,我獲得權(quán)限后把那個(gè)節(jié)點(diǎn)上的日志原封不動(dòng)地交給 GPT-4,它告訴我只需重啟一個(gè)命令,將閾值改為合適的值就可以了。起初,后端同事還不相信,他去 Stack Overflow 上查找,但結(jié)果各不相同。最后他按照指示執(zhí)行了命令,問(wèn)題解決了。

對(duì)我們這個(gè)同事來(lái)說(shuō),這個(gè)問(wèn)題只是一種認(rèn)知上的偏差,但提升的效率是非常顯著的。對(duì)于那些 1~3 年里都在寫 SQL 和編寫 CRUD 業(yè)務(wù)邏輯的開(kāi)發(fā)工程師來(lái)說(shuō),未來(lái)的代碼效率也會(huì)大大提升。

AIGC 對(duì)程序員的影響
吳少杰:當(dāng)大規(guī)模使用 AI 輔助編程工具時(shí),企業(yè)對(duì)程序員的要求會(huì)發(fā)生哪些變化?

鄧明軒: 我認(rèn)為,現(xiàn)在互聯(lián)網(wǎng)降本增效和技術(shù)變革可能不處在同一個(gè)趨勢(shì)上。技術(shù)變革主要受疫情和國(guó)際經(jīng)濟(jì)關(guān)系等因素的影響,個(gè)體很難改變,我們只能在這種情況下盡力發(fā)揮自己的價(jià)值,比如在降本增效的壓力下如何展現(xiàn)自己的能力。

作為個(gè)體,我們應(yīng)該如何適應(yīng)這個(gè)新環(huán)境?首先,我們需要在心態(tài)上保持開(kāi)放,接受這種新事物,迅速了解并進(jìn)行實(shí)踐。正如剛才提到的,實(shí)際上事情變得更容易了,而不是更難了。

另外,要學(xué)會(huì)學(xué)習(xí)的方法,這非常重要。未來(lái),具體編程語(yǔ)言的語(yǔ)法結(jié)構(gòu)等可能并不那么重要,重要的是如何具備良好的學(xué)習(xí)能力、快速適應(yīng)新環(huán)境。我認(rèn)為這是一項(xiàng)非常重要的技能,這次的技術(shù)變革就給我們提出了新的挑戰(zhàn)。希望大家保持積極樂(lè)觀,因?yàn)楣ぞ咭矌?lái)了很多機(jī)會(huì)。

Michael Yuan: 程序員有一個(gè)優(yōu)良傳統(tǒng),就是喜歡親自動(dòng)手去做,而不是空談。在技術(shù)領(lǐng)域,那些只會(huì)談?wù)搮s無(wú)實(shí)際行動(dòng)的人會(huì)讓人感到厭煩。大型模型特別好的一點(diǎn)就是,它們可以讓人立即動(dòng)手嘗試,我其實(shí)很喜歡這一點(diǎn)。

彭老師也講他的整個(gè)項(xiàng)目都是通過(guò) AIGC 完成的,包括項(xiàng)目的推廣和市場(chǎng)營(yíng)銷都是由模型生成的。這個(gè)過(guò)程中有很多工具可以用,一旦嘗試了這些,你就會(huì)知道這個(gè)東西的大致邊界在哪里,因此也會(huì)有正確的預(yù)期。最難的一步可能是邁出第一步。

彭靖田:企業(yè)對(duì)程序員的要求會(huì)有哪些變化?實(shí)際上,我認(rèn)為這個(gè)問(wèn)題并不是從甲方的角度提出的,因?yàn)榧追綄?duì)程序員的要求一直都是一樣的:快速、高質(zhì)量、低成本,就是要多快好省。從這個(gè)角度看,無(wú)論是程序員、開(kāi)發(fā)人員還是內(nèi)容生產(chǎn)者,作為提供服務(wù)的人,我們需要解決的問(wèn)題就是如何更快、更好地完成工作。

我們和動(dòng)物的區(qū)別在于我們懂得利用工具,而且我們的工具變得越來(lái)越巧妙、易用,我們也越來(lái)越擅長(zhǎng)改造工具,使其更適合人類的需求。從這個(gè)視角來(lái)看,我們每個(gè)人都應(yīng)該迅速擁抱這些新工具。想象一下,如果你的老板讓你打車,你會(huì)站在路上等出租車嗎?不會(huì)吧,你會(huì)使用滴滴、高德地圖、美團(tuán)打車,這個(gè)邏輯很簡(jiǎn)單明了。

嘉賓們的自我介紹:

吳少杰(特邀主持)

我之前在 58 集團(tuán)、新浪微博負(fù)責(zé)過(guò)推薦算法相關(guān)的工作,現(xiàn)在在垂直行業(yè)做智能算法,給業(yè)務(wù)賦能。

鄧明軒

我已經(jīng)從事編程工作 23 年了。我 2000 年畢業(yè),陸續(xù)加入了 IBM 和蘋果等公司。目前我在亞馬遜擔(dān)任首席架構(gòu)師。個(gè)人而言,我對(duì)編程非常感興趣。事實(shí)上,從我畢業(yè)至今的 20 多年間,我一直都在編寫代碼。盡管最近一兩年由于工作中的事務(wù)性任務(wù)增多,我編寫代碼的機(jī)會(huì)相對(duì)較少,但我仍然對(duì)此感興趣并愿意自己去寫代碼。在當(dāng)前通用人工智能大語(yǔ)言模型的發(fā)展中,我注意到它對(duì)整個(gè)編程技術(shù)產(chǎn)生了巨大影響。我很高興能夠在有生之年經(jīng)歷這一切。

彭靖田

我從中學(xué)開(kāi)始接觸編程,有大約 15 年左右的編程經(jīng)驗(yàn)了,至今我一直在編程語(yǔ)言和算法一線。2015 年,我在大三時(shí)開(kāi)始接觸創(chuàng)業(yè),跟著浙大學(xué)長(zhǎng)拿到了真格徐小平老師的天使輪融資,做了一個(gè)輔助診療的 APP,是基于 NLP 和深度學(xué)習(xí)的 AI 系統(tǒng)。從加州大學(xué)訪學(xué)結(jié)束后,我加入了華為 2012 實(shí)驗(yàn)室,從零到一參與了華為深度學(xué)習(xí)平臺(tái) ModelArts 的設(shè)計(jì)和研發(fā)工作。之后我作為技術(shù)合伙人加入了才云科技(2020 年被字節(jié)跳動(dòng)收購(gòu)后,整合為了字節(jié)火山云)?,F(xiàn)在這家公司——品覽是我的第三段創(chuàng)業(yè)經(jīng)歷,我是公司的聯(lián)合創(chuàng)始人和 CTO。我們致力于用 AIGC 賦能建筑設(shè)計(jì),彎道超車 AutoDesk 的產(chǎn)品。

除了創(chuàng)業(yè)外,我也非常喜歡開(kāi)源。從上一輪深度學(xué)習(xí)的火熱時(shí)期開(kāi)始,我在很早期參與了 Tensorflow 項(xiàng)目的開(kāi)源貢獻(xiàn),2017 年與華為兩位同事一起合作出版了國(guó)內(nèi)首本深度剖析 TensorFlow 框架的熱銷書(shū)《深入理解 TensorFlow》。在才云時(shí)期,我們與谷歌云團(tuán)隊(duì)共同發(fā)起了了一個(gè) Kubeflow 的開(kāi)源項(xiàng)目,它現(xiàn)在已經(jīng)成為 MLOps 領(lǐng)域的事實(shí)標(biāo)準(zhǔn)之一?,F(xiàn)在我積極擁抱大模型,也在極客時(shí)間開(kāi)設(shè)了《AI 大模型應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)營(yíng)》課程,歡迎訂閱和交流。

Michael Yuan

相比大家,我的編程起步比較晚,因?yàn)槲沂窃诓┦慨厴I(yè)后才正式開(kāi)始編程的。當(dāng)時(shí)找不到工作,于是決定嘗試尋找程序員的職位。我發(fā)現(xiàn)大廠不愿意雇傭沒(méi)有實(shí)際編程經(jīng)驗(yàn)的人,所以我決定從開(kāi)源項(xiàng)目入手。那是很多年前,當(dāng)時(shí) Java 剛剛在服務(wù)端起步,所以我早期參與了 JBoss 這個(gè)開(kāi)源項(xiàng)目,我們開(kāi)發(fā)了當(dāng)時(shí)也是現(xiàn)在最流行的 Java application server。后來(lái)我們將公司賣給了紅帽軟件公司。之后,我一直在開(kāi)源社區(qū)中進(jìn)行項(xiàng)目開(kāi)發(fā),也在公司工作過(guò),還做過(guò)投資人,一直與開(kāi)源社區(qū)和開(kāi)發(fā)人員保持密切聯(lián)系。期間,我出版了 5 本書(shū)。

我目前有一個(gè)開(kāi)源項(xiàng)目叫做 WasmEdge,它是 CNCF 的一個(gè)項(xiàng)目。我們主要開(kāi)發(fā) Rust 和 WebAssembly (Wasm) 在云原生與 AI 的應(yīng)用框架與運(yùn)行環(huán)境,大家可能會(huì)覺(jué)得 Rust 語(yǔ)言很受歡迎,但也有很多人認(rèn)為它很難學(xué)。我們現(xiàn)在認(rèn)為,使用大型語(yǔ)言模型來(lái)教授人們學(xué)習(xí) Rust 是一件非常有趣的事情。另外,因?yàn)槲覐氖卵邪l(fā)管理工作已經(jīng)很多年了,我發(fā)現(xiàn)使用大型語(yǔ)言模型,確實(shí)可以提高開(kāi)發(fā)效率。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
AIGC 時(shí)代,我們是走向天堂,還是地獄?
類ChatGPT新玩家「商量」入場(chǎng),商湯如何「日日新」?
學(xué)而思網(wǎng)校推出基于自研大語(yǔ)言模型的AIGC課程,好未來(lái)大模型最快月底面市
谷歌打響全面反擊戰(zhàn)!搜索重構(gòu)、新模型比肩GPT
智譜AI CEO張鵬:ChatGLM全球超過(guò)百萬(wàn)下載,為行業(yè)智能化降本增效|中國(guó)AIGC產(chǎn)業(yè)峰會(huì)
解鎖大模型智能體核心技術(shù),10行代碼輕松構(gòu)建專屬AI助手!
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服