本文作者:碧桂園服務(wù)后端開(kāi)發(fā)高/級(jí)工程師仔夺,擁有8年開(kāi)發(fā)經(jīng)驗(yàn)高每。
1(RAG)檢索增強(qiáng)生成技術(shù)介紹
1.1 檢索增強(qiáng)生成是什么首繁?
舉個(gè)例子,比如我作為員工哨查,直接問(wèn)大模型:
提問(wèn):我們公司幾點(diǎn)下班逗抑?
大模型在沒(méi)有“接觸”過(guò)我們公司《員工手冊(cè)》等企業(yè)私有數(shù)據(jù)的情況下,大模型往往難以給出正確答案寒亥。RAG的能力在于能夠讓大模型結(jié)合企業(yè)私有數(shù)據(jù)邮府,完成特定領(lǐng)域的知識(shí)問(wèn)答。RAG把這類(lèi)問(wèn)題拆成兩個(gè)步驟:
基于用戶(hù)的提問(wèn)溉奕,到《員工手冊(cè)》里找到最相關(guān)的N個(gè)內(nèi)容片段褂傀。
把用戶(hù)提問(wèn)和N個(gè)內(nèi)容片段一起送到大模型中,獲得答案加勤。
上邊這個(gè)例子“我們公司幾點(diǎn)下班仙辟?”就變成:
提問(wèn):請(qǐng)參考員工手冊(cè),回答以下問(wèn)題:我們公司幾點(diǎn)下班鳄梅?
員工手冊(cè)內(nèi)容如下:遵守上班時(shí)間不遲到叠国、不早退......工作時(shí)間每周一至周五上午8:40到下午6:10......
大模型回復(fù):
回復(fù):下班時(shí)間是下午6點(diǎn)10分。
LLM是一種通過(guò)大量數(shù)據(jù)訓(xùn)練的模型戴尸,可以回答任何問(wèn)題或完成任務(wù)粟焊,并利用其參數(shù)化記憶。然而,這些模型有一個(gè)知識(shí)截止日期项棠,取決于它們上次訓(xùn)練的時(shí)間悲雳。比如當(dāng)被問(wèn)及超出其知識(shí)范圍或在知識(shí)截止日期之后發(fā)生的事件時(shí),模型會(huì)產(chǎn)生幻覺(jué)沾乘。
Meta公司的研究人員發(fā)現(xiàn)怜奖,通過(guò)提供與手頭任務(wù)相關(guān)的信息,模型在完成任務(wù)時(shí)表現(xiàn)得到顯著改善翅阵。例如歪玲,如果詢(xún)問(wèn)模型關(guān)于截止日期之后發(fā)生的事件,則提供該事件作為背景信息并隨后提問(wèn)掷匠,可幫助模型正確回答問(wèn)題滥崩。
但由于LLM上下文窗口長(zhǎng)度有限,所以在處理當(dāng)前任務(wù)時(shí)只能傳遞最相關(guān)的知識(shí)讹语,而且添加到上下文中的數(shù)據(jù)質(zhì)量也會(huì)影響模型生成響應(yīng)結(jié)果的質(zhì)量钙皮。因此,機(jī)器學(xué)習(xí)從業(yè)者在RAG流程的不同階段使用多種技術(shù)來(lái)改善LLM的性能顽决。
1.2 RAG如何工作短条?
RAG架構(gòu)和管道包括三個(gè)主要階段:數(shù)據(jù)準(zhǔn)備、檢索和生成才菠。
數(shù)據(jù)準(zhǔn)備階段:包括確定數(shù)據(jù)源茸时、從數(shù)據(jù)源中提取數(shù)據(jù)、清理數(shù)據(jù)并將其存儲(chǔ)到數(shù)據(jù)庫(kù)中赋访。
檢索階段:包括根據(jù)手頭的任務(wù)從數(shù)據(jù)庫(kù)中檢索相關(guān)數(shù)據(jù)可都。
生成階段:包括利用檢索到的數(shù)據(jù)和手頭的任務(wù)生成輸出結(jié)果。
輸出的質(zhì)量取決于數(shù)據(jù)的質(zhì)量和檢索策略蚓耽。下文將詳細(xì)介紹每個(gè)階段渠牲。
2 大模型結(jié)合RAG在企業(yè)知識(shí)庫(kù)問(wèn)答的落地
2.1 基于LangChain+LLM的本地知識(shí)庫(kù)問(wèn)答
2.1.1 什么是LangChain?
LangChain是一個(gè)開(kāi)源的框架步悠,旨在幫助開(kāi)發(fā)人員使用語(yǔ)言模型構(gòu)建端到端的應(yīng)用程序签杈。它提供了一套工具、組件和接口鼎兽,可簡(jiǎn)化創(chuàng)建由大型語(yǔ)言模型 (LLM) 和聊天模型提供支持的應(yīng)用程序的過(guò)程答姥。LangChain可以輕松管理與語(yǔ)言模型的交互,將多個(gè)組件鏈接在一起接奈,并集成額外的資源踢涌,例如API和數(shù)據(jù)庫(kù)。
LangChain旨在為六個(gè)主要領(lǐng)域的開(kāi)發(fā)人員提供支持:
LLM和提示:LangChain使管理提示序宦、優(yōu)化它們以及為所有LLM創(chuàng)建通用界面變得容易睁壁。此外,它還包括一些用于處理LLM 的便捷實(shí)用程序。
鏈(Chain):這些是對(duì)LLM或其他實(shí)用程序的調(diào)用序列潘明。LangChain為鏈提供標(biāo)準(zhǔn)接口行剂,與各種工具集成,為流行應(yīng)用提供端到端的鏈钳降。
數(shù)據(jù)增強(qiáng)生成:LangChain使鏈能夠與外部數(shù)據(jù)源交互以收集生成步驟的數(shù)據(jù)厚宰。例如,它可以幫助總結(jié)長(zhǎng)文本或使用特定數(shù)據(jù)源回答問(wèn)題遂填。
Agents:Agents 讓LLM做出有關(guān)行動(dòng)的決定铲觉,采取這些行動(dòng),檢查結(jié)果吓坚,并繼續(xù)前進(jìn)直到工作完成撵幽。LangChain提供了代理的標(biāo)準(zhǔn)接口,多種代理可供選擇礁击,以及端到端的代理示例盐杂。
內(nèi)存:LangChain有一個(gè)標(biāo)準(zhǔn)的內(nèi)存接口,有助于維護(hù)鏈或代理調(diào)用之間的狀態(tài)哆窿。它還提供了一系列內(nèi)存實(shí)現(xiàn)和使用內(nèi)存的鏈或代理的示例链烈。
評(píng)估:很難用傳統(tǒng)指標(biāo)評(píng)估生成模型。這就是為什么LangChain提供提示和鏈來(lái)幫助開(kāi)發(fā)者自己使用LLM評(píng)估他們的模型挚躯。
2.1.2 什么是LLM强衡?
LLM(英文:Large Language Mode),也稱(chēng)大型語(yǔ)言模型秧均,是一種人工智能模型食侮,旨在理解和生成人類(lèi)語(yǔ)言号涯。它們?cè)诖罅康奈谋緮?shù)據(jù)上進(jìn)行訓(xùn)練目胡,可以執(zhí)行廣泛的任務(wù),包括文本總結(jié)链快、翻譯誉己、情感分析等等。
LLM的特點(diǎn)是規(guī)模龐大域蜗,包含數(shù)千億的參數(shù)巨双,幫助它們學(xué)習(xí)語(yǔ)言數(shù)據(jù)中的復(fù)雜模式。這些模型通趁够觯基于深度學(xué)習(xí)架構(gòu)筑累,如轉(zhuǎn)化器,這有助于它們?cè)诟鞣NNLP任務(wù)上取得令人印象深刻的表現(xiàn)丝蹭。
自ChatGPT為代表的大語(yǔ)言模型出現(xiàn)以來(lái)慢宗,由于其驚人的人工智能(AGI)的能力,自然語(yǔ)言處理領(lǐng)域掀起了新一輪的研究和應(yīng)用的浪潮。特別是隨著ChatGLM镜沽、LLaMA等較小規(guī)模的LLM開(kāi)源敏晤,使得平民玩家也能夠運(yùn)行這些模型,業(yè)界涌現(xiàn)出了許多基于LLM的二次微調(diào)或應(yīng)用的案例缅茉。
常見(jiàn)底座模型細(xì)節(jié)概覽:
1嘴脾、知識(shí)庫(kù)構(gòu)建
(1)文本加載和讀取
加載文件:這是讀取存儲(chǔ)在本地的知識(shí)庫(kù)文件的步驟。
讀取文件:讀取加載的文件內(nèi)容蔬墩,通常是將其轉(zhuǎn)化為文本格式译打。
接入非結(jié)構(gòu)化文檔:
txt, .rtf, .epub, .srt
eml, .msg
html, .xml, .toml
json, .jsonl
md, .rst
docx, .doc, .pptx, .ppt, .odt
jpg, .jpeg, .png, .bmp
結(jié)構(gòu)化數(shù)據(jù)接入:
csv, .tsv
xlsx, .xlsd
(2)文本分割
通常情況下,為了更有效地利用語(yǔ)言模型拇颅,需要將大型文本文檔拆分為較小的塊扶平。文本拆分器負(fù)責(zé)將文檔拆分為較小的文檔片段。在理想情況下蔬蕊,我們希望將語(yǔ)義相關(guān)的文本片段放在一起结澄。然而,“語(yǔ)義相關(guān)”的含義可能因文本類(lèi)型而異岸夯。
根據(jù)規(guī)則:
根據(jù)中文文章的常見(jiàn)終止符號(hào)麻献,利用規(guī)則進(jìn)行文本分割。如:?jiǎn)巫址麛嗑浞掳纭⒅杏⑽氖÷蕴?hào)勉吻、雙引號(hào)等。
根據(jù)語(yǔ)義:
將文本拆分為語(yǔ)義上有意義的小塊(通常是句子)旅赢,然后開(kāi)始將這些小塊組合成一個(gè)較大的塊齿桃,直到達(dá)到一定的大小(由某個(gè)函數(shù)測(cè)量)煮盼。一旦達(dá)到該大小短纵,就將該塊設(shè)置為自己的文本段,并開(kāi)始創(chuàng)建一個(gè)具有一些重疊的新文本塊僵控。
依據(jù)中文標(biāo)點(diǎn)符號(hào)設(shè)計(jì)的 ChineseTextSplitter
(3)文本向量化(embedding)-存儲(chǔ)到向量數(shù)據(jù)庫(kù)
文本向量化(embedding):這通常涉及到NLP的特征抽取香到,可以通過(guò)諸如TF-IDF、word2vec报破、BERT等方法將分割好的文本轉(zhuǎn)化為數(shù)值向量悠就。
存儲(chǔ)到向量數(shù)據(jù)庫(kù):文本向量化之后存儲(chǔ)到數(shù)據(jù)庫(kù)vectorstore(milvus)。
(4)問(wèn)句向量化
這是將用戶(hù)的查詢(xún)或問(wèn)題轉(zhuǎn)化為向量充易,應(yīng)使用與文本向量化相同的方法梗脾,以便在相同的空間中進(jìn)行比較。
2盹靴、知識(shí)庫(kù)問(wèn)答
(1)在文本向量中匹配出與問(wèn)句向量最相似的top k個(gè)
這一步是信息檢索的核心炸茧,通過(guò)計(jì)算余弦相似度帆疟、歐氏距離等方式,找出與問(wèn)句向量最接近的文本向量宇立。
(2)匹配出的文本作為上下文和問(wèn)題一起添加到prompt中
這是利用匹配出的文本來(lái)形成與問(wèn)題相關(guān)的上下文踪宠,用于輸入給語(yǔ)言模型。
(3)提交給LLM生成回答
最后妈嘹,將這個(gè)問(wèn)題和上下文一起提交給語(yǔ)言模型(例如GPT系列)柳琢,讓它生成回答。
這種結(jié)合langchain和LLM的方式润脸,特別適合于一些垂直領(lǐng)域或大型集團(tuán)企業(yè)搭建內(nèi)部私有問(wèn)答系統(tǒng)柬脸,以實(shí)現(xiàn)通過(guò)LLM的智能對(duì)話(huà)能力。此外毙驯,它也適合個(gè)人針對(duì)英文paper進(jìn)行問(wèn)答倒堕。
2.2?向量數(shù)據(jù)庫(kù)
向量數(shù)據(jù)庫(kù)(Vector Database)主要用來(lái)存儲(chǔ)和處理向量數(shù)據(jù)。
向量是一種數(shù)據(jù)表示方式爆价,用于描述對(duì)象的特征或?qū)傩钥寻汀C總€(gè)向量代表一個(gè)單獨(dú)的數(shù)據(jù)點(diǎn),例如一個(gè)詞或一張圖片铭段,由描述其多個(gè)特性的值的集合組成骤宣。這些值有時(shí)被稱(chēng)為“特征”或“維度”。例如序愚,一張圖片可以表示為像素值的向量憔披,整個(gè)句子也可以表示為單詞嵌入的向量。
一些常用的數(shù)據(jù)向量如下:
圖像向量:通過(guò)深度學(xué)習(xí)圖像識(shí)別爸吮。
文本向量:通過(guò)詞嵌入技術(shù)如Word2Vec芬膝、BERT等生成的文本特征向量,這些向量包含了文本的語(yǔ)義信息形娇,可以用于文本分類(lèi)锰霜、情感分析等任務(wù)。
語(yǔ)音向量:通過(guò)聲學(xué)模型從聲音信號(hào)中提取的特征向量埂软,這些向量捕捉了聲音的重要特性锈遥,如音調(diào)纫事、節(jié)奏勘畔、音色等,可以用于語(yǔ)音識(shí)別丽惶。
原生的向量數(shù)據(jù)庫(kù)是專(zhuān)門(mén)為存儲(chǔ)和檢索向量而設(shè)計(jì)的炫七。包括Chroma, LanceDB, Marqo, Milvus/ Zilliz, Pinecone,Qdrant,Vald,Vespa, Weaviate等, 所管理的數(shù)據(jù)是基于對(duì)象或數(shù)據(jù)點(diǎn)的向量表示進(jìn)行組織和索引。
Milvus是基于Faiss钾唬、Annoy万哪、HNSW等向量搜索庫(kù)構(gòu)建的侠驯,可以輕松管理數(shù)百萬(wàn)個(gè)實(shí)體。它可以根據(jù)不同的數(shù)據(jù)特點(diǎn)選擇最合適的索引算法奕巍,核心是解決稠密向量相似度檢索的問(wèn)題吟策。除了向量檢索,Milvus還支持?jǐn)?shù)據(jù)分區(qū)分片的止、數(shù)據(jù)持久化檩坚、增量數(shù)據(jù)攝取、標(biāo)量向量混合查詢(xún)和time travel等功能诅福。同時(shí)匾委,它還大幅優(yōu)化了向量檢索的性能,可滿(mǎn)足任何向量檢索場(chǎng)景的應(yīng)用需求氓润。
Milvus還提供了多種客戶(hù)端SDK赂乐,如Python、Java咖气、C++等挨措,使得用戶(hù)可以方便地使用不同的編程語(yǔ)言來(lái)訪(fǎng)問(wèn)和操作 Milvus。
2.3?Embedding在大模型中的價(jià)值
2.3.1 Embedding模型的重要性
Embedding模型是一種將詞崩溪、短語(yǔ)或整個(gè)句子轉(zhuǎn)化為向量形式的技術(shù)运嗜,夠捕捉到語(yǔ)義的豐富含義,使計(jì)算機(jī)可以像處理數(shù)字一樣來(lái)處理文本悯舟。在大語(yǔ)言模型時(shí)代担租,Embedding模型可以幫助大模型處理更長(zhǎng)的上下文,也可以將大模型與私有數(shù)據(jù)結(jié)合抵怎。它幾乎可以用來(lái)表示任何事情奋救,如文本、音樂(lè)反惕、視頻等尝艘,但在這里我們主要關(guān)注文本的Embedding。
Embedding模型的重要性在于它可以表示單詞或語(yǔ)句的語(yǔ)義姿染。實(shí)值向量的Embedding可以表示單詞的語(yǔ)義背亥,這是因?yàn)檫@些Embedding向量是根據(jù)單詞在語(yǔ)言上下文中的出現(xiàn)模式進(jìn)行學(xué)習(xí)的。例如悬赏,如果一個(gè)單詞在某些上下文中經(jīng)常與另一個(gè)單詞一起出現(xiàn)狡汉,那么這兩個(gè)單詞的嵌入向量在向量空間中就會(huì)有相似的位置,這意味著它們具有相似的含義和語(yǔ)義闽颇。
2.3.2 主流Embedding模型
榜單地址:
https://huggingface.co/spaces/mteb/leaderboard
2.4?Prompt提示工程
提示工程(Prompt Engineering)是自然語(yǔ)言處理領(lǐng)域的重要概念盾戴,指的是用于觸發(fā)和引導(dǎo)人工智能語(yǔ)言模型生成特定輸出的文本或語(yǔ)句片段。Prompt可以是一個(gè)單詞兵多、一個(gè)短語(yǔ)尖啡、一個(gè)問(wèn)題或一個(gè)完整的句子橄仆,它們可以用來(lái)指導(dǎo)模型生成特定的回答、文本衅斩、摘要或其他輸出盆顾。
例如,在語(yǔ)言模型GPT-3中畏梆,可以使用Prompt來(lái)引導(dǎo)模型生成特定的文本輸出椎扬。輸入“寫(xiě)一篇介紹自然語(yǔ)言處理的文章”時(shí),可以使用Prompt來(lái)引導(dǎo)模型生成與自然語(yǔ)言處理相關(guān)的內(nèi)容具温。
Prompt的選擇和設(shè)計(jì)對(duì)于生成結(jié)果的質(zhì)量和準(zhǔn)確性至關(guān)重要蚕涤。好的Prompt應(yīng)該能夠準(zhǔn)確地表達(dá)模型期望生成的內(nèi)容,同時(shí)也應(yīng)該避免含糊或模糊的語(yǔ)言铣猩,以免導(dǎo)致生成結(jié)果不準(zhǔn)確或不符合預(yù)期揖铜。
在一些場(chǎng)景下,Prompt也可以被用于調(diào)整模型的偏好或傾向达皿,以生成更加符合用戶(hù)需求的輸出天吓。例如,在情感分析任務(wù)中峦椰,可以使用Prompt來(lái)調(diào)整模型的情感傾向龄寞,以便獲得更加準(zhǔn)確的情感分析結(jié)果。
實(shí)際上汤功,大多數(shù)的prompt由「指令」(instruction)和「內(nèi)容」(content)兩部分構(gòu)成物邑。其中,指令部分表示需要大模型執(zhí)行的任務(wù)滔金,如“判斷下列句子的情感”色解,而內(nèi)容則是實(shí)際的句子,例如“我今天很高興”餐茵。
需要注意科阎,并非所有的prompt都有這樣的形式,例如比較簡(jiǎn)短的prompt:“中國(guó)的首都在哪里”忿族、“模仿百年孤獨(dú)的開(kāi)頭寫(xiě)一段話(huà)”等只有指令而沒(méi)有內(nèi)容的prompt锣笨。在這種情況下,我們可以認(rèn)為內(nèi)容是空道批,但上述構(gòu)成依然適用错英。
2.5?基于大模型知識(shí)庫(kù)實(shí)現(xiàn)物業(yè)行業(yè)的智能客服機(jī)器人
隨著互聯(lián)網(wǎng)的普及,越來(lái)越多的企業(yè)開(kāi)始重視客戶(hù)服務(wù)屹徘,以提升客戶(hù)滿(mǎn)意度走趋。然而,傳統(tǒng)的客服方式往往依賴(lài)于人力噪伊,效率低下簿煌,難以滿(mǎn)足企業(yè)快速發(fā)展的需求。鳳凰會(huì)APP是碧桂園服務(wù)線(xiàn)上服務(wù)平臺(tái)鉴吹,主要面向業(yè)主提供一站式服務(wù)姨伟。
目前,鳳凰會(huì)APP采用人工客服的形式豆励,通過(guò)電話(huà)或者IM在線(xiàn)回答問(wèn)題夺荒。為了提高效率和響應(yīng)速度,可以考慮將日沉颊簦回答的問(wèn)題整理成結(jié)構(gòu)化Word文檔(如下圖所示)技扼,并導(dǎo)入知識(shí)庫(kù)向量化。然后通過(guò)大模型來(lái)自動(dòng)回答常見(jiàn)問(wèn)題嫩痰,同時(shí)支持客服快速檢索剿吻。
此外,基于私有知識(shí)庫(kù)的智能客服機(jī)器人串纺,可以快速處理大量客戶(hù)咨詢(xún)丽旅,提高客服效率,節(jié)省人力成本纺棺,并實(shí)時(shí)響應(yīng)客戶(hù)需求榄笙,從而提高客戶(hù)滿(mǎn)意度。
2.5.1 后臺(tái)知識(shí)庫(kù)管理
后臺(tái)知識(shí)庫(kù)管理如下圖所示:
milvus向量數(shù)據(jù)庫(kù)管理工具:
2.5.2 前端機(jī)器人交互
上面的提問(wèn)對(duì)應(yīng)的知識(shí)庫(kù)原問(wèn)題答案是:
問(wèn)題:裝修垃圾清運(yùn)費(fèi)的收費(fèi)標(biāo)準(zhǔn)是什么祷蝌?
答案:業(yè)主進(jìn)行室內(nèi)裝修茅撞,需交裝修按金、裝修工人卡費(fèi)用等巨朦,具體請(qǐng)咨詢(xún)物業(yè)工作人員乡翅。
2.6?基于大模型知識(shí)庫(kù)實(shí)現(xiàn)物業(yè)行業(yè)的智能語(yǔ)音機(jī)器人
鳳凰會(huì)APP是碧桂園物業(yè)服務(wù)的最大C端平臺(tái),為千萬(wàn)業(yè)主提供智能社區(qū)服務(wù)罪郊。通過(guò)該平臺(tái)蠕蚜,業(yè)主可以足不出戶(hù),輕松解決生活需求悔橄。
鳳凰會(huì)APP原先的語(yǔ)音助手是基于傳統(tǒng)NLP實(shí)現(xiàn)的智能問(wèn)答助手靶累,需要準(zhǔn)備大量的數(shù)據(jù)集,劃分分詞和配置意圖癣疟,配置非常復(fù)雜挣柬,回答效果也不理想。
為了提高效率和準(zhǔn)確性睛挚,可以考慮基于物業(yè)行業(yè)知識(shí)庫(kù)實(shí)現(xiàn)的大模型語(yǔ)音機(jī)器人邪蛔。這種機(jī)器人省去了復(fù)雜的配置過(guò)程,內(nèi)置模板扎狱,只需導(dǎo)入結(jié)構(gòu)化的知識(shí)文檔侧到,系統(tǒng)即可自動(dòng)完成向量化并投入使用勃教。這樣,機(jī)器人可以更準(zhǔn)確地識(shí)別用戶(hù)的意圖匠抗,提供更好的服務(wù)體驗(yàn)更好故源,持續(xù)為用戶(hù)提供更優(yōu)質(zhì)的服務(wù)。
2.6.1 后臺(tái)知識(shí)庫(kù)管理
2.6.2?鳳凰會(huì)APP端語(yǔ)音助手
3 總結(jié)
本文介紹了基于大語(yǔ)言模型的特定領(lǐng)域知識(shí)檢索汞贸,并提出了以下優(yōu)化方法來(lái)提高生成回答的效果:
結(jié)構(gòu)化的QA文檔可以快速地檢索到精準(zhǔn)的答案绳军。
使用Embedding模型提升語(yǔ)義向量化的效果,以提高相似問(wèn)題的匹配度矢腻,使得能夠匹配出最滿(mǎn)足要求的文本段落作為上下文门驾。
優(yōu)化分詞算法,使匹配出的結(jié)果作為上下文時(shí)能夠提供更合理的推理/回答依據(jù)多柑。
優(yōu)化LLM模型奶是,使得給定提問(wèn)相同情況下,得到更理想的推理/回答結(jié)果顷蟆。