得物大模型平臺接入最佳實踐
來源:得物技術
目錄
一、背景
二、業務系統接入大模型的三種方式
三、直接PROMPT(提示語)方式接入
1. PROMPT的常用技巧
1.1 Zero-Shot, One-Shot, Few-Shot
1.2 鏈式思維
1.3 任務分解
2. 如何在PROMPT提示語中嵌入業務知識
四、透過RAG(檢索增強)方式接入
1. RAG的實現
1.1 RAG的流程
1.2 知識檢索如何實現
2. 業務接入RAG檢索的例子
五、透過Fine-tuning(微調訓練)方式接入
1. 微調訓練的方式有哪些
2. KubeAI大模型平臺上如何進行Fine-tuning
3. 一些Fine-tuning微調的例子
六、業務系統接入大模型的最佳路徑
漸進式接入大模型
七、總結與展望
一
背景
最近經常收到內部業務方的諮詢,他們想知道"如何讓我們的業務系統接入大模型提效"。為了回答這個問題,我們梳理了 KubeAI 大模型平臺對接的一些業務實踐與一些業界經典案例分享給大家。
OpenAI 的第一次開發者大會的主題為 Maximizing LLM Performance,提出業務系統可以透過三種方式接入大模型,PROMPT(直接給大模型輸入提示詞),RAG(透過檢索增增強來提升大模型的能力),Fine-tuning(透過微調訓練來提升大模型的能力)。
本文借鑑 OpenAI 的觀點,結合具體實踐例子分別介紹這三種接入方式,最後建議業務可以透過漸進(PROMPT,RAG,Fine-tuning)的方式接入大模型,從而達到最佳的收益效果。
二
業務系統接入大模型的三種方式
前面我們簡單提過,目前業務系統接入大模型一共有三種方式,分別是 PROMPT(直接給大模型輸入提示語),RAG(透過檢索增強來提升大模型的能力),Fine-tuning(透過微調訓練來提升大模型的能力)。下面我們對這三種方式先給出簡單的示例解釋。
PROMPT(直接給大模型輸入提示語)
透過 PROMPT 方式接入大模型是最簡單最直接的方式。即我們拿到開源大模型後,直接推理部署執行起來。然後透過給大模型傳送提示語的方式,讓大模型解決你的問題返回答案。比如可以直接讓大模型對一篇文章生成總結等。
RAG(透過檢索增強大模型的能力)
透過 RAG 的方式接入大模型,是一種利用檢索增強生成(Retrieval Augmented Generation)技術,讓大語言模型(Large Language Model,LLM)能夠參考相關的知識,從而提高生成質量和準確性的方法。
RAG 的核心思想是,先透過向量資料庫(Vector Database)檢索出與使用者提問最相關的文件或知識,然後將這些文件或知識融入到大模型的輸入(Prompt)中,讓大模型在生成答案時能夠參考這些資訊。從而讓大模型更加了解業務相關知識。
Fine-tuning(透過訓練增加大模型的能力)
Fine-tuning 的方式是指在一個已經預訓練好的大模型的基礎上,用業務特定的資料集對模型的部分或全部引數進行微調,以適應特定的任務或領域。透過 Fine-tuning,可以讓大模型更瞭解業務的需求和特點,提高模型在業務場景中的表現。
接下來我們會結合 KubeAI 大模型平臺對接的業務實踐或一些業界經典案例,繼續詳細闡述業務系統如何透過上面三種方式接入大模型。
三
直接PROMPT(提示語)方式接入
所謂 PROMPT 方式接入大模型,是指給大模型設計合適的提示語(Prompt)讓大模型產生對應的輸出,從而完成各種任務。最簡單的 PROMPT 比如上面的例子,讓大模型寫一首關於春天的詩,然後大模型會產生對應的輸出。
在複雜業務場景下,PROMPT 的設計往往非常複雜。因此專門研究如何設計 PROMPT 的"PROMPT 工程"應運而生。PROMPT 工程是一門利用大語言模型(Large Language Model, LLM)的內在能力,透過設計合適的提示語(Prompt)來完成各種任務的學科。其目的是找到最優的提示語,使模型的效能和效率達到最高。
以下關於 PROMPT 的梳理參考了 Prompt Engineering Guide(),openai-cookbook()裡提到的相關內容與論文,感興趣的同學可以去深入瞭解下。
PROMPT的常用技巧
目前大模型的輸入上下文長度一般為 4K 或 16K,最近有些大模型支援 32K 或 128K,為 Promopt 的設計留下了比較大的發揮空間。
Zero-Shot, One-Shot, Few-Shot
OpenAI 關於 GPT-3 的論文"Language Models are Few-Shot Learners",這篇論文詳細介紹了 GPT-3,一個強大的自然語言處理(NLP)模型。其中的亮點之一便是 Few-Shot Learning。
Zero-Shot 學習:就是讓模型在沒有任何相關資料的情況下,直接用自然語言指令來完成一個新任務。比如,你可以告訴模型“把這段英文翻譯成中文”,然後模型就會嘗試做出翻譯,而不需要給它任何翻譯的例子。這種方法最方便,但也最有挑戰,因為有些任務可能很難用自然語言指令來清楚地描述。
One-Shot 學習:就是讓模型在只有一個相關資料的情況下,用自然語言指令和一個例子來完成一個新任務。比如,你可以告訴模型“把這段英文翻譯成中文”,然後給它一個英文句子和它的中文翻譯作為例子,然後模型就會嘗試根據這個例子來做出翻譯。這種方法比 Zero-Shot 更容易讓模型理解任務的內容或格式,因為有一個例子可以參考。
Few-Shot 學習:就是讓模型在有少量相關資料的情況下,用自然語言指令和幾個例子來完成一個新任務。比如,你可以告訴模型“把這段英文翻譯成中文”,然後給它幾個英文句子和它們的中文翻譯作為例子,然後模型就會嘗試根據這些例子來做出翻譯。這種方法比 One-Shot 更能提高模型的準確性和穩定性,因為有更多的例子可以參考。
在以上三種情況下,Prompt(提示語)就是用來提供自然語言指令和少量例子的語句,以便引導模型完成任務。
鏈式思維
鏈式思維(Chain of thoughts)解決問題的方法是把複雜問題拆分成很多環環相扣的步驟,逐步解決問題。這種逐步解答示例可以幫助模型更好地理解和解決需要多步驟推理的複雜問題。
相關論文連結:Large Language Models are Zero-Shot Reasoners()
提示語設計:
作者發現,透過在每個答案之前簡單新增“讓我們逐步思考(Let's think step by step)”,大模型可以成為出色的零樣本推理者。將這個簡單的技巧應用於 MultiArith 數學資料集,作者發現 Let's think step by step
使準確度翻了四倍,從 18% 到 79%!
舉例:
下面是在 text-davinci-003 模型上的實驗:
錯誤答案如下:
Q
:一個雜耍者可以拋 16 個球。球的一半是高爾夫球,而高爾夫球中又有一半是藍色的。有多少個藍色的高爾夫球?
A:8 個藍色的高爾夫球。
加了鏈式思維提示後,得到了正確的答案:
Q:一個雜耍者可以拋 16 個球。球的一半是高爾夫球,而高爾夫球中又
有一半是藍色的。有多少個藍色的高爾夫球?
讓我們一步一步思考
A:首先,一個雜耍者可以拋 16 個球,所以一共有 16 個球。其次,其中一半是高爾夫球,所以有 8 個高爾夫球。最後,高爾夫球中又有一半是藍色的,所以有 4 個藍色的高爾夫球。
下面是作者論文中的例子:
任務分解
任務分解是當一個任務比較複雜時,往往是將一個複雜的任務分解成更小、更容易處理的子任務的過程。經典的例子,比如 AB 兩個城市之間搬運貨物,需要分三個步驟,A 城市裝貨,AB 城市之間運輸,B 城市卸貨。
前期比較火爆的浙大 & 微軟研究院提出的 HuggingGPT 工程,就是任務分解的典型應用。
相關論文連結:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace()
提示語設計:
HuggingGPT 會把一個多模態任務拆分成多個子任務,然後再以此執行每個子任務,從而實現多模態的功能。
HuggingGPT 的任務拆分是透過 PROMPT 提示大模型來實現的。下面看下 HuggingGPT 的一個 PROMOT 的具體內容(已經翻譯成中文):
使用者請求內容如下:
根據/examples/d.jpg的姿勢和/examples/e.jpg的內容,請向我展示一張新圖片。
HuggingGPT 給大模型的提示如下:
這些 Prompt 後面還會增加一些請求返回的示例,也就是 Few-Shot,讓大模型對這些 Prompt 理解更加精確,這個我們在前面的 Few-Shot 部分有講到。
大模型的返回如下:
[{ "task": "openpose-control", "id": 0, "dep": [-1], "args": { "image": "/examples/d.jpg" }}, { "task": "image-to-text", "id": 1, "dep": [-1], "args": { "image": "/examples/e.jpg" }}, { "task": "openpose-text-to-image", "id": 2, "dep": [0, 1], "args": { "image": "<GENERATED>-0", "text": "<GENERATED>-1" }}]
由此可見,基於任務拆解 PROMOPT,完全讓大模型具備任務拆解的功能,把一個複雜的多模態任務拆分成一個個簡單的 task,然後 HuggingGPT 會依據 GPT 返回的 task,去一步一步執行,返回給使用者最後結果。
如何在PROMPT提示語中嵌入業務知識
在為大模型設計 PROMPT 時,通常可以將其分為四個可選部分,以指導模型的響應和行為:
使用者指令:明確告訴大模型需要執行的具體任務,例如扮演特定角色,生成某些內容等。
對話上下文:提供之前的對話內容,幫助大模型理解當前對話的背景,從而生成更相關的回應。
附加內容:補充額外資訊,如基礎庫的細節或特定業務知識,以豐富大模型的知識庫和回答質量。
輸出要求:指定期望的輸出格式,輸出內容限制等。
這四個部分並非都必須包含在每個 PROMPT 中,可以根據實際需求靈活選擇。
從上圖的 PROMPT 四要素中可以看出,業務知識可以嵌入到 PROMPT 的附加內容中,業務場景對話可以嵌入到 PROMPT 的對話上下文中。
下面是 KubeAI 大模型平臺對接的"AI畫原型"專案的一個 PROMPT 寫法(簡單版本),該專案的目的是使用者寫完產品描述後,讓大模型基於產品描述生成滿足標準的前端頁面。我們來拆解下他的 PROMPT。
這樣的 PROMPT 設計允許業務知識透過附加內容部分嵌入到提示語中。可見按照 PROMPT 四要素的原則去設計,可以把業務相關知識比較容易嵌入到提示語中。
四
透過RAG(檢索增強)方式接入
雖然透過 PROMPT 的方式直接接入大模型比較簡單,但是直接 PROMPT 對接會面臨兩個挑戰:
PROMPT 直接諮詢大模型的時候,大模型並不瞭解你的業務知識,有時還會產生幻覺,導致回答質量不佳。
PROMPT 裡嵌入的業務知識需要隨著業務的變化而不斷更新。
為了克服這些挑戰,RAG 技術應運而生。RAG 技術是一種利用大語言模型(LLM)的應用方案,它的全稱是檢索增強生成(Retrieval Augmented Generation)。它的核心思想是透過檢索獲取相關的知識,並將其融入到大模型的輸入中,讓大模型能夠參考這些知識來給出合理的回答或生成內容。
大模型 RAG 技術有很多優勢,例如:
它可以解決大模型自身知識不足、幻覺問題、資料安全性等問題。
它可以利用私域資料或實時資料,提高大模型的時效性和專業。
RAG的實現
RAG的流程
上圖展示了 RAG 的一個典型流程,我們來逐步分析這個流程。RAG 的主要步驟如下:
使用者根據自己的需求輸入指令,例如:公司 IT 的電話是多少?
知識檢索器根據使用者的指令,從業務知識儲存池(向量資料庫)中檢索(向量搜尋)出相關的知識。例如:在向量資料庫中找到公司 IT 的電話號碼等業務知識。
將使用者的指令和業務知識組合成大模型的 PROMPT,例如組合後的結果為:基於如下內容回答:公司 IT 的電話是多少?。內容:公司的 IT 電話是 XXXX。
向大模型發出 PROMPT,並得到大模型的回答。
知識檢索如何實現
知識檢索可以從網際網路直接獲取知識,也可以先在企業內部儲存業務知識,再進行檢索。由於企業內部知識儲存的應用較為廣泛,我們這裡只介紹這種實現方式。
業務知識檢索主要包括兩個環節,分別是業務知識的錄入和檢索。我們來逐一分析這兩個環節的具體步驟。
業務知識錄入:
使用者將業務知識文件透過工具切分成若干片段。
對於每個文件片段,利用 Embedding Model 計算其對應的向量表示。
將文件片段和向量表示一起儲存到向量資料庫中。
業務知識檢索:
使用者輸入檢索指令,利用 Embedding Model 計算其對應的向量表示。
在向量資料庫中查詢與檢索指令向量最相似的文件片段向量。
返回檢索結果,即與檢索指令最匹配的業務知識。
業務接入RAG檢索的例子
下面以 KubeAI 大模型平臺對接的數倉指標智慧分析為例,講解下一個具體業務如何透過 RAG 的方式接入大模型。
該專案能夠根據使用者的自然語言描述,直接生成使用者視覺化的資料展示。其簡單 RAG 推理流程如下:
Agent 接收到使用者的諮詢問題,立即訪問向量資料庫,找出需要用到的數倉指標。
Agent 利用使用者的諮詢和指標,呼叫大模型,由大模型產生相應的查詢指令。
Agent 執行查詢指令,獲得資料結果,將結果返回並呈現給使用者。
五
透過Fine-tuning(微調訓練)接入
微調訓練的方式有哪些
上圖展示了一個完整的大型模型訓練過程,從大型模型的預訓練到應用於業務場景,通常包括三個階段:
預訓練
定義:在大規模的無標註文字上,使用自監督學習的方法,訓練一個通用的語言模型,使其能夠捕捉語言的統計規律和語義知識。預訓練是為了建立一個通用的語言理解基礎。
資料例子:
今天是個好日子,我和我的朋友們一起去公園玩,我們在草地上野餐,還玩了飛盤和滑梯,我覺得很開心。
指令調優
定義:在預訓練的基礎上,使用一些有標註的(指令,輸出)對模型進行微調,使其能夠根據人類給定的指令,生成期望的輸出。指令調優是為了提高模型的可控性和可解釋性,使其能夠按照使用者的意圖執行不同的任務。
資料例子:
指令:寫一首五言絕句,主題是春天輸出: 春風吹綠江南岸 桃花開滿山頭紅 鶯歌燕舞迎新歲 人間四月天如夢
RLHF
定義:在指令調優的基礎上,使用強化學習的方法,利用人類的反饋作為獎勵訊號,對模型進行進一步的最佳化,使其能夠生成更符合人類偏好的輸出。RLHF 是為了提高模型的質量和安全性,使其能夠避免一些不合理或不道德的生成結果。
KubeAI大模型平臺上如何進行Fine-tuning
在 KubeAI 大模型平臺上,使用者可以按照以下步驟迅速啟動大型模型訓練並進行自動部署:
選擇大模型,基於之前提到的大模型選擇原則,在大型模型平臺上選擇您需要的大模型。
上傳訓練資料,按照上述資料準備方法,將您準備好的資料上傳到大型模型平臺。
配置訓練引數,通常情況下,選擇預設配置引數,如 Lora 即可。這些引數通常經過最佳化以獲得最佳的訓練效果可。
訓練,點選相應按鈕,啟動訓練過程。大型模型平臺將自動處理訓練任務,以便您專注於業務應用的開發和部署。
一些Fine-tuning微調的例子
我們以訓練一個某業務領域的智慧客服機器人為例,講解下如何透過 Fine-tuning 的方式構建一個智慧客服機器人。
訓練的目的是構造一個熟悉某業務領域知識的智慧客服機器人。
資料準備。
準備業務領域知識,可以是文件,過往客服解決問題的聊天記錄等。
資料清洗,主要目的是提升資料質量。最常見的操作比如,資料分類後進行去重,過濾,補充等方式。
構造客服聊天資料,基於上一步清洗好的資料,構造一問一答形式的客服聊天資料,可以呼叫其他大模型透過 PROMPT 的方式直接構造。
微調大模型。
基礎大模型選型,選型考慮大模型的大小, 各項指標的評分等。模型引數越大越聰明,但是推理速度會變慢。所以最好的方式是可以多選幾個大模型,做實驗去評測。
微調大模型,可以選擇一下開源框架直接微調大模型,比如大部分情況直接透過 Lora 的方式微調出一個 Lora Adapter 引數模型即可。
六
業務系統接入大模型的最佳路徑
漸進式接入大模型
前面介紹了業務如何透過 PROMPT(提示語),RAG(檢索增強),Fine-tuning(微調訓練)三種方式接入大模型。OpenAI 的開發者大會 Maximizing LLM Performance 提出的業務接入大模型的方式,我們理解應該是漸進式接入,其流程如下。
第一步,業務先用 PROMPT 方式接入大模型。這一步很簡單,只需編寫 PROMPT,並建立基本的呼叫邏輯,測試效果。
第二步,業務在第一步的基礎上,可以用 RAG 的方式接入。透過 RAG,可以改變 PROMPT 的內容,加入更多業務相關的知識。當然如果業務有充足的訓練資料,這一步也可以省略,直接進入第三步的 Fine-tuning 方式。
第三步,業務用 Fine-tuning 方式接入大模型,可以讓大模型更好地理解業務的知識。這一步需要有足夠的高質量的資料,資料可以用第二步的 RAG 生成的資料,或其他來源的資料。Fine-tuning 相比於 RAG,可以提高大模型的推理準確性和速度。
七
總結與展望
本文介紹了業務系統接入大模型的三種方式:PROMPT、RAG和Fine-tuning。我們透過具體的實踐案例,展示了這三種方式在不同場景下的效果和優勢,以及如何根據業務需求和資料情況選擇合適的方式。最後建議業務接入大模型的最佳實踐,漸進式的接入,即 PROMPT,RAG,Fine-tuning,這個也是借鑑 OpenAI 開發者大會提出的接入方式。
大模型是未來業務創新的重要驅動力,可以幫助業務提升效率、質量和使用者體驗。建議業務可以透過漸進的方式接入大模型,從 PROMPT 開始,逐步嘗試 RAG 和 Fine-tuning,以達到最佳的收益效果。也期待與更多的業務部門合作,共同探索大模型的更多可能性。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027828/viewspace-3004759/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 得物大模型平臺,業務效果提升實踐大模型
- 得物App資料模擬平臺的探索和實踐APP
- 得物前端巡檢平臺的建設和應用實踐前端
- 得物技術多興趣召回模型實踐模型
- 滴滴七層接入平臺實踐和探索
- KubeSphere 接入外部 Elasticsearch 最佳實踐Elasticsearch
- 得物佈局構建耗時最佳化方案實踐
- 大資料開發平臺(Data Platform)在有讚的最佳實踐大資料Platform
- 得物染色環境落地實踐
- 璞華AI大模型應用的探索之路:從AI大模型開發與運營平臺到應用寶庫的最佳實踐AI大模型
- 裝置接入物聯網平臺必知必會--裝置接入類
- 得物App ANR監控平臺設計APP
- Active Network實踐:構建Kubernetes平臺的最佳工具
- Nodejs裝置接入阿里雲IoT物聯網平臺NodeJS阿里
- 得物技術埋點自動化驗證的探索和最佳實踐
- 如何選擇最佳物聯網平臺?
- 智慧校園全平臺綜合概述與最佳實踐
- 得物商家域精準測試實踐
- 美圖大資料平臺架構實踐大資料架構
- 我是庖丁,<肢解IOT平臺>之物模型模型
- 得物自研API閘道器實踐之路API
- 得物社群 golang 灰度環境探索和實踐Golang
- 四 阿里大模型接入:模型微調阿里大模型
- JuiceFS 在大搜車資料平臺的實踐UI
- [平臺建設] HBase平臺建設實踐
- Github 十大最佳實踐Github
- Redis 在 vivo 推送平臺的應用與最佳化實踐Redis
- vivo版本釋出平臺:頻寬智慧調控最佳化實踐-平臺產品系列03
- 企業大資料平臺MapReduce應用之Join實踐!大資料
- DataPipeline在大資料平臺的資料流實踐API大資料
- OPPO大資料診斷平臺設計與實踐大資料
- 探索大模型:袋鼠雲在 Text To SQL 上的實踐與最佳化大模型SQL
- 愛奇藝深度學習雲平臺的實踐及最佳化深度學習
- HBase 在統一內容平臺業務的最佳化實踐
- 工業裝置資料快速接入華為雲物聯網平臺
- LangChain接入本地/國產大模型LangChain大模型
- 國標GB28181影片平臺EasyCVR大華裝置影片平臺EasyCVR平臺如何接入攝像機VR
- 得物複雜 C 端專案的重構實踐