一文教你基於LangChain和ChatGLM3搭建本地知識庫問答

华为云开发者联盟發表於2024-05-23

本文分享自華為雲社群《【雲駐共創】LangChain+ChatGLM3實現本地知識庫,轉華為雲ModelArts,實現大模型AI應用開發》 ,作者:葉一一。

一、前言

本期華為雲的講師是華為雲EI開發生態的工程師傑森,分享主題是:基於LangChain+ChatGLM3的本地知識庫問答。

現如今,大語言模型發展到達了一個新高度,其應用場景也是適用於千行百業。而華為雲EI更是具備了全棧AI能力,其提供的ModelArts是一站式AI開發平臺,可幫助開發者智慧、高效地建立AI模型和一鍵模型部署到雲、邊、端。

本文內容主要為對講師的精彩分享內容梳理以及結合筆者對ModelArts的實際業務場景應用經驗的概括。

閱讀本文將有以下收穫:

  • 瞭解華為雲ModelArts的AI能力;
  • 瞭解LangChain的基本使用;
  • 瞭解如何結合ChatGLM3實現本地知識庫的問答。

二、基於LangChain+ChatGLM3實現本地知識庫問答

2.1 大模型的發展歷程

2.1.1 ChatGPT

2022年1月30日,0penAl釋出了ChatGPT。這是一個基於大語言模型(LLM)的對話機器人(Chat Bot),它的定位是一個AI助手,可以回答通識性和專業領域的各種問題(包括編碼相關問題),支援中英文在內的多語言,且支援多輪對話。

ChatGPT自發布以來已經十分火熱,短短的2個月,月活已經破億,遠超於TikTok等一些應用。

1.png

2.1.2 什麼是大模型?

大模型,簡單來說就是預訓練時引數規模達到一定量級的模型。

常見的大模型主要包括:大語言模型,CV大模型,多模態大模型,科學計算大模型等。

多模態大模型是指透過文字生成圖片或影片的大模型。科學計算大模型,比如氣象類、藥物分子結構等的大模型。

最早,大模型在2019年,谷歌發明了T5大模型。當時它的引數規模就已經十分龐大了。

緊接著,2020年,推出了GPT-3,GPT-3在以文生成圖片上嶄露頭角。

再往下,各個企業釋出了各種各樣的大模型。其中最重要的是2022年的ChatGPT以及2023年的ChatGPT-4。

這些大模型已經能夠解決日常大量的問題,幫助我們快速的完成很多的事情。比如,透過大語言模型,可以實現語言翻譯、情感分析等。

同時,大模型依賴大量的資料和對應的引數來進行調整訓練出來的。隨著大模型的不斷髮展,它所擁有的對應資料和引數,往往會更多。而且隨著我們的當前科學技術的發展,它的效能提升從而使它的功能更加強大。

雖然,大模型在訓練的時候,用到的是它在釋出之前用到的資料,比如ChatGPT,它是在2022年釋出的,它可能沒有2023年的知識,但是它可以透過外掛一些常見的資料集、資料庫,從而實現不斷的微調學習,從而進一步的提升自己知識更新的及時性,不和世界脫軌。

1-2.png

2.1.3 如何開發大模型?

以大語言模型訓練過程為例。

首先做一系列資料的採集,採集過程中,需要大量的資料。常見的比如網上的電子書、論壇帖子、GitHub上的程式碼。

然後,開始大語言模型的訓練,在訓練的過程中,需要選擇合適的訓練演算法。比如Transformers、DeepSpeed、Megatron-LM等。

有了演算法,我們想要把大量資料運用起來,還需要充足的算力。光GPT-3語言模型訓練使用了10萬個GPU,

耗費了大概100 PFLOPS的算力。

再有了這些資料的準備、合適的演算法、充足的算力之後,我們就正式的對應訓練。

訓練用簡單的語言來說,就是使大語言模型能夠根據輸入的指令生成對應的答案的能力。

訓練出來的就是一個簡單的預訓練的模型。它能夠實現一些基本的能力,再往下我們還會做一些指令的微調。

指令微調,是指它能夠適配各種各樣的複雜的任務。比如下達一條寫一部小說的指令,它可能會問你需要寫什麼的風格的小說、主角的特點等等一系列問題。然後再基於這些問題,把小說寫出來。

再往後,需要進行類人對齊,簡單理解是指使模型生成更加貼近人類習慣的文字內容。

1-3.png

2.2 華為雲全棧AI能力

2.2.1 華為雲EI: 全棧全場景產品&服務,助力千行百業智慧升級

華為雲EI提供全棧全場景產品&服務,助力千行百業智慧升級。

