六位一線 AI 工程師和創(chuàng)業(yè)者,把在大模型應用開發(fā)上摸爬滾打一整年的心得,全!分!享!了!
(奇怪的六一兒童節(jié)大禮包出現(xiàn)了)
這篇干貨長文,一時間成為開發(fā)者社區(qū)熱議的話題。
有網(wǎng)友評價為,大模型領域少有的“有操作性”的實用見解,非常值得一讀。
這 6 位作者來自不同背景,比如有大廠工程師,也有獨立開發(fā)者,還有咨詢顧問。
但他們的共同之處,是過去一年里一直在大模型之上構建真實應用程序,而不只是炫酷的 Demo 演示,他們認為:
現(xiàn)在正是非機器學習工程師或科學家,也能把 AI 構建到產(chǎn)品中的時候。
在他們的一系列分享中,網(wǎng)友熱議的亮點包括但不限于:
-何時用長上下文、何時 RAG、何時微調模型
多樣化輸出不止提高溫度,改變提示詞中示例的順序也影響結果
長上下文不會讓 RAG 過時
“實習生測試”:如果大學生能根據(jù)提示詞完成任務,說明比較完善了
每個大模型都有自己的偏好,Claude 更喜歡 XML 格式,GPT 系列更喜歡 Markdown 和 JSON
如果靠提示詞已完成了 90% 的任務,微調可能就不值得投資
大模型當裁判評估結果可能起作用,但不是萬能的
……
總之,無論是大廠工程師、創(chuàng)業(yè)者還是參加個人開發(fā)者,都值得一看。
全程高能干貨分享
提示詞、RAG 和微調都是改善大模型輸出結果的有效方法。
但是何時該用何種方法,還沒有定論。
作者們認為,需要根據(jù)具體的應用場景、任務需求、成本效益和性能目標來做出決策:
建議在開發(fā)新應用程序時從提示詞開始
需要大模型掌握新知識時優(yōu)先使用 RAG
當需要針對特定任務優(yōu)化時再考慮微調
最后,他們還重點討論了對大模型應用的評估和監(jiān)測,認為是應該貫穿開發(fā)全流程的重要環(huán)節(jié)。
提示詞篇
很多開發(fā)者都陷入了一個誤區(qū):以為設計一個涵蓋一切的“終極提示詞”就能完美解決問題。
就像過去軟件開發(fā)中也有希望一個類或函數(shù)可以完成所有事情的誤區(qū)。
實際情況恰恰相反,隨著需求的復雜化,這樣的 Prompt 會越來越臃腫,性能反而每況愈下。
那么正確的做法是什么呢?提示詞也應該像代碼一樣保持簡潔,以會議記錄總結場景來說,可以分解為以下步驟:
將關鍵決策、待辦事項和執(zhí)行者提取為結構化格式
檢查提取的詳細信息與原始會議記錄的一致性
從結構化詳情生成簡明摘要
通過拆分,每個提示詞都簡單、突出重點且易于理解,更重要的是接下來可以單獨迭代和評估每個提示詞。
比如思維鏈鼓勵 AI 在最終回答之前寫下思維過程,除了“一步一步思考”之外,還可以用一些技巧顯著降低幻覺。
還以會議記錄總結場景為例,迭代后的提示詞示例為:
- 首先,在草稿中列出關鍵決策、待辦事項和相關執(zhí)行者。
- 然后,檢查草稿中的細節(jié)是否與文字記錄相符。
- 最后,根據(jù)要點合成簡潔的總結。
在提示詞方面,作者們還提出了更多具體經(jīng)驗。
對于給大模型提供示例的上下文學習:
提示詞中的示例數(shù)量追求≥5(也不要害怕用上幾十個)。太少會讓模型過度遵循特定示例、損害泛化能力。
示例應該反映預期的輸入分布。比如做電影劇情總結,示例中不同類型電影的比例大致應與實踐中期望看到的相同。
不一定需要提供完整的輸入-輸出對。在許多情況下,只有輸出的示例就足夠了。
如果所用的大模型支持工具調用,則示例也應包含希望 AI 使用的工具。
對于結構化輸入輸出:
優(yōu)化上下文結構,讓模型更容易理解和處理。單純打包一堆文件人類看著頭疼,AI 看著也費勁。
只保留必要信息,像雕刻藝術家一樣剔除冗余、自相矛盾和格式化錯誤。
每個大模型都有自己的偏好,Claude 更喜歡 xml 格式,GPT 系列更喜歡 Markdown 和 JSON。
比如給 Claude 的提示詞,甚至可以用 xml tag 來預填充輸出模板。
RAG(檢索增強生成)篇
不要忘記關鍵詞搜索
基于 Embedding 的 RAG 演示很多,讓人們容易忘記信息檢索領域數(shù)十年來積累的經(jīng)驗。
作者認為向量檢索無疑是強大的工具,但不是全部。雖然擅長捕獲高級語義相似性,但它們可能難以處理更具體的關鍵字,比如人名、首字母縮略詞或者 ID。
不要忘記傳統(tǒng)的關鍵詞匹配(如 BM25 算法),在大多數(shù)情況下,混合關鍵字匹配和向量搜索效果最好:
先匹配最明顯的關鍵詞,再對同義詞、上位概念和拼寫錯誤做向量查詢,以及多模態(tài)向量查詢。
RAG 輸出的質量取決于檢索文檔的質量
具體來說,檢索文檔的質量又取決于幾個因素。
第一個也是最明顯的指標是相關性。與傳統(tǒng)推薦系統(tǒng)一樣,檢索到的項目的排名對大模型輸出產(chǎn)生重大影響,要衡量這種影響,可以試試打亂順序并觀察大模型行為變化。
第二個是信息密度。如果兩份文檔同樣相關,應該選擇更簡潔、無關細節(jié)更少的那個。
最后是信息的詳細程度,附加的詳細信息可以幫助大模型更好地理解。
優(yōu)先 RAG,而不是對新知識微調
RAG 和微調都可讓大模型掌握新知識并提高特定任務的性能。那么,應該優(yōu)先選擇哪一個呢?
微軟一篇論文比較 RAG 與無監(jiān)督微調(又叫持續(xù)預訓練),發(fā)現(xiàn)對于新知識 RAG 性能始終優(yōu)于微調。
△arxiv.org/abs/2312.05934
除了改進性能之外,RAG 容易更新而且成本更低。如果知識庫中發(fā)現(xiàn)錯誤,RAG 方法只需簡單刪除有問題的文檔即可。
RAG 還可以給文檔權限提供更細粒度的控制,確保每個用戶只能訪問自己有權限的文檔,不會泄露信息。
長上下文不會讓 RAG 過時
首先,即使上下文窗口達到一千萬 tokens,仍然需要一種方法來選擇要輸入模型的信息。
其次,除了簡單大海撈針評估之外,還沒有看到令人信服的數(shù)據(jù)表明模型可以在如此大的上下文進行有效的推理。
如果沒有良好的檢索和排名,干擾因素可能淹沒模型,甚至可能用完全不相關的信息填滿了上下文窗口。
最后還有成本問題,Transformer 的推理成本隨上下文長度二次增長,過度依賴長上下文可能不劃算。
微調篇
當最巧妙的提示詞設計也無法完成一些任務時,可能就需要考慮微調了。
雖然微調可能是有效的,但它會帶來巨大的成本。必須注釋微調數(shù)據(jù)、執(zhí)行微調和評估模型,并最終自行部署模型。因此,請考慮較高的前期成本是否值得。
作者們的經(jīng)驗是:
如果提示詞已完成了 90% 的任務,那么微調可能不值得投資。
如果確定要微調,可以考慮合成數(shù)據(jù)或開源數(shù)據(jù)集,降低人工收集注釋數(shù)據(jù)的成本。
Agent 與工作流
最成功的 Agent 開發(fā)者可能也是工程師團隊的管理者,因為給 AI 制定計劃的過程和管理初級員工的方式類似。
我們給人類新手明確的目標和具體的計劃,而不是模糊的開放式指示,對 Agent 也應該這樣做。
優(yōu)先考慮確定性工作流程
Agent 被期待動態(tài)對用戶請求做反應,但隨著執(zhí)行步數(shù)增加,失敗的可能性指數(shù)增加,并且從錯誤中恢復的機會很小。
一種有前途的方法是使用 Agent 系統(tǒng)來生成確定性計劃,然后以結構化、可重復的方式執(zhí)行這些計劃,好處包括:
生成的計劃可以作為提示詞中的少數(shù)樣本,或微調數(shù)據(jù)。
使系統(tǒng)更加容易測試和調試,失敗可以追溯到計劃中的具體步驟。
生成的計劃可以表示為有向無環(huán)圖 (DAG),相對于靜態(tài)提示詞,它更容易理解和適應新情況。
多樣化輸出不止提高溫度
如果任務需要輸出的多樣性,比如根據(jù)用戶之前購買過的產(chǎn)品推薦新產(chǎn)品,簡單增加大模型的溫度參數(shù)可能會產(chǎn)生問題。
如果溫度太高,可能會生成不存在的產(chǎn)品,甚至輸出亂碼。
其他增加輸出多樣性的方法包括:
最簡單的是調整提示詞內的元素順序,打亂用戶歷史購買記錄的順序,就可能產(chǎn)生顯著差異。
還可以在上下文中保留前幾輪的輸出,并要求大模型避免重復最近推薦過的產(chǎn)品。
另一個策略是改變提示詞的措辭,比如“選擇用戶喜歡經(jīng)常使用的產(chǎn)品”和“選擇用戶可能會推薦給朋友的產(chǎn)品”。
評估與監(jiān)測
大模型的輸入和輸出是任意文本,要完成的任務是多種多樣的。盡管如此,嚴格且深思熟慮的評估仍至關重要。
從真實的輸入 / 輸出樣本中創(chuàng)建基于斷言的單元測試
作者建議創(chuàng)建由生產(chǎn)中的輸入和輸出樣本組成的單元測試,并基于至少 3 個指標測試。
3 個指標是實踐中總結出來的,更少可能表明任務沒有充分定義,或過于開放。
這些單元測試應該由工作流的任何更改觸發(fā),無論是編輯提示詞、通過 RAG 添加新上下文還是其他修改。
大模型當裁判可能起作用,但不是萬能的
作者認為,讓最強大的模型當裁判、給其他模型的輸出打分,用于定性比較優(yōu)劣可能有用,但具體輸贏的幅度就沒什么參考價值了。
不要讓大模型在量表上對單個輸出進行評分,而是提供兩個選項,要求選擇更好的一個,這往往會帶來更穩(wěn)定的結果。
提供的選項順序可能會影響結果,為了緩解這種情況,請將每個成對比較進行兩次,每次交換順序。
在某些情況下,兩種選擇可能同樣好。因此允許大模型宣布平局,這樣就不會武斷地選一個勝者。
使用思維鏈:要求大模型在給出最終偏好之前解釋其決定,可以提高評估的可靠性,還可以讓更小的模型獲得與大模型類似的結果。
(這部分流程通常處于并行批處理模式,思維鏈帶來的額外延遲并不造成問題。)
大模型往往偏向于較長的回答,為減少這種情況,請確保成對的回答長度相似。
“實習生測試”
如果將提示詞(包括上下文)作為一項任務,交給相關專業(yè)的普通大學生,他們能成功嗎?需要多長時間?
如果大學生都做不到,就該考慮如何給大模型提供更豐富的上下文資料了。
如果根本無法通過改進上下文來解決這個問題,那么這就是對當代大模型來說太難的任務。
如果大學生能做到,但需要一段時間??梢試L試降低任務的復雜性。分解任務,或某些方面是否可以更加模板化。
如果大學生能做到,而且很快,但大模型不行。那么就該深入研究大模型反饋的數(shù)據(jù)了。嘗試找到失敗的模式,讓模型在輸出之前或之后解釋自己。
過分強調某些指標可能影響整體
著名的古德哈特定律表示,“當一項指標成為目標時,它就不再是一項好指標”。
比如針對長上下文的“大海撈針”測試最早是網(wǎng)友提出的,迅速成為行業(yè)通用方法之后,就很容易針對性優(yōu)化、刷榜。
更好的指標可能正是復雜的實際任務,比如“給定一個小時的會議記錄,大模型能否總結出關鍵決策、待辦事項和相關負責人”。
這項任務更切合實際,超越了死記硬背的范疇,還考慮到了解析復雜討論、識別相關信息和歸納總結的能力。
在總結中強調事實一致性可能會導致摘要不那么具體(因此不太可能與事實不一致),也可能不那么相關。
反之,如果強調寫作風格和口才,則可能導致更多花哨的話術,從而造成與事實不符的情況。
LLMs 甚至會在不應該返回輸出時返回輸出
大模型經(jīng)常會在不應該生成輸出的情況下生成輸出??赡苁菬o害但無意義的輸出,也可能是更嚴重有害輸出。
例如,當被要求從文檔中提取特定屬性或元數(shù)據(jù)時,大模型可能會自信地返回不存在的結果??梢試L試讓大模型回答“不適用”或“不知道”,但也并非萬無一失。
雖然謹慎的提示工程可以在一定程度上起作用,但還應輔之以強大的“護欄”機制,以檢測和過濾 / 重新生成不受歡迎的輸出。
例如,OpenAI 提供了一個內容過濾 API,可識別不安全的響應,如仇恨言論、自殘或性內容。同樣,還有許多用于檢測個人身份信息 (PII) 的軟件包。這樣做的好處之一是,”護欄”在很大程度上與場景無關,因此可廣泛應用于特定語言的所有輸出。
此外,通過精確檢索,如果沒有相關文檔,系統(tǒng)也可以確定地回答 “我不知道”。
在實際應用中,最好持續(xù)記錄輸入和輸出,以便進行調試和監(jiān)控。
幻覺很難徹底解決
與安全問題不同,幻覺可能很難被發(fā)現(xiàn)。
根據(jù)作者們從大模型供應商那里了解到的情況,要將幻覺率降低到 2% 以下是非常困難的,即使是在摘要等簡單任務中也是如此。
為了解決這個問題,可以將提示工程(生成的上游)和事實不一致護欄(生成的下游)結合起來。
對于提示詞工程,思維鏈等技術可以讓大模型在最終返回輸出之前解釋其推理,從而幫助減少幻覺。然后,可以應用事實不一致護欄來評估摘要的事實性,并過濾或重新生成。
技術篇結束,還有運營、戰(zhàn)略篇
對于這篇精彩的實戰(zhàn)經(jīng)驗分享,沃頓商學院教授 Ethan Molick 推薦并感慨:
這篇文章顯示了從傳統(tǒng)軟件角度來看,使用大模型是多么奇怪,以及人們還有多少東西需要學習。
事實上這只是六位作者完整分享的三分之一:戰(zhàn)術篇。
第二部分運營篇也剛剛發(fā)布,圍繞數(shù)據(jù)、模型、產(chǎn)品、團隊發(fā)展四個話題展開分享。
接下來還有最后一部分戰(zhàn)略篇,也是狠狠期待了。
最后,不妨再來認識一下六位作者。
Eugene Yan
他目前是亞馬遜高級應用科學家,負責構建服務全球數(shù)百萬客戶的推薦系統(tǒng),并應用大語言模型來更好地服務客戶。
此前,他曾在 Lazada(被阿里巴巴收購)和一家健康科技初創(chuàng)公司領導機器學習團隊。他在 eugeneyan.com 和 ApplyingML.com 上撰寫并發(fā)表關于機器學習、推薦系統(tǒng)、大語言模型及工程方面的文章和演講。
Bryan Bischof
Bryan Bischof 是 Hex 的 AI 負責人,領導工程師團隊開發(fā)了 Magic—— 數(shù)據(jù)科學和分析助手。
他在數(shù)據(jù)領域有豐富的工作經(jīng)驗,曾創(chuàng)建了 Blue Bottle Coffee、Weights and Biases 的數(shù)據(jù)團隊,領導了 Stitch Fix 的多個項目,還曾與 O’Reilly 合寫了“Building Production Recommendation Systems”一書,并在羅格斯大學教授數(shù)據(jù)科學和分析課程。他擁有純數(shù)學博士學位。
Charles Frye
Charles Frye 在加州伯克利獲得了神經(jīng)網(wǎng)絡優(yōu)化方面的博士學位。
他通過在 Weights and Biases、Full Stack Deep Learning 和 Modal 的教育和咨詢工作,教授了數(shù)千人從線性代數(shù)基礎到 GPU 奧秘以及構建可行商業(yè)模式的整個 AI 應用開發(fā)過程。
Hamel Husain
Hamel Husain 是一位擁有超過 25 年經(jīng)驗的機器學習工程師。
他曾就職于 Airbnb 和 GitHub 等,參與了 OpenAI 用于代碼理解的早期大語言模型研究,還領導許多受歡迎的開源機器學習工具。Hamel 目前是一名幫助公司將 LLM 投入運營加速其 AI 產(chǎn)品開發(fā)的獨立顧問。
Jason Liu
Jason Liu 是一位知名的機器學習顧問,在個性化算法、搜索優(yōu)化、合成數(shù)據(jù)生成和 MLOps 系統(tǒng)方面擁有技術專長。
他曾在 Stitchfix 創(chuàng)建了一個處理每日 3.5 億次請求的推薦框架和可觀測性工具,還曾在 Meta、紐約大學以及 Limitless AI 和 Trunk Tools 等初創(chuàng)公司擔任重要角色。
Shreya Shankar
Shreya Shankar 是加州伯克利計算機科學博士生和機器學習工程師。
她曾是兩家初創(chuàng)公司的首席機器學習工程師,從零開始構建 AI 產(chǎn)品。她的工作重點是通過以人為中心的方法解決生產(chǎn)級機器學習系統(tǒng)中的數(shù)據(jù)挑戰(zhàn),研究成果發(fā)表在 VLDB、SIGMOD、CIDR 和 CSCW 等頂級數(shù)據(jù)管理和人機交互會議上。
另外,作者們還計劃舉辦一場線上直播(北京時間 6 月 21 日上午),就大模型產(chǎn)品開發(fā)展開更多分享,感興趣的朋友可以報名了。
閱讀原文
https://www.oreilly.com/radar/what-we-learned-from-a-year-of-building-with-llms-part-i/
https://www.oreilly.com/radar/what-we-learned-from-a-year-of-building-with-llms-part-ii/
線上直播活動:
https://lu.ma/e8huz3s6
參考鏈接:
[1]https://news.ycombinator.com/item?id=40508390
本文來自微信公眾號:量子位 (ID:QbitAI),作者:夢晨 西風
廣告聲明:文內含有的對外跳轉鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結果僅供參考,IT之家所有文章均包含本聲明。