來源| AI工作坊,管理智慧
咨詢合作| 13699120588
在當今科技界,關于人工智能是否被過度炒作的争論從未停息。然而,很少有像谷歌 DeepMind 的安全研究專家和機器學習科學家 Nicholas Carlini 這樣的專家,用親身經曆爲我們提供了一個獨特的視角。通過他的文章,我們看到了大型語言模型(LLM)在實際應用中的強大能力和多樣性。這些并非空洞的營銷宣傳,而是切實可以改變工作方式、提高生産效率、激發創意的工具。
最近,Carlini 本人親自撰寫了一篇長達萬字的文章,詳細介紹了他如何在日常生活和工作中使用 AI。這篇洞察力十足的文章不僅展示了 AI 技術的廣泛應用,更讓我們得以一窺未來科技将如何重塑我們的生活方式。
Carlini 在文章中列舉了 50 個他親身使用 AI 的實例,涵蓋了工作效率、創意寫作、編程輔助等多個方面。然而,令人驚訝的是,這 50 個例子僅僅是他所有 AI 應用場景的冰山一角 - 據他估計,不到他實際使用情況的 2%。這一變革令人震撼,它不僅體現了 AI 技術的深度和廣度,更凸顯了我們可能還未充分認識到 AI 的潛力。
事實上,Carlini 的經曆可能預示着一個更廣泛的趨勢:随着 AI 技術的不斷進步和普及,我們可能正站在一個技術革命的風口浪尖。就像個人電腦和互聯網徹底改變了我們的生活和工作方式一樣,AI 可能會成爲下一個推動社會變革的關鍵力量。
那麽,面對這樣的前景,我們應該如何看待 AI 技術的發展呢?是抱有審慎的态度,還是積極擁抱變革?
作者:DeepMind 安全研究專家和機器學習科學家Nicholas Carlini
我不認爲"人工智能"模型(我指的是大型語言模型)被過度炒作了。
确實,任何新技術都會吸引騙子。許多公司喜歡說他們在"使用人工智能",就像他們以前聲稱自己依靠"區塊鏈"一樣。(正如我們一次又一次看到的那樣)同樣,我們可能正處于一個泡沫中。互聯網在2000年泡沫破裂,但我們現在擁有的互聯網應用,曾是科幻小說中的東西。
但我認爲最近我們取得的進展不僅僅是炒作的原因是,過去一年中,我每周至少花幾個小時與各種大型語言模型互動,并且對它們解決我給出的越來越困難的任務的能力印象深刻。因此,我可以說,這些模型使我在編寫代碼方面的速度提高了至少50%,無論是研究項目還是個人的編程副業。
我在網上找到的大多數談論LLM實用性的人要麽過于樂觀,聲稱所有工作将在三年内自動化,要麽極度悲觀,認爲它們沒有任何貢獻,永遠也不會有。
所以在這篇文章中,我隻是想讓讨論更加實際。我不會對未來進行任何論斷。我隻想列出一個列表,這是我(一名研究機器學習的程序員和研究科學家)與不同的大型語言模型進行的50次對話,這些對話顯著提高了我進行研究的能力,并幫助我從事随機的編程副項目。其中包括:
使用我之前從未使用過的技術構建整個網絡應用程序。
教我如何使用各種框架,盡管我之前從未使用過它們。
将幾十個程序轉換爲C或Rust以提高10-100倍的性能。
精簡大型代碼庫,顯著簡化項目。
爲我在過去一年中撰寫的幾乎每一篇研究論文編寫初始實驗代碼。
自動化幾乎所有單調的任務或一次性腳本。
幾乎完全取代了幫助我設置和配置新軟件包或項目的網絡搜索。
在幫助我調試錯誤信息方面,網絡搜索的替代率約爲50%。
如果對這些應用實例進行分類,它們大緻可以分爲"輔助學習"和"自動化日常瑣事"兩類。前者對我來說至關重要,因爲它讓我能夠輕松應對之前覺得有難度的任務;後者同樣重要,因爲它使我能集中精力去做我最擅長的事,解決真正的難題。
關鍵是,這些例子展示的是我如何實際利用大型語言模型(LLMs)的。它們并不旨在炫耀技術的驚人能力,而是基于我解決工作需求的實際情況。這意味着,這些例子或許看起來不夠引人注目,但實際上,我日常工作的很大一部分也都是平凡無奇的,而現今可用的LLMs幾乎幫我自動化了所有這些工作。
通過這篇文章,我的目的是用一個接一個的實例,向你展示我在過去一年如何有效利用LLMs提升工作效率,直到你感到有些疲憊爲止。要知道,盡管你可能已經看過不少例子,但實際上我所展示的,還不到我利用LLMs的總數的2%。
細微差别
如果說互聯網處理得不盡如人意的是什麽,那一定是對細節的把握。我絕不認爲現今的大型語言模型(LLMs)能夠主宰世界,也不打算讨論未來的模型能做什麽,不能做什麽。我隻想探讨,現階段的模型對我是否真的有用。
你可能會問,爲什麽還需要一篇文章來證明語言模型的用途呢?這難道不是顯而易見的事實嗎?但事實上,無論是在學術界、軟件工程領域還是媒體行業,都有不少人聲稱LLMs毫無用處,隻是一時的炒作,幾年後将默默無聞,對世界沒有任何影響。我要反駁這些觀點,因爲目前的LLMs已經證明了它們的實用性。
但同時,我也需要說明,另有一批聲音同樣強烈的人士持相反觀點,他們認爲現有模型能夠取代所有程序員,人們不應再學習編程,因爲不久後大家都将面臨失業。雖然反駁這些觀點不是本文的主旨,但我必須明确,我并不支持這種極端的看法。
此外,我也不會主張"目的正當化手段",即便這些模型的訓練确實存在諸多負面影響,我不認爲應當因此而推廣使用。
我充分意識到這些模型可能帶來的負面後果,這些後果可能非常嚴重,包括但不限于散布錯誤信息、濫用、監控以及取代工作崗位(甚至有人擔憂到人類滅絕的地步)。我将在不久的将來撰寫一篇文章,深入探讨LLMs可能引發的危害,屆時會在此放上鏈接。然而,這與語言模型是否有用的讨論是兩碼事——這正是我此處想要探讨的問題。
我也清楚你可能因爲語言模型偏向于生成不準确的信息、重複已知事實、在面對複雜情況時可能徹底失敗的傾向而不願使用它們——可能我對這些局限性的了解比你更深。但本文不會讨論這些。因爲我認爲,盡管有這些不足,模型仍然是有用的。
此外,我也深知培訓這些模型所涉及的倫理問題極具争議。你可能不贊成在未經許可的情況下使用人們的數據來訓練它們(我對此的理解可能比你更深刻)。或許你關注的是那些爲直接訓練這些模型而獲得微薄報酬的人。我承認這些都是問題,但本文也不打算讨論這些。
正如我已經多次強調的:我在這裏讨論的,僅僅是這些模型在當前狀态下是否實際有用。
我的背景簡介
通常,我不是那種輕易相信任何事物的人。比如,盡管我經曆了十年前信息安全界的加密貨币熱潮,我卻從未參與撰寫任何關于區塊鏈的研究論文。我也從未擁有過任何比特币,因爲在我看來,它們除了用于賭博和欺詐之外,沒有任何實際價值。我一直持懷疑态度,每當有人向我宣稱"某項新技術将改變世界",我的反應總是冷漠。
因此,當第一次有人告訴我人工智能将極大地提升我的工作效率并改變我的日常工作方式時,我同樣持保留态度,我的回應是:"見到實際效果我才會信。"
此外,我是一名安全研究員。在過去近十年的工作中,我專注于展示人工智能模型在面對未曾訓練過的各種環境時如何徹底失敗。我證明了隻需對機器學習模型的輸入進行輕微擾動,就能使其輸出完全錯誤的結果;或者這些模型往往隻是記住了它們訓練數據中的特定案例,并在實際應用時簡單重複。我深知這些系統的種種局限。
然而,現在我卻在這裏說,我認爲當前的大型語言模型是自互聯網問世以來,給我的生産力帶來的最大提升。坦白說,如果今天要我在使用互聯網和一個最先進的語言模型之間選擇一種工具來解決工作中随機一個編程任務,我可能會選擇使用語言模型的次數超過一半。
如何利用語言模型
以下是我如何利用大型語言模型(LLMs)來提升工作效率。
你可能對我所述的使用案例不感興趣,甚至認爲它們有些荒謬。也可能這些案例與你的需求不相關,這一點我也能理解。但我隻能從個人角度出發。這些使用實例都是我在過去一年裏與LLMs的交流記錄中直接摘錄的。
1、爲我開發完整應用
去年,我創建了一個測驗,讓人們評估GPT-4在處理幾個特定任務上的表現。這個測驗非常受歡迎,獲得了超過一千萬的頁面浏覽量。你可能想不到,我幾乎是讓GPT-4爲我編寫了這個應用的全部初始版本。這一過程是通過一連串的問題進行的,我從詢問應用的基本架構開始,然後逐步擴展其功能。整個對話長達30,000字,極大地測試了當時的GPT-4模型的能力極限。如果你翻看這些對話,會發現從我描述需求并請求模型完成全部實現的信息,到我請求做出具體修改的信息(如"不要比較平均分數,而是用核密度估計表示它是哪個百分位"),以及我提出一些完全不明确的問題時複制粘貼的錯誤信息(例如,"繪圖錯誤:numpy.linalg.LinAlgError: singular matrix"),還有我僅僅詢問簡單單次問題的情況(比如"如何用JavaScript在頁面上添加一個iframe,内容是從字符串加載的?")。
這種方法之所以有效,主要是因爲語言模型擅長處理人們已經解決的問題,而這個測驗的99%内容隻不過是一些基礎的HTML和Python後端服務器,這是任何人都可以編寫的。這個測驗之所以引人關注并受到喜愛,并非因爲其背後的技術,而是因爲測驗内容本身。通過自動化所有重複性的部分,我能輕松地完成這個項目。
實際上,如果沒有語言模型的幫助,我可能根本就不會去創建這個測驗,因爲我不願意花時間從頭編寫整個網頁應用。盡管我擅長編程!我相信,即使是現有的模型,也足以讓大多數人僅憑提問就能解決他們以前無法解決的重要任務。
我還有一些類似的例子以後介紹,其中我讓模型爲我編寫了整個應用,當這些應用發布時,我會明确指出它們是在語言模型的協助下完成的。
2、作爲新技術的向導
我曾經總能趕上各種新興框架的步伐。但是一個人的時間畢竟有限,因爲我的職業特性,我大多數時間都在跟進最新的研究進展,而不是最新的JavaScript框架。
這意味着當我開始一個不屬于我研究領域的新項目時,我通常有兩個選擇:一是利用我已知的技術,雖然這些技術可能已經過時十年或二十年,但對于小項目來說通常足夠了;二是嘗試學習新的(通常也是更好的)方法。
這就是語言模型派上用場的時候。對我而言較新的框架或工具,比如Docker、Flexbox或React,對其他人來說可能已經相當熟悉了。世界上可能有成千上萬的人已經非常了解這些技術。當前的語言模型也能做到這一點。
這意味着,我可以通過與語言模型的交互式學習,來掌握解決任務所需的任何知識,而不必依賴那些假設讀者具備特定知識、目标明确的靜态教程。
比如,今年早些時候,我在構建一個LLM評估框架時,希望能在一個受限環境中運行由LLM生成的代碼,以避免它删除我的計算機上的随機文件等問題。Docker是完成這一任務的理想工具,但我之前從未使用過。
重要的是,這個項目的目标并非是要學會使用Docker,Docker隻是我實現目标所需的工具。我隻需要掌握Docker的10%,确保我能以最基本的方式安全使用它。
如果是在90年代,我可能需要購買一本關于Docker的書籍,從頭開始學習,閱讀前幾章,然後試圖跳讀以找出如何實現我想要的功能。過去十年情況有所改善,我可能會在線搜索如何使用Docker的教程,跟着操作,然後搜索遇到的錯誤信息,看是否有人遇到相同的問題。
但在今天,我隻需要請一個語言模型教我使用Docker。
3、開始新項目
回想起來,我最初接觸的編程語言是Java。我非常喜歡編程,但有一件事我絕對讨厭:面對新項目的空白屏幕。特别是在使用Java時!甚至僅僅是讓程序編譯一個hello world程序——這個"public static void main string args"到底是做什麽的?括号應該怎麽放?哪些字母應該大寫?爲什麽這裏用花括号,那裏用方括号?
所以我做了任何孩子都會做的事——我讓我父親幫我做了。
二十年過去了,我仍然不喜歡使用我不熟悉的框架開始新項目。僅僅是爲了搞定樣闆代碼就需要花費大量時間,而且我對我在做的事情毫無頭緒。
例如,我最近想嘗試編寫一些CUDA代碼,來評估一種簡單的貪婪搜索在GPU上的性能與某人的高效優化的CPU實現相比。
但我不懂CUDA編程。我會寫C語言,了解GPU的工作原理、内核的功能以及内存布局等,但實際編寫向GPU發送任務的代碼?我不知道該從哪裏開始。因此,我直接請求模型爲我編寫CUDA程序的初稿。完美嗎?當然不是!但這是一個起點。這正是我需要的。你會注意到這裏的代碼有很多錯誤!實際上,我完全可以接受。我不是在尋找完美的解決方案,而是一個起點,我可以從那裏繼續。如果未來的模型能做得更好,那将是驚人的。但我現在擁有的已經大有幫助了。
另一方面,對于我在家進行的一些其他個人項目,我正在使用一個樹莓派Pico W。這是我第一次使用它。我希望它能爲我做一些事情,特别是一些網絡相關的事情。再次,我确信我可以在網上找到有人描述如何做我想做的事情的好教程。但你最近看過互聯網嗎?前5個結果通常隻是一些垃圾内容農場,它們有2008年的有缺陷的代碼,僅爲了搜索引擎優化而更新,但仍然不起作用。
因此,我直接請求一個語言模型教我如何做我想做的事情。我之前已經和微控制器打過交道,所以我或多或少了解它們的工作方式。但我之前從未使用過Pico W。我隻需要一些幫助來開始處理所有的依賴關系,然後我可以弄清楚剩下的部分。
我爲新的微控制器編寫的第一個"hello world"程序總是讓一個LED閃爍。這可以讓我測試我是否能夠編譯并上傳代碼到設備,是否正确設置了所有的引腳,并且基本上知道我在做什麽。所以,讓我們隻是請求一個閃爍程序。(再次:這在互聯網上存在嗎?幾乎可以肯定。但那樣我就得去搜索它了。)一旦我有了這段代碼并且運行起來,從這裏我就知道該怎麽做了。我知道python是如何工作的(信不信由你!)。因此,我可以從那裏直接繼續編輯東西,把特殊的Micro Python的東西處理掉。
當我遇到另一個需要我特别處理的問題時,我可以再次請求模型幫助我。例如,我接着隻是讓模型爲我編寫一個連接到wifi的腳本。
4、代碼簡化
作爲安全研究員,我經常需要處理别人的研究項目,這些項目包含數千行代碼,我必須弄懂它們的工作原理以便進行攻擊。這聽起來并不困難,如果每個人都編寫清晰的代碼,實際上也确實不該困難,但現實世界并非如此。研究人員通常沒有動力發布整潔的代碼。所以,人們往往會發布他們能用的任何雜亂代碼。(我自己也不例外。)
我無法分享與研究相關的例子,但我可以分享我正在進行的一個個人項目的例子。據說我對康威的生命遊戲有種不健康的癡迷。最近,我試圖找到一種快速的方法,通過Python評估一些生命遊戲模式。有一個很好的C++工具叫golly可以做這個,但我不想将我的Python代碼重寫爲C++。
golly有一個CLI工具正好滿足我的需求——我所需要的隻是一種正确調用它的方法。這的第一步是簡化支持約50種不同命令行選項的C++代碼,讓它隻執行我想要的操作。所以我将所有500行的C++代碼輸入到LLM中,請求一個更簡短的文件來完成相同的任務。
你知道嗎?這完美地奏效了。然後,我請求一個圍繞C++代碼的Python封裝器。這同樣有效。這是那些令人煩惱的任務之一,如果由我來做,我可能永遠不會完成。但現在我可以請求别人幫我完成,我得到的東西比我原來的Python代碼快了100倍。
我發現自己經常這樣做。這裏還有一個例子,我在用Python做同樣的事情。
再說一次,這些任務并不複雜。但每次這樣做,我都能節省大量時間。這就是我認爲大型語言模型如今驚人的原因之一:它們的用途可能不夠光鮮,也不會因爲說"這是我用大型語言模型簡化日常工作的平凡方式"而赢得網絡贊譽,但這是實實在在的幫助。
5、處理單調任務
我必須完成的許多任務都是單調無聊的,不需要太多思考,但卻必須做。
事實上,我發現自己之所以會拖延任務,往往是因爲我知道完成這些任務會感到無聊和痛苦。LLMs極大地減輕了這種痛苦,讓我在開始任務時就知道自己隻需要解決有趣的問題。因此,我想逐一介紹一些通過請求LLMs幫忙而解決的非常普通的問題。
例如,最近我需要拆解一個用Python 3.9編寫的程序。大多數Python反編譯器隻支持到Python 3.7,但無法在我處理的3.9版本上運行。
反編譯實際上并不難,主要是在重建控制流程時避免出錯。因此,我沒有親自花時間爲幾千個操作碼和幾百行代碼進行這種轉換,而是讓LLM幫我做了。它做得非常好!效果遠超我的預期。這裏有三個不同的對話,在這些對話中我讓模型幫我完成了這項工作。另一個例子是,當我需要将一些非結構化數據轉換成結構化格式時。比如,我在做一個項目,需要列出一些書名和作者名。我在網上找到了一些非結構化格式的數據,然後讓LLM幫我格式化。最近,我在寫一篇關于如何破解某個防護的博客文章,想展示我不得不修改的代碼完整差異。于是我粘貼了差異和之前如何将差異轉換爲HTML的示例,并讓LLM按照之前的格式爲我生成差異。此外,作爲我的工作的一部分,我經常需要爲我使用的資源生成引用。谷歌學術很容易引用論文,我可以直接複制粘貼。但引用網頁稍顯麻煩;我最近開始請求LLM幫我生成引用。(确保這是正确的!)我可以繼續舉出至少一百個類似的例子。但我想你已經明白了我的意思。
我完全明白這種任務可能會讓人覺得"就這?"但我們要記住,五年前這些模型幾乎不能連貫地寫出一個段落,更别說爲你解決整個問題了。
6、使每個用戶都成爲"高級用戶"
如果你曾經看過比你不那麽熟練的人使用某個工具,這可能會有點讓人難受。他們可能會花費幾分鍾甚至幾小時的時間去完成一個本可以通過某種宏或在處理特定任務時巧妙使用并行應用程序來自動化的任務。
然而,學習執行這些操作所需的技巧需要時間,并且具有挑戰性。
例如,我最近試圖編寫一個Python程序來處理來自Apple Lisa鍵盤的輸入。我在線找到了一個人用C語言編寫的相關代碼,其中包含許多像#define KEYNAME key_code這樣的語句,我想将它們轉換爲一個Python字典,将整數代碼映射到對應的字符串。
我是一個Emacs用戶。我知道如何在Emacs中解決這個問題,這甚至并不難。這是我剛記錄的一些關鍵操作,可以達到這個效果:
C-h C-s #def [enter] M-f [delete] C-d M-fC-[space] M-f C-w C-a C-y : " M-f ", C-g C-] } C-[ {
盡管這對我幾乎是自然的,但到目前爲止,我已經花了超過一半的生活時間在Emacs上變得足夠熟練,以至于這成爲了自然反應。但你知道現在我連接了LLM到我的編輯器,我會怎麽做嗎?C-h C-h 請将這些#define重寫爲{keycode: string, ...}的字典格式。
然後,文本就在我眼前被重寫了!
正是在這樣的情況下,我認爲LLMs對非專家的潛在效用甚至高于專家。這個模型爲每個人提高了起點,如果你之前完全不會做,現在突然能做很多事情。
7、作爲API參考
真正的程序員想要理解某個工具的工作原理時會閱讀參考手冊。但我是個懶惰的程序員;我更願意直接得到答案。因此,現在我向語言模型提問。
當我向人們展示這些例子時,有些人會變得有些防禦性,他們說:"LLM沒有做任何你不能用已有工具完成的事情!"你知道嗎?他們說得對。但是,用搜索引擎能做的事,用一本關于該主題的實體書也能做;用一本實體書能做的事,通過閱讀源代碼也能做。
然而,每一種方式比前一種都簡單。當事情變得更簡單時,你會更頻繁地做,而且方式上也會有所不同。
這就是我問"哪個$命令可以傳遞所有剩餘參數"并獲得答案的例子。(緊接着是另一個"我該如何使用這個東西"的問題!)這實際上是我最常用LLMs的方法之一。我之所以不能給你展示更多這樣的例子,是因爲我在Emacs和我的shell中都内置了查詢LLMs的工具。因此,當我想要做這些事情的90%的時間,我甚至不需要離開我的編輯器。
8、搜索難以找到的内容
在互聯網上搜索内容曾經是一項需要學習的技能。你想在查詢中包含哪些特定的詞彙?它們應該是複數還是單數?過去時?你希望避免在頁面上出現哪些詞彙?我是想要X和Y,還是X或Y?
現在情況已經不同了。我想不起上次我在Google中使用OR的時間。我也想不起上次我使用減号(-)來移除結果子集的時間。在大多數情況下,今天你隻需要寫下你想要找的内容,搜索引擎就會爲你找到。
但搜索引擎仍然不是100%的自然語言查詢。它仍然有點像你在玩反向危險邊緣遊戲,試圖使用答案中會有的關鍵詞而不是問題。這是一項我認爲我們幾乎都忘記了我們學過的技能。
對于今天的一些簡單任務(随着時間的推移會越來越多),語言模型隻是更好。我可以直接輸入"所以我知道+對應于__add__,但是是什麽",它會告訴我答案是__inv__。這是用标準搜索引擎很難搜索到的東西。是的,我知道有方法可以問,這樣我就能找到答案。可能如果我輸入"python文檔元類"add"",我可以搜索頁面上的并得到答案。但你知道還有什麽有效嗎?隻要問LLM你的問題。
這樣做任何一次隻節省幾十秒的時間,但當你在解決某個編碼任務的過程中,已經試圖同時記住一百萬件事時,能夠将你試圖解決的問題傾倒出來并得到一個連貫的答案是令人驚訝的。
這并不是說他們今天在這方面已經完美。語言模型隻有在線上被足夠頻繁地重複時才知道事情。"足夠頻繁"是什麽意思取決于模型,所以我确實需要花一些精力思考我是應該詢問模型還是詢問互聯網。但模型隻會變得更好。
或者,每當我遇到随機崩潰時,我會将模型轉儲我所看到的并要求解釋,就像我在這裏做的那樣,當我隻是輸入zsh沒有找到匹配的"遠程通配符傳輸問題"。或者,作爲一個完全獨立的例子,我去年在寫一篇博客文章時,想要第一個字母大寫,讓其餘的文字環繞它,就像我在這句話中所做的那樣。現在這被稱爲下沉式大寫字母。但我不知道這個。我隻知道我想要的效果,所以問語言模型"我想讓它看起來像一本華麗的書,文字圍繞O",它給了我我想要的東西:這個任務是另一個屬于"我隻是因爲LLMs才做的"類别——我不會認爲花大量時間弄清楚如何做是值得的。但因爲我可以直接問模型,我就這樣做了,它讓我的帖子看起來更好一些。
9、解決一次性任務
有兩種類型的程序。首先,你有一些你想要正确完成的程序;它們将會存在一段時間,因爲你需要維護它們好幾年,所以代碼的清晰性很重要。然後,你有那些隻存在大約25秒的程序;它們将幫助你完成某些任務,然後立即被丢棄。
在這些情況下,我根本不關心代碼的質量,而且程序是完全獨立的,我現在幾乎專門使用LLMs來爲我編寫這些程序。
請注意:大多數這些情況再次出現,你會看着它們說"就這?"。但就像我之前說的,我每天隻有那麽多小時來處理一個項目。如果我能節省編寫一次性使用的程序的時間和精力,我會選擇這樣做。
另一次,我編寫了一個程序,這樣我就可以用小立方體3D打印一些像素化的圖像。爲此,我想将PNG轉換爲STL文件;但這不是項目的重點。這隻是沿途必須發生的事情。所以我請求LLM爲我解決這個問題。或者,作爲另一個例子,我最近想使用Docker Compose來設置一個新項目。我遇到了一些問題,隻想讓它運行起來,然後我會弄清楚出了什麽問題。所以我隻是來回幾次,我所做的就是複制一個又一個錯誤消息,直到它最終給我一個有效的解決方案。我還會發現自己在很多情況下首先請求一個完整的解決方案,然後請求如何修改它的提示。在這次對話中,我首先請求一個解析HTML的程序,然後請求API參考或其他改進方式的提示。最近我一直在嘗試做一些電子産品相關的事情,我有一個在Arduino上運行的C程序,但我希望它在樹莓派Pico上以MicroPython運行。這個轉換過程沒有什麽有趣的;它隻需要完成。所以我沒有親自完成工作,隻是請語言模型爲我做。對于另一個項目,我需要用一些花哨的ML模型在一些交互循環中分類一些圖像。我本可以自己編寫,或者我可以直接請求模型爲我做。
10、解釋事物給我聽
我最近開始對電子學産生了興趣。我年輕的時候做過一些電子項目,并在大學期間上過幾門相關課程。但現在我想進行實際的電子項目,我發現有許多我不了解的細節,這讓開始任何項目都變得困難。
我可以去讀一本關于實用電子學的書。我可能真的會在某個時候這麽做,以便徹底理解這個主題。但我并不想把我的時間花在感覺自己在學習上。我從事電子學的部分原因是想從整天的閱讀和寫作中抽身而出。
這就是LLMs發揮出色的地方。它們可能不如世界上最出色的專家那樣知識淵博,但成千上萬的人可能知道我可能會提出的任何電子問題的答案。這意味着語言模型很可能也知道答案。它樂于爲我提供所有問題的答案,使我可以享受樂趣而不必糾結于細節。雖然我完全可以通過在互聯網上搜索來找到答案,但在忙碌一整天後,簡單地讓模型爲我完成這些工作的便利性使我感到非常放松。
這裏是一些例子,展示了我如何詢問語言模型有關電子學中事物工作原理的基本問題。這些答案完美嗎?誰知道呢。但你知道它們比什麽更好嗎?比我什麽都不知道要好。
11、解決具有已知解決方案的任務
幾乎所有事情都已經有人做過了。你想做的事情幾乎沒有什麽是真正新穎的。語言模型特别擅長提供它們之前見過的事物的解決方案。
在最近的一個項目中,我需要提升一些Python代碼的性能。因此,我(1)請求LLM将其重寫爲C語言,然後(2)請求它構建一個接口,以便我能從Python調用C代碼。
這些任務都不是"難"的。将Python轉換爲C是我确信自己能在一兩小時内完成的。盡管我不完全知道Python到C的API如何工作,但我相信我可以通過閱讀文檔來了解。但如果需要我自己來做,我永遠不會去做。它不是關鍵路徑上的一部分,我甯願等待計算機解決問題,也不願花時間加速那些我不經常需要運行的任務。
但是,将Python轉換爲C主要是簡單程序的技術過程,而且有一個标準的Python到C的調用約定。所以,我直接請求LLM來幫我完成。
從那以後,我開始期待這是我可以做到的事情,幾乎在任何時候,當我需要一些高速的代碼時,我會用Python描述我想要的内容,并請求生成優化的C代碼。其他時候,我做同樣的事情,但如果我認爲比較Rust輸出和C輸出的正确性更容易的話,我會請求Rust輸出。或者,作爲另一個例子,用multiprocessing庫并行化Python函數并不困難。你需要編寫一些樣闆代碼,基本上它就會爲你完成。但編寫代碼有點痛苦,會妨礙你想要完成的實際工作。現在,每當我需要做這個時,我隻會請求一個LLM來幫我。還有很多時候,當我嘗試測試某個API時,我最初會編寫一個curl請求來開始。一旦它開始工作,我想以編程方式重複任務,我就會将它轉換爲Python。以前,我通常會做些非常醜陋的事情,直接調用os.popen()運行curl命令,但這并不理想。更好的方法是将其轉換爲Python的requests庫;但這需要時間,所以我不會這麽做。但現在我可以簡單地請求一個LLM幫我完成,并在更短的時間内獲得一個更幹淨的程序。對于即将到來的一個項目,我可能會在這裏讨論,我需要了解人們通常用作簡單無線電發射器的是哪些東西。因爲我真正想要的是大多數人的答案,LLM是一個完美的選擇!
12、修複常見錯誤
在2022年之前,當我遇到某些流行工具或庫的錯誤信息時,我通常會采取以下步驟:
複制錯誤信息。
将其粘貼到Google搜索。
點擊最頂部的Stack Overflow鏈接。
确認問題是否與我遇到的一緻;如果不是,返回第2步。
如果無效,返回第2步,更換搜索詞,祈禱等。
因爲,坦白說,通常出問題的工具與我最終想要解決的任務差距很大,我其實并不太關心如何使其工作,我隻需要它能工作。2024年現在這個流程是怎樣的?
向LLM詢問:"我該如何修複這個錯誤?(錯誤)"
如果無效,反饋"那不起作用"。
我沒有任何對話記錄來展示這些例子。(或者說,我找了一個小時也沒有找到。)但這實際上有一個很好的原因:我已經将它整合進我的工作流程中了。
我是一個Emacs用戶。我設置了我的環境,每當我運行一個程序并且它以非零狀态碼結束時(意味着有錯誤發生),它會自動調用最新最快的LLM,并要求它解釋答案,同時請求一個可以直接應用來修複代碼中bug的補丁。
現今的模型大多數情況下還不足以在這項任務上勝過我,但它們正在逐漸進步。偶爾,當LLM修複了一個我知道如果自己追蹤可能非常困難的錯誤時,我會感到非常驚喜,尤其是當錯誤隻是因爲某處的小筆誤。
13、以及無數其他事情
我上面提到的所有對話隻占我過去一年與LLMs互動總數的不到2%。我沒有提供其他鏈接的原因并不是因爲這些是模型失敗的案例(盡管有很多這樣的案例),而是因爲:(1)許多互動重複了我已經提到的那些模式,或(2)它們不容易解釋清楚發生了什麽,也不容易讓你自己看到它們爲何對我有用。
我完全預期未來我使用這些模型的頻率會持續增長。作爲一個參考,我在2024年通過網頁界面進行的LLM查詢比2023年增加了30%——而且我甚至無法計算API查詢的增加,但我猜測至少增加了2到3倍。
評價LLMs的能力,而非它們的局限
我在面試求職者時獲得的最佳建議之一是,根據他們能做什麽而不是不能做什麽來評價他們。
我懷疑我可以問你一些簡單的問題,這可能會讓你顯得不夠稱職。比如極端的例子:世界上有十億人講普通話;我連數到十都做不到。如果有人給我一份小學水平的普通話考試,我肯定會考得很糟糕。
即便在計算機科學領域内,也有我完全不了解的領域。我關于如何構建SQL的知識僅限于如何編寫有效的SELECT語句。這——字面上——是我唯一知道如何編寫的語句。
因此,當我看到人們在網絡上争論說LLMs隻是炒作,因爲"它們甚至不能做XXX"時,我真的感到困惑。這裏的XX可能是:
... 計算句子中的單詞數!
... 寫一首每個單詞都以字母"a"開頭的詩
... 乘以兩位數
... 從列表中随機選擇一個元素
因爲你上次真正需要做這些事情,并且真誠地認爲LLM是合适的工具是什麽時候?
我不會因爲我們不能在頭腦中分割64位整數而認爲人類完全無用——這對計算機來說是極其簡單的任務——我也不認爲因爲你可以構造出LLMs無法解決的任務就應該抛棄LLMs。顯然這很容易——關鍵是你能找到它們能夠提供價值的任務嗎?
程序員已經很清楚,某些事物對不同的目的可能有用。想要編寫操作系統?也許你應該使用C而不是Python。沒有人會說"看Python多麽愚蠢,你甚至不能強制變量對齊到32字節邊界!"這隻是在錯誤的抽象級别上。語言模型也是一樣。它們在非常高的抽象級别上操作;你不能期待它們解決甚至最簡單的程序都能解決的任務。但你可以期望它們解決不同種類的任務。
結論
撰寫這篇文章的初衷有兩個。首先,正如我在文章開頭所述,我想證明LLMs已經爲我提供了大量的價值。此外,我注意到很多人表示喜歡使用LLMs的想法,但不知道它們能如何幫助自己。因此,如果你是這些人之一,希望通過我的使用案例能看到一些示例。
因爲至少對我來說,LLMs能做很多事。它們不能做所有事情,甚至不能做大多數事情。但當前的模型,正如它們現在存在的樣子,爲我提供了可觀的價值。
在展示這些示例後,我經常收到的一種反駁是:"但這些任務很簡單!任何計算機科學的本科生都能學會如何做到!"确實,本科生可以通過幾小時的搜索來告訴我如何正确地診斷CUDA錯誤以及可以重新安裝哪些包。本科生可以通過幾小時的工作重寫那個程序爲C語言。本科生可以通過幾小時的學習相關教科書來教我任何我想知道的關于那個主題的内容。不幸的是,我沒有一個随時可以回答我任何問題的神奇本科生。但我有語言模型。所以,雖然語言模型還不夠好,不能解決我作爲程序員工作中的有趣部分,而且當前模型隻能解決簡單的任務。
但五年前,LLM最好的能做的就是寫出看起來像英語的段落。當它們能從一個句子到下一個形成連貫的思想時,我們都感到驚訝。它們的實際用途幾乎爲零。然而,今天,它們已經提高了我在項目中編程方面的生産力至少50%,并消除了足夠多的繁瑣工作,讓我能夠創建一些我否則永遠不會嘗試的東西。
因此,當人們說"LLMs隻是炒作"和"所有LLM都沒有爲任何人提供實際價值"時,很明顯他們是錯誤的,因爲它們爲我提供了價值。現在,也許我是個例外。也許我是唯一找到了讓這些模型有用的方法的人。
我隻能代表我自己。
但考慮到LLMs顯著提高了我的生産力——一個在使用LLM之前已經有20年編程經驗的人——我相信還有其他人也能從使用AI中受益。
原文鏈接:https://nicholas.carlini.com/writing/2024/how-i-use-ai.html#intro
素材來源官方媒體/網絡新聞
華夏基石·AI啓航論壇
誠邀您的參與,掃碼報名,審核通過後我們會第一時間與您取得聯系:
喜歡這篇文章
>