首先,華為雲EI以Ascend系列GPU和Kunpeng系列GPU等多元算力作為底座。

往上是,提供自研的MindSpore AI開發框架,同時也支援市面上的TensorFlow、PyTorch、Ray、DeepStream、 MediaPipe等AI開發框架。

有了算力和框架,再往上華為雲EI提供對應的AI開發平臺——ModelArts,ModelArts就能夠完成從資料的標註、處理到模型的訓練,也包括大模型的訓練,到最後的評估、生成以及部署和監測。

在訓練過程中,如果有海量的資料,尤其像大模型有大量的資料,可以使用華為雲的資料生產線 DataArts,DataArts提供了雲資料倉儲和資料治理中心,能夠做海量資料的管理。

完成了AI通用開發之後,如果不想做底層的AI開發,華為雲提供了AI通用能力。比如OCR、SIS、NLP等通用AI。也包括華為雲的盤古大模型,它提供了多種大規模模型部署、開發、推理形式。另外還有天籌AI求解器,更多的是被應用於商用的AI生成。

有了通用的AI能力,就能應用到具體的行業/場景,比如政務、銀行、生物製藥、AIGC等領域。

在整體AI應用的開發中,我們可能還需要資料集、工具包、演算法、模型等等,這些可以從華為雲生態社群 AI Gallery中找到。也可以在 AI Gallery釋出資料集等,讓其他的開發者看到(使用),或者更進一步的商業變現。

2-1.png

2.2.2 ModelArts架構簡介

AI開發平臺ModelArts,是一個構築全棧全生命週期的模型開發工具鏈。

ModelArts依賴昇騰/GPU和鯤鵬/CPU的算力,包括髮除錯框架、訓練框架、推理框架,能夠實現算力排程的管理。在此基礎上,它能靈活的分配叢集CPU,進行所有應用的開發,從資料的標註、資料處理、模型訓練的全流程的打通。

ModelArts提供資料管理能力,支援多種型別的標註任務,提供多種多樣的開發環境、模型訓練和部署推理。實現了一個一站式的AI開發。

ModelArts針對大模型,提供了開發工具鏈,以及場景化的開發對應的工具鏈。

ModelArts能夠幫助開發者快速實現對於端到端的開發,同時也支援把常見頁面主流的演算法使用昇騰GPU實現遷移。

2-2.png

2.2.3 端到端AI開發流程

AI應用的開發,往往是以一個流水線的方式能夠持續整合和交付。

以貓狗檢測為例,開發者需要準備一些貓和狗的圖片,輸入到分析模型中,最終分別出圖片上哪些是貓、哪些是狗。

基於這種場景,首先需要把收集到的圖片進行標註。標註完成之後,上傳到ModelArts平臺,選擇對應的演算法進行訓練。訓練的過程,就是使模型能夠基於當前的資料結構總結出規律,從而降低模型識別的損失度,提升模型的精度。完成訓練之後,得到對應的模型。

模型評估是為了提升模型識別的準確度,為了能夠滿足開發者的要求。完成評估之後,需要部署到具體的裝置上。

後續,可以透過攝像頭捕捉到貓或者狗的圖片,傳入到模型中,然後透過模型實時的判斷出當前圖片中的動物是貓還是狗。

最後識別出來的結果,還是會迴流到最開始的資料管理中,從而不斷的擴充資料庫。再進一步不斷的迭代,提升模型訓練的精度。這就是一個流水線的方式整合和交付的概念。

2-3.png

2.2.4 資料管理:AI資料框架,百倍提升資料處理效率

ModelArts的資料管理,提供了常見的資料標註框架,支援多種資料標註,像常見的物體、音訊、文字等。

ModelArts還支援進行團隊標註,像我們日常的AI應用的開發,需要成百上千張圖片,可能需要一張張進行標註。如果有多個人共同來標註一個資料集,也能提升標註的速率。

假設現在有一個1000張資料集的圖片,只需要標註前面的50張即可,後續ModelArts會根據前面標註的影像的規律,採用演算法,智慧的把剩餘的圖片進行標註。之後,我們只需要做簡單的檢查即可。從而大大降低人工標註耗費的時間。

2-4.png

2.2.5 模型訓練:自動學習ExML引擎,幫助初學者"零" 基礎搞定五種場景

ModelArts內建了常見的演算法,像影像分類、物體檢測、預測分析、聲音分類、文字分類等。

基於這些演算法,只需要開發者把標註好的資料上傳到ModelArts平臺,ModelArts可以一鍵啟動AI模型訓練,並進行對應的模型驗證和上傳服務。

