??目錄
1 LLM 基礎(chǔ)知識
2 LLM 應用
3 LLM 的未來發(fā)展方向
LLM 探秘:想要深入了解人工智能界的“新寵”大型語言模型(LLM)嗎?本文將帶你走進 LLM 的世界,從入門知識到實際應用,全方位解讀這個充滿魔力的“大模型”。我們將一起揭開 LLM 的神秘面紗,領(lǐng)略其在各個領(lǐng)域的獨特魅力。無論你是初學者還是有一定基礎(chǔ)的 AI 愛好者,這篇文章都將為你提供寶貴的知識和啟發(fā),讓你的 AI 之旅更加精彩紛呈!快來加入我們,一起探索 LLM 的奧秘吧!大師兄:當我們提到 LLM 時,你最先想到的是什么?
三金哥:ChatGpt、混元、元寶、copilot、模型訓練、RAG、LangChain、智能客服、智能 NPC、AGI、智能體?
大師兄:隨著 LLM 的發(fā)展,LLM 在我們?nèi)粘5墓ぷ鳌W習和生活中扮演的角色越來越重要,上面的這些概念你肯定都聽說過、了解過以及使用過,那么他們之間是怎樣的關(guān)系呢。
三金哥:每個都了解那么一點,要是要我把他們之間的關(guān)系給完全說清楚,又有那么一點模糊。
大師兄:是的。所以,本著知其然要知其所以然的態(tài)度,想要梳理出來一個比較明確的知識圖譜,我不僅系統(tǒng)性的學習了一些公司內(nèi)的和 LLM 相關(guān)的文章,還查閱了一些外部資料,并且和 LLM 做了一些深入交流。試著梳理出這篇文章——LLM 的入門全貌:基礎(chǔ)、應用與前景。
三金哥:你這個叫法有點奇怪啊,入門還要有個全貌?
大師兄:是啊,LLM 涉及面比較廣,我們這篇又是篇科普類的文檔,想了半天(大約12小時),覺得還是入門全貌這個標題比較契合。
三金哥:好像聽著也有那么一點道理,那我們走著?
大師兄:走著。我們先從 LLM 是什么開始吧。你覺得 LLM 是什么呢?三金哥:從字面意思來講,LLM 是 Large Language Model 這三個單詞的首字母縮寫,意為大語言模型。問了 LLM 后,LLM 進一步告訴我:大型語言模型(LLM)是一種基于深度學習技術(shù)的自然語言處理工具,能理解和生成文本。通過大量語料庫訓練,LLM 在翻譯、寫作、對話等任務中展現(xiàn)出卓越的能力。常見的應用包括自動問答、生成文本、文本摘要等。由于其多模態(tài)特性,LLM 還可用于圖像和音頻處理,為多領(lǐng)域帶來創(chuàng)新可能。大師兄:士別三日當刮目相看,三金哥現(xiàn)在對 LLM 的使用已經(jīng)非常熟練了。三金哥:我們要與時俱進嘛!我記得有句話是這么說的:周期可以對抗,但是時代的潮流不可對抗。能引領(lǐng)潮流是最好的,不能引領(lǐng)潮流,起碼也要順應潮流。大師兄:我們從你的回答中能夠看到關(guān)于 LLM 是一種基于深度學習技術(shù)的自然語言處理(NLP)工具。我之前沒有考慮過,但是最近仔細想想,覺得還比較有意思的一個問題:你有考慮過 LLM 和自然語言處理(NLP)工具的關(guān)系嗎? 1.2 LLM 與 NLP 的關(guān)系 &LLM 的基本特點
1.2.1 LLM 與 NLP 到底啥關(guān)系
三金哥:這個還真有點難到我了。你能用一句我能聽得懂的話來總結(jié)下 LLM 和 NLP 的關(guān)系嗎?大師兄:NLP 關(guān)注的是對自然語言的理解和處理,而 LLM 則是一種強大的模型范式,用于生成和理解自然語言文本,為各種 NLP 任務提供基礎(chǔ)和支持。大師兄:那我們就分別從定義、目標來分別說明下 NLP 和 LLM。- 從定義上:自然語言處理(NLP)是人工智能領(lǐng)域的一個子領(lǐng)域,專注于研究和開發(fā)使計算機能夠理解、處理、生成自然語言文本的技術(shù)和方法。而大型語言模型(LLM)是一類基于深度學習的模型,旨在模擬和生成自然語言文本的模型。
- 從目標上:NLP 的主要目標是讓計算機能夠像人類一樣理解和處理自然語言,包括語言的語法、語義、語用等方面。而 LLM 的主要目標是通過大規(guī)模的訓練數(shù)據(jù)來學習自然語言的規(guī)律,并能夠生成具有語義和語法正確性的文本。
三金哥:這么一說,把LLM叫做自然語言處理工具可能沒有那么準確,LLM 更多的是理解和生成文本。不過,從你的回答上,我在思考一個很重要的問題:對于 LLM 來說,生成具有語義和語法正確性的文本是不是還不太夠,生成的文本和問題如何對應上的?比如有下面的問答:- 回答:“我認為這個意大利面,就應該拌42號混凝土,因為這個螺絲釘?shù)拈L度很容易影響到挖掘機的扭矩”
- 單純從語義和語法正確性貌似沒有很大的問題,但是確并沒有回答我的問題。
大師兄:你是怎么理解“語義正確”的,上面這句話語法上是沒問題的,但從語義角度來看,這段話有些問題:- 意大利面和混凝土:在現(xiàn)實生活中,這兩者沒有直接聯(lián)系,意大利面是食品,混凝土是建筑材料,把它們結(jié)合在一起明顯是不合理的。
- 螺絲釘和扭矩:雖然螺絲釘和扭矩在工程機械上是相關(guān)的,但是和意大利面拌混凝土這件事完全是兩個不相干的領(lǐng)域。
- 因此,可以說這段話在語法上是正確的,但在語義上卻是顯得荒謬和不可理解的。雖然這段話在邏輯上沒有意義,但在生成語法正確的文本時,只是做到了語法正確(syntax correctness),還需要做到語義合理(semantic plausibility)。
三金哥:哦,明白了,語義正確性是這個意思。那例子改下。- 回答:”我認為 PHP 是最好的編程語言,不接受反駁“
大師兄:這段對話從語法和語義上都是正確的,但是回答完全偏離了問題本身。一個理想的 LLM 模型除了語法和語義正確外,還應該具備的能力是:上下文匹配以及一致性。展開來說,就是回答要能準確對應提問的內(nèi)容和主題并且回答應該與問題保持一致,不發(fā)生語義偏離或者邏輯斷裂。三金哥:你的解釋非常的有道理,不過我還是有個疑問。就還是拿上面的問題來舉例。大師兄:非常好的例子。上面的回答除了語法和語義的正確性外,上下文匹配以及一致性也是沒有問題的,但是這個回答有個致命的錯誤:和事實不符。眾所周知:2022年 NBA 總冠軍是金州勇士隊?。?!雖然2024年 NBA 總冠軍是波士頓凱爾特人隊,雖然2021年金州勇士隊沒有進季后賽,但是2022年 NBA 總冠軍是金州勇士隊。大師兄:不好意思,上頭了。從上面的例子我們也可以看出,一個 LLM 模型應該具備的必不可少的優(yōu)秀品質(zhì)是:確保信息的準確性。三金哥:那么問題來了,LLM 模型是怎么保證回答的準確性的呢?大師兄:好問題啊,三金哥你這么快就直指LLM的核心了。總結(jié)來說,LLM 通過下面幾點來保證回答的正確性:數(shù)據(jù)訓練、持續(xù)學習、上下文理解、多模態(tài)輸入、人工審核、領(lǐng)域適應性。這里面每點展開都能講一節(jié)課了,鑒于讀者沒付費,我就先不展開了。三金哥:借用丞相一句臺詞:“從未見過如此厚顏無恥之人!”大師兄:被你的意面拌混凝土給拉跑偏了,我們還是說回 LLM 的發(fā)展歷程啊。如果說,在 LLM 的發(fā)展過程中有哪些重要的里程碑事件的話,2017年 Vaswani 等人提出了 Transformer 架構(gòu)絕對是能算得上之一。大師兄:那你聽說過,GPT(Generative Pretrained Transformer)和 BERT(Bidirectional Encoder Representations from Transformers)嗎?大師兄:這兩個詞中的 T 就是 Transformer 架構(gòu)。Transformer 架構(gòu)是一種基于自注意力機制的神經(jīng)網(wǎng)絡結(jié)構(gòu),它完全顛覆了之前以循環(huán)神經(jīng)網(wǎng)絡(RNN)為主導的序列建模范式。Transformer 架構(gòu)的出現(xiàn),實現(xiàn)了并行計算和高效的上下文捕獲,極大地提高了自然語言處理的性能。可以說,先有 Transformer,后有 GPT 以及 BERT。三金哥:然后下一個里程碑事件是 ChatGpt 的發(fā)布了嗎?大師兄:是的,ChatGPT 是 GPT-3.5 的微調(diào)版本,本質(zhì)上是一個通用聊天機器人。在2022年11月推出,推出后僅僅兩個月,就達到月活過億。怎么形容 ChatGpt 的發(fā)布呢,我覺得“橫空出世”這個詞比較合適。三金哥:沒錯,到現(xiàn)在甚至 ChatGpt 在一定程度上都快成了 LLM 的代名詞了。大師兄,我了解到:GPT3 在訓練時使用了175B的參數(shù)。這是一個什么概念,怎么來理解這 175B 個參數(shù)對模型訓練的影響。大師兄:這里的 B 不是 Byte,你是知道的吧。大師兄:這里的 B 是 Billion 的縮寫,175B就是1750億個參數(shù)。參數(shù)數(shù)量,簡單來說,就是模型在學習時用來調(diào)整自身以適應數(shù)據(jù)的那部分“旋鈕”。想象一下,每個參數(shù)就像是一個可以微調(diào)的設(shè)置,模型通過調(diào)整這些參數(shù)來更好地理解和生成語言。當我們說一個模型有1750億個參數(shù)時,這意味著模型內(nèi)部有1750億個這樣的旋鈕。這個數(shù)字越大,通常意味著模型的表示能力越強,因為它可以捕捉到更復雜的數(shù)據(jù)模式。但同時,這也意味著模型需要更多的數(shù)據(jù)和計算資源來訓練。不過,要注意的是,參數(shù)多并不總是好事。如果參數(shù)過多,而訓練數(shù)據(jù)不足,模型可能會過擬合,也就是說它在訓練數(shù)據(jù)上表現(xiàn)得很好,但在未見過的數(shù)據(jù)上就不怎么樣了。所以,參數(shù)數(shù)量和訓練數(shù)據(jù)的平衡非常重要。三金哥:那使用175B個參數(shù)進行訓練需要多少資源,要訓練多久?大師兄:好問題,我去查了下資料,可能沒那么精確,但是可以了解到一個量級:使用1000張 NVIDIA 80GB A100 GPU(理論算力是 312 TFLOPS)顯卡需要22天,花費81.6萬美刀才能訓練完(如有更精確的數(shù)字,歡迎指正)。三金哥:好家伙,這么貴的啊。所以現(xiàn)在 ChatGpt 的 token 才會這么貴的嗎?大師兄:ChatGpt 的 token 貴的原因除了訓練模型比較耗錢外,我們向LLM發(fā)起請求時,每個請求都會在 LLM 的內(nèi)部發(fā)起比較復雜的運算,這些運算對硬件的要求也很高,所以每次發(fā)起請求時都有不少的運行時成本。另外,模型的維護和優(yōu)化的成本也比較高。最后,我們要考慮到 LLM 商用模型不是在做慈善,是為了要盈利的。我淺顯的經(jīng)濟學知識告訴我 OpenAI 的 ChatGpt 模型雖說遠不是壟斷企業(yè),但是也絕對不是競爭市場企業(yè),可以大致的把 OpenAI 看成是寡頭企業(yè),再考慮到當前 ChatGpt 的良好表現(xiàn),貴一些還是有貴一些的道理。不過我覺得隨著我國國內(nèi) LLM 的發(fā)展,ChatGpt 是一定會降價的。你聽說過航母阻攔索的故事嗎?三金哥:阻攔索和 LLM 有什么關(guān)系?大師兄:當時兔子航母事業(yè)剛起步,航母艦載機在著艦時要使用質(zhì)量可靠的阻攔索。當時有這種技術(shù)的只有大毛和鷹醬兩家,大毛死活不賣。經(jīng)過幾輪談判鷹醬倒是同意賣給兔子,只是需要1000萬美元1根,這個阻攔索經(jīng)過幾十到上百次就要進行更換,每天戰(zhàn)斗和訓練需要上億的成本,然而航母形成戰(zhàn)斗力就必須要從鷹醬這里買。后來兔子面向全國進行招標,發(fā)現(xiàn)兔子自己就能造航母阻攔索,并且鷹醬的阻攔索也是從兔子這里進口的。鷹醬從兔子這里進口的阻攔索的價格是40萬美元一根,轉(zhuǎn)手賣給美軍軍隊150萬美元1根。類似的事情還有很多,很多產(chǎn)品在兔子具有量產(chǎn)能力前,價格都貴的離譜,一旦兔子實現(xiàn)技術(shù)突破能進行量產(chǎn)后,量產(chǎn)的價格就能打到骨折。其實講這個故事想說明的是,打不死我們的終將使我們更強大。三金哥:吾輩當自強。期待混元早日能夠達到 GPT 的效果,這樣我們通過 LLM 助力我們的工作就能更進一步了,畢竟使用 GPT 模型還是有很多限制,除了比較貴之外,我們還要考慮敏感數(shù)據(jù)泄露的風險。大師兄:沒錯,安全是第一位的,我們在使用 GPT 時一定要注意信息安全。其實如果條件允許的話,我們可以考慮使用離線模型來助力我們的工作。三金哥:你是說自己部署 LLM 模型嗎?離線模型能達到在線模型的效果嗎?運行離線模型需要什么樣的硬件資源?大師兄:相比于在線模型,除了延遲比較小、資源消耗比較少之外,離線模型最大的特點是比較安全,不用把請求發(fā)給不受控制的 LLM。一般來說,在 Mac Book M3 上能跑的模型包括:Tiny-BERT、GPT-NEO 等模型,這些模型的參數(shù)從幾百萬到幾千萬不等。離線模型的部署方案比較成熟,每個離線模型的部署都有可以參考的文檔,這里就不重點展開了。其實,除了這種離線模型外,鵝廠還為我們提供了更安全、功能更強大的在線模型的平臺——混元一站式平臺。臺如其名,在這個平臺上,我們可以進行數(shù)據(jù)管理、模型訓練、模型調(diào)試、模型部署已經(jīng)模型評測等工作。一般來說,根據(jù)業(yè)務需求可以使用一些通用或者某些垂域的模型進行微調(diào)訓練,再將訓練后的模型進行部署。這種方式進行訓練部署的模型兼具了高安全性和高能力的特點。三金哥:鵝廠內(nèi)部的學習資源真的是太豐富了。除了你剛才提到的離線模型和自己訓練以及部署模型外,我了解到現(xiàn)在也有很多的本地知識庫,你能介紹下嗎?大師兄:我覺得你提的問題非常的好,不過我并不打算現(xiàn)在就來介紹本地知識庫。我們這次的目的是為了要系統(tǒng)性的介紹下 LLM 相關(guān)的基礎(chǔ)以及應用。關(guān)于 LLM 的基礎(chǔ)知識,我們前面已經(jīng)基本把 LLM 是什么,LLM 應該具備哪些特性,LLM 的主要發(fā)展歷史給講清楚了,又介紹了什么是在線 LLM 模型,什么是離線 LLM 模型。接下來你想了解的是本地知識庫,這其實可以歸屬為 LLM 的應用層面的話題,在聊這個話題之前,我們先來梳理下在應用層面 LLM 有哪些典型的能力和應用。三金哥:據(jù)我說知,LLM 具備非常強大的文本處理能力,展開來說,包括文本的摘要、推理、轉(zhuǎn)換以及擴充的能力。大師兄:你說的不錯,不過你說的只是 LLM 應用中很小的一部分(我總結(jié)的可能也不合理、全面,歡迎指正)。在我整理的思路中,將LLM的應用可以被看成兩種主要的應用,一種我定義為基礎(chǔ)應用,一種定義為了工作流的應用。其中基礎(chǔ)的應用在我看來基本都可以歸納為:問答系統(tǒng),即一個向“無所不知”的LLM提問,由LLM來解答并給出結(jié)果的一個系統(tǒng)。三金哥:你別說,仔細想想,上圖中的創(chuàng)作與生成、多模態(tài)、文本處理、數(shù)據(jù)分析與觀察這些都可以通過問答的形式來與 LLM 進行交互。大師兄:沒錯。從交互形式來看,問答系統(tǒng)有 API、web 頁面對話、app 交互、智能客服和 IDE 插件等類型。在開篇提到的混元就有 api、web 頁面對話和 app 交互這三種方式,其中混元的 APP 版本就是元寶。其實現(xiàn)在國內(nèi)各個公司的 LLM 都有 api、web 頁面對話和 app 交互這幾種方式。從實現(xiàn)路徑上看,我這里想跟大家討論的主要是知識庫系統(tǒng)的構(gòu)建和提示詞工程這兩點。大師兄:提示詞工程,也稱為 Prompt Engineering,是一種致力于優(yōu)化和提高大型語言模型(LLM)輸出質(zhì)量的技術(shù)和方法。它主要關(guān)注如何設(shè)計、構(gòu)造和優(yōu)化提示詞(Prompt),以引導 LLM 生成更準確、更有用、更符合用戶需求的文本??梢哉f,掌握了提示詞工程就掌握了打開 LLM 知識大門的鑰匙。大師兄:在鵝廠大家關(guān)于提示詞工程的理論知識以及實踐非常的豐富了。在看了大家的實踐之后,總結(jié)了一些提示詞工程的技巧:編寫清晰而具體的提示:這是確保 LLM 能夠準確理解用戶需求并作出相應回應的基礎(chǔ)。清晰的提示應該明確表達用戶想要 LLM 做什么,提供足夠的上下文信息,并盡可能具體地描述期望的輸出結(jié)果。例如,通過使用分隔符來清晰地表示輸入的不同部分,要求結(jié)構(gòu)化的輸出,以及要求模型檢查是否滿足特定條件等。一個小 tips:在和 LLM 交互時,要盡量的明確【做什么】,并且盡量避免【不要做】什么,這樣能有助于減少 LLM 的幻覺。給模型思考的時間:盡管 LLM 具有強大的處理能力,但在處理復雜任務時,給予模型一定的時間來思考和生成更準確的回應往往是有益的。之前參加公司內(nèi)部的一個培訓,老師有提到過:LLM 實際上就是在做文字接龍,我們要做的是降低我們不想要的詞的概率,同時提高我們想要的詞的概率。我們通過描述,生成結(jié)果的過程,即通過指定完成任務所需的步驟來提高 LLM 輸出結(jié)果的可用性。控制輸出結(jié)果的長度、格式和內(nèi)容:根據(jù)用戶需求,指定輸出的詞數(shù)、字符數(shù)、句子數(shù)等,以及提取特定的細節(jié),格式化輸出為 HTML 等。另外,可以讓 LLM 按照指定的格式進行輸出,比如:請你用“它通過【什么方法】,解決了【什么具體的問題】,類似【通俗易懂的比喻】”的格式來解釋上面的全部技術(shù)名詞實體,注意問題要具體。通過給 LLM 模型參考,解決 LLM 的幻覺,以提高輸出結(jié)果的正確性:適當?shù)慕o模型一些參考,也就是通常所屬的 one-shot 或者 few-shots,讓 LLM 知道輸入和輸出之間的對應關(guān)系。讓 LLM 進行自檢自查:由于各種原因,特別是在和 LLM 交互的步驟比較多,提示詞比較長的情況下 LLM 的回答有可能是錯誤的,這時一個可選的選項是在適當?shù)牟襟E讓 LLM 進行自查,自己確定下給出的回答是否正確,是否滿足了我們的訴求。類似的方法還有讓 LLM 對自己的回答評分,直到回答的結(jié)果 LLM 自己認為可以達到滿意的分數(shù)為止。設(shè)定 LLM 的角色:另外一個非常適用的方法是為 LLM 設(shè)定角色,一般來說,在設(shè)定角色時可以設(shè)定 LLM 的專業(yè)領(lǐng)域,回答問題的風格、語氣、模版、格式等。一個設(shè)定好的格式能讓 LLM 回答的內(nèi)容快速的作為后續(xù)操作的輸入。比如可以讓 LLM 幫忙生成格式化的測試用例,然后快速的把這些測試用例導入到智研平臺。尊重 LLM:在聽以為智者的分享時,曾提到過如何與 LLM 進行交互。除了前面提到的要提供 LLM 足夠的信息外,智者曾給出建議:要尊重 LLM,要把 LLM 想象成一個和你進行合作的工作伙伴,我們平時怎么和一起協(xié)作的伙伴怎么溝通交流,就要怎么和 LLM 一起溝通,好好說話,把話講明白。尊重也是生產(chǎn)力。- I 代表 Input(輸入),指的是提供給 LLM 的初始信息或背景。
- C 代表 Context(上下文),強調(diào)在對話或任務中保持連貫性的重要性。
- I 代表 Instructions(指令),即明確告訴 LLM 你希望它執(zhí)行什么操作或生成什么內(nèi)容。
- O 代表 Output(輸出),是對 LLM 生成的結(jié)果進行評估和反饋的過程。
ICIO 框架鼓勵在輸入時提供充分的信息,確保上下文的連貫性,給出清晰的指令,并對輸出結(jié)果進行細致的評估和調(diào)整。- B 代表 Background(背景),指為任務提供必要的背景信息。
- R 代表 Response(響應),即 LLM 生成的回應。
- O 代表 Objective(目標),明確任務的預期目標。
- K 代表 Knowledge(知識),強調(diào) LLM 在特定領(lǐng)域內(nèi)的知識儲備。
- E 代表 Evaluation(評估),對 LLM 的響應進行評估,并根據(jù)評估結(jié)果進行調(diào)整。
BROKE 框架注重從宏觀角度識別并優(yōu)化提示詞中的關(guān)鍵要素,以提高 LLM 在特定任務和領(lǐng)域中的表現(xiàn)。- C 代表 Clarity(清晰度),確保提示詞表達清晰,無歧義。
- R 代表 Relevance(相關(guān)性),強調(diào)提示詞與任務目標之間的關(guān)聯(lián)性。
- I 代表 Interactivity(交互性),鼓勵與 LLM 進行多輪交互以優(yōu)化結(jié)果。
- S 代表 Specificity(具體性),要求提示詞具體明確,避免模糊性。
- P 代表 Precision(精確性),追求 LLM 生成結(jié)果的精確度和準確性。
- I 代表 Involvement(參與度),指用戶應積極參與到與 LLM 的交互過程中。
- E 代表 Effectiveness(有效性),最終目標是確保 LLM 能夠有效生成滿足用戶需求的文本。
CRISPIE 框架從多個維度出發(fā),提供了一套全面的準則來評估和改進提示詞的設(shè)計,從而提升 LLM 的交互質(zhì)量和生成效果。這些框架都是為了幫助我們更好地理解和利用 LLM 的能力,通過精心設(shè)計的提示詞來引導模型生成更加準確、有用和符合用戶期望的文本。在實際應用中,我們可以根據(jù)需要靈活選擇或結(jié)合這些框架的原則來優(yōu)化我們的提示詞設(shè)計。告訴 LLM 方法論:另一個比較有效的建議是,在和 LLM 交互時,可以授之以漁,告訴他如何完成一個任務所需要的方法論,或者告訴他幾個可選的方法論,讓 LLM 自己去分析當前問題適合使用哪些方法論。上面是自己使用過程中以及從公司內(nèi)的分享、km 文章中總結(jié)的幾個要點,有很多非常專業(yè)的關(guān)于提示詞工程的文章,受限于文章篇幅和整體思路,以及尊重原創(chuàng)知識產(chǎn)權(quán),這里并沒有把所有的內(nèi)容羅列在這里,大家把這個作為一個參考,詳細內(nèi)容可以到文后的參考文章仔細閱讀。在實際使用的過程中有時只使用其中幾個就足以解決我們相對比較簡單的問題了。當我們遇到較復雜的問題時,就需要適當?shù)氖褂蒙厦娴囊恍┓椒ǖ慕M合了,這個需要大家發(fā)動智慧去探索。三金哥:你這些建議都是很好的,但是在實施的過程中,可能還是沒那么容易掌握,有沒有什么辦法能讓我一鍵生成很好的提示詞呢。大師兄:這個可以有,就是工具應用稍微麻煩一點,我這里提一些工具,你要是感興趣的話可以自己去查一查,從查閱的資料來看,這些工具應該還是有效果的,比如:- PromptPerfect:這是一個專注于提升 LLM 交互體驗的工具,它提供了一系列的模板和策略,幫助用戶根據(jù)不同的任務需求定制化提示詞。
- Prompt Studio:這個工具集成了多種分析工具,可以對 LLM 的響應進行深入分析,并據(jù)此調(diào)整提示詞的表述,以獲得更精準的輸出。
- LLM Optimizer:它通過算法自動優(yōu)化提示詞,減少手動調(diào)整的負擔。用戶只需輸入原始提示詞和任務目標,工具就能自動生成優(yōu)化后的提示詞。
- Prompt Tuner:這個工具允許用戶對 LLM 的輸出進行詳細的反饋,然后根據(jù)這些反饋微調(diào)提示詞,以實現(xiàn)更有效的交互。
這些工具各有特色,可以根據(jù)你的具體需求和偏好來選擇使用。三金哥:沒想到,提示詞工程有這么多的門道。我發(fā)現(xiàn),大家另外一個實踐比較多的方向是本地知識庫的構(gòu)建。我們現(xiàn)在是不是可以展開說一說本地知識庫的構(gòu)建了。大師兄:念念不忘必有回響啊,是時候來個 call back 了。首先,我們要考慮下什么場景比較適合使用本地知識庫。當你需要針對特定領(lǐng)域的知識進行問答,而且希望得到的答案具有較高的準確性和專業(yè)性時,使用本地知識庫會比較適合。而混元首頁上是這么描述的:有效解決事實性、時效性問題,提升內(nèi)容生成效果。比如,你是某個行業(yè)的專家,你需要快速獲取該領(lǐng)域內(nèi)的專業(yè)信息或解決具體問題時,建立一個包含了大量相關(guān)領(lǐng)域資料的本地知識庫,可以顯著提升你獲取信息和解決問題的效率。此外,對于企業(yè)內(nèi)部的知識管理和員工培訓,本地知識庫也是一個很好的選擇,因為它可以確保信息的準確性和安全性,同時方便團隊成員共享和學習。其次,我們要回答的問題是,我們要如何構(gòu)建本地知識庫呢。要想回答這個問題,還是要先考慮下,三金哥,在你看來,什么是本地知識庫?三金哥:本地知識庫嘛,不就是本地的知識嘛。本地的各種 iwiki、在線文檔、本地的文檔,這些是不是都可以理解為本地知識庫。大師兄:沒錯,這些確實都是本地知識,并且這些知識是構(gòu)建本地知識庫的很重要的一個組成部分。試想這樣的一個場景,我在一個文檔里定義了一次籃球球賽的秩序,我們假設(shè)這個文檔的名字叫《籃球聯(lián)賽秩序冊》,這里面規(guī)定了,在各種情況下的晉級規(guī)則,如果我們把這個文檔的相關(guān)知識灌輸給 LLM,那我們就可以向LLM去提問關(guān)于各種情況下,哪個隊伍可以晉級了?,F(xiàn)在越來越多的AI產(chǎn)品已經(jīng)開始支持以文件的形式進行輸入,讓文件作為一個小型的知識庫。其實維護一個低成本的知識庫的方式就是 iwiki,因為 iwiki 滿足了幾個特點:權(quán)限管理、方便協(xié)作、方便獲取。一個典型的應用場景是,需要使用 iwiki 上的內(nèi)容作為支持庫是,把 iwiki 文檔導出,再把導出的文件提供給 LLM,讓 LLM 根據(jù)文檔來回答問題。三金哥:這是一個成本很低,很好上手的一個本地知識庫的模型。那如果我們的本地知識的量級比較大,不適合在文檔中存儲,還有什么好的方式來構(gòu)建本地知識庫嗎?大師兄:這種情況下,比較推薦使用 RAG 以及 LangChain 來構(gòu)建自己的知識庫。RAG(檢索增強生成)是一種先進的自然語言處理技術(shù),它通過結(jié)合信息檢索系統(tǒng)的精確性和語言模型的強大生成能力,為基于自然語言的任務提供了更為靈活和精準的解決方案。三金哥:RAG 和 LangChain 真是如雷貫耳啊,最近在公司內(nèi)部聽到看到的關(guān)于 RAG 和 LangChain 的可是不少啊,大家都講了這么多了,大師兄你還說這一塊嗎?大師兄:那還是要說一說的,就像你說的,大家的實踐那么多了,說明基于 RAG 和 LangChain 的方案是切實可行的。我們這篇文章的目的又是給大家一個入門的全貌,那肯定要把最具代表性的 RAG 和 LangChain 分享給大家了。大師兄:下面將從 RAG 技術(shù)定義以及 RAG 技術(shù)優(yōu)勢這兩個方面來介紹 RAG:RAG技術(shù)定義
RAG 技術(shù)指的是對大型語言模型輸出進行優(yōu)化,使其能夠在生成響應之前引用訓練數(shù)據(jù)來源之外的權(quán)威知識庫。這種技術(shù)通過動態(tài)接入外部資源,使LLM得以即時訪問和利用廣泛且不斷更新的知識庫,進而提升模型在問答、對話、文本生成等任務中的表現(xiàn)。三金哥:從定義來看,RAG 非常的契合本地知識庫構(gòu)建啊。大師兄:不是一家人不踹一家門么。我們繼續(xù)來看 RAG 的技術(shù)優(yōu)勢。RAG技術(shù)優(yōu)勢
外部知識的利用 RAG 模型可以有效地利用外部知識庫,提供更深入、準確且有價值的答案。
數(shù)據(jù)更新及時性 具備檢索庫的更新機制,實現(xiàn)知識的即時更新,無需重新訓練模型。
答復具有解釋性 答案直接來自檢索庫,具有很強的可解釋性,減少大模型的幻覺。
高度定制能力 可以根據(jù)特定領(lǐng)域的知識庫和prompt進行定制,快速具備該領(lǐng)域的能力。
安全和隱私管理 通過限制知識庫的權(quán)限來實現(xiàn)安全控制,確保敏感信息不被泄露。
減少訓練成本 在數(shù)據(jù)上具有很強的可拓展性,可以將大量數(shù)據(jù)直接更新到知識庫,無需重新訓練模型。
三金哥:看了 RAG 技術(shù)定義、技術(shù)優(yōu)勢之后,又堅定了要用好 RAG 的信心啊,我已經(jīng)迫不及待的想要看看使用 RAG 如何構(gòu)造本地知識庫了。 2.3.2 使用 RAG 構(gòu)造本地知識庫
使用 RAG 構(gòu)建本地知識庫的步驟主要包括準備文本資料、文本分塊、嵌入以及存儲到向量數(shù)據(jù)庫,然后通過檢索增強生成(RAG)鏈來生成回答。以下是詳細的步驟和注意事項:
構(gòu)建本地知識庫的步驟
準備文本資料:收集和整理相關(guān)領(lǐng)域的文本資料,確保資料的質(zhì)量和完整性。
文本分塊:由于 LLM 的上下文窗口有限,需要將文本資料分割成較小的塊,以便 LLM 能夠處理。
嵌入以及存儲塊到向量數(shù)據(jù)庫:使用向量嵌入技術(shù)(如Ollama Embeddings)為每個文本塊生成向量,并將這些向量存儲到向量數(shù)據(jù)庫中,如 Weaviate。
檢索 & 增強:利用向量數(shù)據(jù)庫作為檢索器,通過用戶查詢和嵌入向量之間的語義相似性獲取數(shù)據(jù),然后使用一個固定的聊天模板將檢索到的上下文與用戶的問題結(jié)合起來,發(fā)送給 LLM 進行回答。
生成:LLM 根據(jù)接收到的上下文和問題生成回答,RAG 鏈將檢索器、聊天模板以及 LLM 組合起來,完成這一過程。
注意事項和優(yōu)化建議
在構(gòu)建知識庫時,注意文本的質(zhì)量和多樣性,確保覆蓋廣泛的主題和觀點。
在文本分塊時,合理設(shè)置塊的大小和重疊部分,以便 LLM 能夠有效地處理。
在嵌入和存儲到向量數(shù)據(jù)庫時,考慮使用不同的嵌入模型和數(shù)據(jù)庫技術(shù),以優(yōu)化檢索性能。
在檢索增強生成階段,嘗試不同的聊天模板和 LLM 模型,以獲得最佳的生成效果。
三金哥:在上面你提到了使用 RAG 構(gòu)建本地知識庫的步驟,其中使用向量嵌入技術(shù)為每個文本生成向量的 Embedding 技術(shù)以及檢索時使用的的向量檢索看起來是比較核心的操作,我們有什么辦法能將 RAG 落地嗎?
2.3.3 使用 LangChain 落地 RAG
大師兄:將 RAG 落地的一個比較成熟的做法是使用 LangChain。大師兄:簡單用一句話來解釋:LangChain是一個開源框架,它連接了外部計算和數(shù)據(jù)源與 LLM(大型語言模型),使得 LLM 可以實時訪問外部數(shù)據(jù)。使用 LangChain 將 RAG(檢索增強生成)落地是一個涉及多個組件和步驟的過程。主要的步驟包括:安裝和配置 LangChain、準備知識庫、編寫 LangChain 腳本、集成 LLM 模型、測試和調(diào)試以及部署和監(jiān)控。通過這些步驟,可以將 RAG 技術(shù)通過 LangChain 框架落地到實際應用中,從而提升 LLM 在特定領(lǐng)域知識問答中的準確性和專業(yè)性。三金哥:上面的這些步驟還是有些復雜,我們想要真實落地的話,有什么比較快捷的方式嗎?大師兄:非常好的問題?;煸罱l(fā)布了“混元 Embedding 所以服務的高效革新”這篇文章。文章中提到:混元不僅升級 Embedding 索引服務,還支持用戶通過自定義編排和 Agent 表單引導功能,將知識檢索與大模型相結(jié)合,讓用戶可輕松定制大模型交互流程,無需復雜編程,迅速構(gòu)建智能應用,助力大模型充分利用本地知識庫,優(yōu)化智能問答體驗。怎么樣,是不是已經(jīng)心動了,快去試試吧。三金哥:經(jīng)過你這么一解釋,基本把如何構(gòu)造本地知識庫給講清楚了,在應用層面,除了提示詞工程、本地知識庫構(gòu)建之外,還有其他的比較重要的應用嗎?大師兄:重要不重要不知道,工作流絕對是最近熱度最高的應用了。三金哥:我們能先從概念入手嗎?先分別介紹下工作流中涉及到的一些概念,再來說一說這兩者的關(guān)系,以及這兩者在實際工作中要如何使用。
大師兄:那我們就先看看 Agent 是什么。在開篇時,讓你給出一些和 LLM 相關(guān)的關(guān)鍵詞,你不是提到了智能體么,其實 Agent 就是智能體呀。不知道你的感受是什么,給我最直觀的感受是,最近大家都或多或少的在使用 Agent,現(xiàn)在很多的 AI 相關(guān)的實踐也都離不開 Agent,但是 km 上關(guān)于 Agent 的文章還是比較少。三金哥:我覺得可能的原因是大家對于 Agent 的應用都還在摸索中,我估計最近關(guān)于 Agent 的文章會逐漸多起來了。大師兄:我也是這么認為的。讓我們回到 Agent 的定義:LLM 中的 Agent 是基于大型語言模型(LLM)的智能體,能夠自主理解、規(guī)劃決策并執(zhí)行復雜任務。它們通過日常語言與用戶交流,并根據(jù)用戶的需求執(zhí)行相應的任務,展現(xiàn)出更高的靈活性和效率。這些 Agent 可以基于 LLM 的推理和生成能力來構(gòu)建,它們不僅能夠理解和生成文本,還能根據(jù)上下文進行規(guī)劃、學習和適應。三金哥:那么我們該如何上手去開始使用 Agent 呢。大師兄:目前很多 AI 工具,包括鵝廠自己的混元、元寶上都已經(jīng)開始支持智能體(Agent)了。這些平臺大同小異,從使用步驟上基本都可以概括為以下的過程:
- 確定目標和場景:首先明確你希望 Agent 在什么場景下執(zhí)行什么任務。
- 選擇合適的 LLM 模型:根據(jù)任務的復雜性和性能要求,選擇一個合適的 LLM 作為 Agent 的基礎(chǔ)。
- 設(shè)計 Agent 的行為邏輯:定義 Agent 如何感知輸入、做出決策和執(zhí)行動作的邏輯流程。
- 集成外部資源和工具:如果需要,將 Agent 與外部數(shù)據(jù)庫、API 或其他工具集成,以擴展其功能和能力。
- 訓練和優(yōu)化:在實際數(shù)據(jù)上訓練 Agent,并根據(jù)反饋進行迭代優(yōu)化,以提高其性能和準確性。
通過這些步驟,你可以創(chuàng)建一個功能強大的 Agent,利用 LLM 的能力來解決各種實際問題。三金哥:Agent 怎么看起來和提示詞有這么多的相似之處呀。針對于 Agent 和提示詞模板,我們都需要上面<如何使用 Agent>中的各個步驟來達成一個高可用的 Agent。大師兄:是這樣的,其實我們之前的一些實踐的過程,也基本都是先從寫提示詞工程入手,把提示詞調(diào)試好了之后,基本可以無縫從提示詞模板切換到Agent的定義。三金哥:那 Agent 我們基本了解清楚了,工作流又是什么呀?
大師兄:初步體驗了下混元上的“自定義工作流程編排”(工作流的內(nèi)部叫法),我理解工作流就像搭積木一樣,只不過這里是搭一個邏輯流程的積木。首先,得選擇好需要的各種插件組件和模型組件,這些就像是搭積木的基本塊。然后,通過 DAG 圖把它們連接起來,就像積木之間的連接一樣。
接下來,要定義好每個組件的輸入輸出,這就像是確定每塊積木的接口,確保它們能夠正確地拼接在一起。然后,需要構(gòu)建和運行這個 DAG 圖,這個過程就像是按照設(shè)計圖來搭建積木城堡。
當然,除了這些基本的步驟,還有一些高級的功能,比如可以通過邏輯分流節(jié)點來決定流程的不同走向,這就像是給積木城堡設(shè)計不同的通道。最后,當完成了所有的設(shè)計和配置,就可以發(fā)布設(shè)計好的應用了,這樣其他人就可以通過 API 來調(diào)用你的流程編排了。
三金哥:有點沒明白,你說的這個工作流怎么看起來和 Agent 沒有什么關(guān)系呢?
大師兄:你可以把上面提到的各個組件理解為一個 Agent,在實際編排的過程中,可以自定義 Prompt Template,如果你對我們前文提到的提示詞模板和Agent 的關(guān)系還有印象的話,那就可以基本理解:這里的 Prompt Template 可以大致的被看做一個 Agent。
三金哥:你這么一說,我就理解了Agent 和工作流的關(guān)系了。那現(xiàn)在 Agent Workflow 的應用現(xiàn)狀如何?
大師兄:據(jù)我所知,各大科技公司如字節(jié)跳動的豆包扣子、騰訊的混元等,均提供了支持工作流的平臺和工具。這些平臺通過提供易于使用的界面和豐富的 API 接口,降低了開發(fā)者構(gòu)建和管理 Agent 的門檻。
Agentic Workflow 和工作流的關(guān)系
三金哥:除了工作流之外,我還聽說了 Agentic Workflow 這個名詞,工作流(Agent Workflow)和 Agentic Workflow 是一個事情嗎?大師兄:我理解,這倆不完全是一回事。如果我說的不對,歡迎大家指正。我先大致的說下我對工作流和 Agentic Workflow 的關(guān)系的理解:前面我們已經(jīng)介紹了工作流,工作流基本可以被理解為:把 Agent 看做積木的組件,通過這些組件來拼搭積木的過程。而 Agentic Workflow 這個概念是在今年的 4 月初,吳恩達老師在美國紅杉做了一場演講,提出了 Agentic Workflow 的概念,并介紹了 4 種主要的 Agentic Workflow 設(shè)計模式。這里談到的幾個概念,對于我們理解 LLM 的應用比較重要,且這幾種設(shè)計模式可能是未來 LLM 應用的方向。Agentic Workflow 主要包括以下幾種設(shè)計模式:- Reflection(反思):一個讓 AI Agent 通過自我審視和迭代來提高輸出質(zhì)量的過程。這樣的機制不僅能讓 Agent 更加精準地完成任務,還能讓它從錯誤中學習,不斷優(yōu)化自己的表現(xiàn)。
- Tool Use(工具):LLM 可以生成代碼、調(diào)用 API 等工具進行操作。例如,Kimi Chat使用網(wǎng)頁搜索工具來檢索相關(guān)內(nèi)容,并基于檢索結(jié)果進行總結(jié)分析,最后給出結(jié)論。
- Planning(規(guī)劃):讓 Agent 自行規(guī)劃任務執(zhí)行的工作流路徑,面向于簡單的或一些線性流程的運行。這包括子目標分解、反思與改進,將大型任務分解為較小可管理的子目標處理復雜的任務。
- Multiagent Collaboration(多智能體協(xié)同):多個 Agent 扮演不同角色合作完成任務。例如,通過開源項目 ChatDev,一個大語言模型可以扮演公司 CEO、產(chǎn)品經(jīng)理、設(shè)計師、代碼工程師或測試人員等不同角色,共同開發(fā)一個應用或復雜程序。
三金哥:使用工具和多智能體協(xié)同,這兩個光是看概念,都能讓人產(chǎn)生無限遐想啊。那 Agentic Workflow 和 Agent 之間又是什么關(guān)系呢,知道這兩者之間的關(guān)系,我應該就更能理解 Agentic Workflow 了。大師兄:好問題。Agents 就像是能夠獨立行動的自主系統(tǒng),它們可以自己完成任務,做出決策,甚至與其他系統(tǒng)或用戶互動。而 Agentic Workflow 則是這些 Agents 行動的一種方式,它強調(diào)的是通過迭代和互動的方式來提升 AI 的表現(xiàn)。想象一下,Agents 是一群小偵探,而 Agentic Workflow 就是他們解決案件的方法。小偵探們(Agents)各自有自己的專長,可以獨立偵查(執(zhí)行任務),但他們也可以合作(共享目標和決策),一起解決更復雜的案件。而 Agentic Workflow 就是這個團隊合作的框架,它讓小偵探們能夠反思自己的偵查方法(自我反思),制定計劃(規(guī)劃),并且相互協(xié)作(多智能體協(xié)同)。所以,Agents 是執(zhí)行任務的實體,而 Agentic Workflow 是指導這些實體如何更有效地工作的過程。兩者結(jié)合起來,就能夠創(chuàng)造出更加強大和靈活的人工智能解決方案。三金哥:我發(fā)現(xiàn)關(guān)于Agent和工作流的很多說法,你都使用了比喻呀,是不是直接進行說明不大好解釋呢。
大師兄:是有一點。這些概念相對比較新,我們的應用又比較少,最好的能說明問題的方式可能就是比喻了。
三金哥:看來我們對于工作流的應用和探索還不夠,不知道現(xiàn)在有哪些工作流的成熟的應用。
大師兄:這個你真把我給問到了。這個概念相對比較新,目前我還沒看到比較好的應用,后面如果我了解到成功的應用,再和大家分享吧。
三金哥:那也只能這樣了吧。我感覺后面這塊應該是LLM應用的一個重點方向。你是怎么看待 LLM 的未來應用方向的?
大師兄:你這個問題問的有點太大了,以我淺薄的知識積累,很難回答好這個問題。
三金哥:我一直以為你沒有自知之明呢,哈哈
大師兄:我只能試著回答一點。以 LLM 現(xiàn)在具備的能力,越來越多的垂域知識問答系統(tǒng)將會被構(gòu)建出來,在各自的垂域中大家會逐漸探索利用 LLM 現(xiàn)有的能力去做可落地的提效方案,另外工作流可能會是一個不錯的突破口,畢竟多個 Agent 按照一定的套路進行交互,還是讓我們比較有想象空間的。
再有,隨著 LLM 的發(fā)展,我們期望 LLM 能夠具有更強大的能力,特別是多模態(tài)的能力,當 LLM 具備多模態(tài)能力之后,圍繞著 LLM 多模態(tài)能力的應用將成為未來一段時間的重點。當然,如果發(fā)展的順利的話,在我們的有生之年或許能看到 AGI 的實現(xiàn)。
三金哥:AGI 又是啥?
大師兄:AGI 是 Artificial General Intelligence 的縮寫,即通用人工智能,指機器能夠完成人類能夠完成的任何智力任務的能力。
三金哥:那 AGI 與 LLM 有什么關(guān)系?
大師兄:AGI 的實現(xiàn)離不開 LLM 和多模態(tài)能力的結(jié)合。LLM 通過在計算密集型的自監(jiān)督和半監(jiān)督訓練過程中,從文本文檔中學習統(tǒng)計關(guān)系,來獲得這些能力。大語言模型也是一種 GenAI,通過輸入文本并重復預測下一個標記或單詞,來生成新的文本。盡管 AGI 的潛在影響十分巨大,但也存在著許多挑戰(zhàn)和風險,比如安全性、隱私保護、失業(yè)風險、道德問題等。
三金哥:期待 LLM 能夠得到長足的發(fā)展,也期望我們所擔心的問題,在 LLM 的發(fā)展過程中能夠得到解決,我們相信人類的智慧。