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

本文分享自華爲雲社區《【雲駐共創】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應用開發賦予更多可能。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章