從而實現零程式碼、零AI的開發。

2-5.png

2.2.6 模型訓練:訓練作業提供大量的預置模型進行遷移學習,簡化模型建立

當前,ModelArts平臺已經有60+預置模型,主要覆蓋:影像分類、影像語義分割、物體檢測與定位、強化學習、文字、語音等場景。

這些模型都是基於開源或行業資料集所構造的,而且它的精度和速度都是有一定的保證的。也支援開發者自行編寫的程式碼。

在有了模型之後,ModelArts提供了一鍵訓練。快速的將模型進行訓練,實現整體的模型打通。

2-6.png

2.2.7 華為雲ModelArts CodeLab,讓AI探索&教學更簡單

開發者如果覺得ModelArts提供的演算法不夠優秀,華為雲還提供了ModelArts CodeLab的方式。從而實現開發者在雲端上直接進行AI應用的開發。

CodeLab可以理解為雲上的編譯器,它的好處在於直接連上雲端的算力,而且每天提供免費算力資源的時間,支援即開即用。

CodeLab釋出了豐富的案例,案例支援一鍵執行,還支援把自己寫的案例分享到AI Gallery,供其他開發者學習和了解。

CodeLab還支援透過本地IDE+ModelArts外掛遠端開發。

2-7.png

2.2.8 模型部署:端、邊、雲全場景AI部署

完成AI應用的開發和訓練之後,我們會把模型進行部署。ModelArts平臺提供了端、邊、雲全場景AI部署能力。

首先,在部署之前,ModelArts提供了快速應用AI測試的環境,能夠幫助開發者快速看到模型執行的效果。並且能夠部署到端、邊等各種裝置,提升推理執行效能。

2-8.png

2.2.9 WorkFlow工作流:降低端到端AI開發門檻

ModelArts還提供了WorkFlow工作流,它可以降低端到端AI開發門檻。

整體AI應用的開發是一個流水線的形式,WorkFlow可以把這個流水線合成一個工作流的形式,作為一體。

WorkFlow工作流分為開發態和執行態。

開發過程中,透過Python SDK低程式碼編排,把工作流串起來。完成配置之後,基於自己的SDK進行除錯。這樣做最大的好處在於,透過元件複用,減少程式碼量,進而提升效率。

在執行態,視覺化的操作介面,降低使用門檻。同時支援多種多樣的評估視覺化,幫助理解模型效果。

同時,它可以釋出到AI Gallery社群,供其他開發者學習。

2-9.png

2.3 基於LangChain+ChatGLM3的本地知識庫問答

2.3.1 ChatGLM3介紹

ChatGLM3是一個基於Transformer的預訓練語言模型,由清華大學KEG實驗室和智譜AI公司於2023年共同訓練。

基本原理:將大量無標籤文字資料進行預訓練,然後將其用於各種下游任務,例如文字分類,命名實體識別,情感分析等。

ChatGLM3-6B是ChatGLM3系列中的開源模型,在保留了前兩代模型對話流暢、部署門檻低等眾多優秀特性。

在int4精度下,只需要13GB的視訊記憶體即可流暢執行ChatGLM3-6B。

3-1.png

2.3.2 LangChain介紹

LangChain是一個開源框架,允許從事人工智慧的開發者將例如GPT-4的大語言模型與外部計算和資料來源結

合起來。該框架目前以Python或JavaScript包的形式提供。

LangChain目前由六大部分組成:Models模型、Indexs索引、Prompts提示詞、Chains鏈、Memory記憶、Agents代理。本期著重介紹前面四個部分,Memory記憶主要用來使我們的大語言模型在多輪對話中有更好的記憶效果。Agents代理更多的做一些個人助理的應用,比如當大語言模型無法解決問題,可以透過它從百度等搜尋引擎獲取答案。

LangChain的優勢:

  • 提供了統一的LLM的介面和使用;
  • 快速將本地知識匯入到大語言模型使用;
  • 將連續多次任務的關鍵詞進行儲存,讓大模型具有"記憶"。

3-2.png

2.3.3 開源大模型體驗官課程介紹

本次開源大模型體驗官課程基於華為雲一站式AI開發平臺ModelArts,使用雲端算力快速實現大模型的呼叫,並基

於大語言模型開發框架-LangChain,實現LangChain+ChatGLM3的本地知識庫問答。

3-3.png

2.3.4 LangChain元件介紹--Models

Models主要的作用是對模型的輸入和輸出進行處理,從而使輸入符合大語言模型的呼叫方式,輸出更加符合想要的效果。

在LangChain中載入ChatGLM3模型,配置如下:

  • 首先新建一個類,這類繼承langchain.llms.base.LLM類;
  • 然後定義一個__llm__type方法,透過@property裝飾器將該方法轉為【只讀屬性】;
  • 重寫__call方法:載入自己的模型,並限制只輸出結果。

3-4.png

2.3.5 LangChain元件介紹--Prompts

Prompts是大語言模型的提示模版,它是生成語言模型提示的預定義配方。

大語言模型的輸入不同,輸入的效果也會截然不同,Prompts常用的提示詞技術如下:

  • 少量描述的提示詞:直接輸入問題讓大語言模型進行回答。
  • 少樣本的提示詞:不直接進行提問,給出樣例,讓大語言模型進行學習之後再進行回答。
  • 思維鏈的提示詞:給大語言模型一個思考的過程,讓大語言模思考答案是否正確,大語言模型給正確的結果。

3-5.png

2.3.6 LangChain元件介紹--Indexs

由於大型語言模型(LLMs)存在資料實時性的問題,它們只知道透過它們的訓練資料所呈現的世界。

因此我們可以將最新的一些知識文件新增到LLMs中,來補充LLMs模型的知識。

在langChain中進行外部資料檢索,一般按照如下流程實現:

  1. 基於langChain.document_loaders下的載入類進行檔案載入;
  2. 基於langChain.text_splitter對載入後的檔案進行分割,以便傳入大語言模型;
  3. 將分割後的文件轉成嵌入向量,然後儲存到向量資料庫;
  4. 基於向量的餘弦相以度來進行檢索。

3-6.png

2.3.7 LangChain元件介紹--Chains

LangChain透過Chains元件實現前面提到的Models、Prompts、Indexs等元件的連結,進行更復雜的功能開發。

Chains又名鏈,鏈的作用就是將各個元件合到一起。LangChain中有很多已有的鏈,例如:LLMChain、SequentialChain(順序鏈)、ConversationChain(對話鏈)、RetrievalQA(檢索型問答)、ConversationalRetrievalChain(對話式檢索問答)。

透過RetrievalQA實現基於本地知識庫的問答,實現流程如下:

  1. 首先定義語言模型和本地知識庫的載入;
  2. 然後透過RetrievalQA.from_llm函式構造鏈的例項knowledge_chain,並配置一些引數;
  3. 最後透過呼叫knowledge_chain即可。

3-7.png

2.3.8 基於LangChain+ChatGLM3的本地知識庫問答

步驟1:在AI Gallery找到對應案例並執行

1、登入華為雲賬號,進入AI Gallery社群。在AI Gallery中可以找到該案例。

3-8-1.png

2、單擊“Run in ModelArts”,跳轉到案例詳情頁。

3-8-2.png

步驟2:選擇執行環境

1、預設選擇限時免費的規格,選擇好之後,單擊“切換規格”。

3-8-3.png

注:如果限時免費規格售罄了,可以稍作等待。

2、切換完成之後,頁面會有如下提示,單擊“確定”。

3-8-4.png

步驟3:逐步執行案例

案例的每個步驟旁邊會有一個執行按鈕,單擊可以執行當前步驟。

1、下載ChatGLM3模型

3-8-5.png

2、配置環境

a.首選建立虛擬環境

3-8-6.png

b.選擇python版本

本案例依賴Python3.10.10及以上環境,點選右上角kernel選擇python-3.10.10。

3-8-7.png

3、安裝依賴庫

3-8-8.png

步驟4:程式碼開發

當前案例使用的是RetrievalQA,它可以很方便的實現基於知識庫的問答。

3-8-9.png

步驟5:功能測試

1、執行當前步驟

3-8-10.png

2、執行完成之後,可以看到大語言模型的回答。

3-8-11.png

步驟6:案例停止

至此整個案例的全部操作流程已經完成,可以手動停止案例。

3-8-12.png

也可以等1小時後案例會自動停止執行,無需關注。

四、總結

本文以大模型的發展歷程引出大模型的介紹,隨後詳細描述了大模型的開發過程。

在掌握了大模型的基礎知識之後,華為雲EI的介紹正式登場。華為雲EI提供的AI開發平臺——ModelArts,可以幫助開發者一站式完成大模型的生成、評估、訓練、部署及監測。

然後是對ChatGLM3和LangChain的詳細介紹,進而便進入了本篇的另一個主題:如何基於LangChain+ChatGLM3的本地知識庫問答。這部分內容,主要是以實戰案例方式,讓開發者更容易理解和上手。

未來,期待ModelArts為大模型AI應用開發賦予更多可能。

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章