自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從大模型(LLM)、檢索增強(qiáng)生成(RAG)到智能體(Agent)的應(yīng)用

人工智能
結(jié)合RAG技術(shù)和智能體,系統(tǒng)能夠?qū)崟r(shí)從供應(yīng)商數(shù)據(jù)庫(kù)、倉(cāng)庫(kù)庫(kù)存記錄和銷(xiāo)售數(shù)據(jù)中檢索關(guān)鍵信息,智能調(diào)整庫(kù)存水平,減少庫(kù)存積壓和缺貨風(fēng)險(xiǎn)。

引言

隨著人工智能技術(shù)的飛速發(fā)展,大型語(yǔ)言模型(LLM)、檢索增強(qiáng)生成(RAG)和智能體(Agent)已經(jīng)成為推動(dòng)該領(lǐng)域進(jìn)步的關(guān)鍵技術(shù),這些技術(shù)不僅改變了我們與機(jī)器的交互方式,而且為各種應(yīng)用和服務(wù)的開(kāi)發(fā)提供了前所未有的可能性。正確理解這三者的概念及其之間的關(guān)系是做好面向AI編程開(kāi)發(fā)的基礎(chǔ):


大模型(LLM)

檢索增強(qiáng)生成(RAG)

智能體(Agent)

定義

大型語(yǔ)言模型(LLM),如GPT系列、BERT等,是利用大量文本數(shù)據(jù)訓(xùn)練的模型,能夠生成連貫的文本、理解語(yǔ)言、回答問(wèn)題等。

檢索增強(qiáng)生成技術(shù)結(jié)合了傳統(tǒng)的信息檢索技術(shù)和最新的生成式模型。它先從一個(gè)大型的知識(shí)庫(kù)中檢索出與查詢(xún)最相關(guān)的信息,然后基于這些信息生成回答。

智能體是指具有一定智能的程序或設(shè)備,能夠感知環(huán)境并根據(jù)感知結(jié)果做出響應(yīng)或決策的實(shí)體。它們可以是簡(jiǎn)單的軟件程序或復(fù)雜的機(jī)器人。

作用

LLM作為基礎(chǔ)技術(shù),提供了強(qiáng)大的語(yǔ)言理解和生成能力,是構(gòu)建復(fù)雜人工智能系統(tǒng)的基石。

RAG可以視為在LLM基礎(chǔ)上的擴(kuò)展或應(yīng)用,利用LLM的生成能力和外部知識(shí)庫(kù)的豐富信息來(lái)提供更準(zhǔn)確、信息豐富的輸出。

智能體可以利用LLM進(jìn)行自然語(yǔ)言處理,通過(guò)RAG技術(shù)獲得和利用知識(shí),以在更廣泛的環(huán)境中做出決策和執(zhí)行任務(wù)。它們通常位于應(yīng)用層級(jí),是對(duì)LLM和RAG技術(shù)在特定環(huán)境下的集成和應(yīng)用。

從層級(jí)關(guān)系上看,大模型(LLM)提供了基礎(chǔ)的語(yǔ)言理解和生成能力。在此基礎(chǔ)上,檢索增強(qiáng)生成(RAG)技術(shù)利用這種能力結(jié)合特定的知識(shí)庫(kù)來(lái)生成更為準(zhǔn)確和相關(guān)的輸出。智能體(Agent)則在更高層次上使用LLM和RAG,結(jié)合自身的感知和決策能力,在各種環(huán)境中執(zhí)行具體的任務(wù)。

因此,可以理解為L(zhǎng)LM是基礎(chǔ),RAG是在LLM基礎(chǔ)上的進(jìn)一步應(yīng)用,而智能體則是綜合運(yùn)用LLM和RAG以及其他技術(shù),在更復(fù)雜環(huán)境中進(jìn)行交互和任務(wù)執(zhí)行的實(shí)體。這種關(guān)系體現(xiàn)了從基礎(chǔ)技術(shù)到應(yīng)用技術(shù)再到實(shí)際應(yīng)用的逐級(jí)深入。

隨著技術(shù)的快速進(jìn)步,如何更高效地利用這些大模型(LLM)來(lái)解決具體問(wèn)題?如何通過(guò)檢索增強(qiáng)生成(RAG)技術(shù)提高信息的準(zhǔn)確性和相關(guān)性?以及如何設(shè)計(jì)能夠有效集成LLM、RAG和其他AI技術(shù)的智能體?這些問(wèn)題的解決,不僅需要深入理解這些技術(shù)的工作原理和應(yīng)用場(chǎng)景,還需要探索它們之間的相互作用和集成方法。

大模型(LLM)的概念與工程化實(shí)踐

大型語(yǔ)言模型(LLM),如OpenAI的GPT系列,是一種基于深度學(xué)習(xí)的自然語(yǔ)言處理技術(shù)。它們能夠理解、生成、翻譯文本,完成問(wèn)答任務(wù),甚至編寫(xiě)代碼。這些模型通過(guò)在大規(guī)模文本數(shù)據(jù)上的預(yù)訓(xùn)練,學(xué)會(huì)了語(yǔ)言的復(fù)雜結(jié)構(gòu)和豐富的知識(shí),使其能夠在沒(méi)有明確指示的情況下執(zhí)行各種語(yǔ)言任務(wù)。GPT系列模型基于變換器(Transformer)架構(gòu),這是一種高效的深度學(xué)習(xí)模型結(jié)構(gòu),特別適合處理序列數(shù)據(jù),如文本。變換器利用自注意力(self-attention)機(jī)制,能夠捕捉文本中長(zhǎng)距離的依賴(lài)關(guān)系,這對(duì)于理解和生成自然語(yǔ)言(NLG)至關(guān)重要。

目前,OpenAI最新版本的LLM工程化應(yīng)用是以GPT-4為基礎(chǔ)的,針對(duì)普通用戶(hù)有3個(gè)版本,分別是免費(fèi)版本(只能使用GPT-3.5)、Plus版本以及團(tuán)隊(duì)版本(Plus的功能加上團(tuán)隊(duì)協(xié)同工作管理)。每個(gè)月支付20美元(不含稅)即可使用Plug版本,即ChatGPTPlus,它的主要功能有:

Chat(對(duì)話)

與“OpenAI最強(qiáng)大的模型GPT-4”進(jìn)行對(duì)話,不止是文本的交互生成,還可以同時(shí)進(jìn)行基于DALL-E的圖文交互生成,以及從互聯(lián)網(wǎng)實(shí)時(shí)獲取最新知識(shí)進(jìn)行輔助分析和生成。如下圖:

GPTs(插件)

如果你想將自己獨(dú)有的指令、知識(shí)庫(kù)或任何能力的API服務(wù),同預(yù)訓(xùn)練的GPT-4 LLM結(jié)合在一起,創(chuàng)建一個(gè)“自定義模型”,那么,可以使用“GPTs”插件功能在Open AI的Web應(yīng)用上快速構(gòu)建出來(lái)。GPTs的推出體現(xiàn)了OpenAI與眾不同的工程化創(chuàng)新能力,其交互設(shè)計(jì)理念值得我們借鑒。使用它的步驟可以參考如下這個(gè)例子:

1. 告訴 GPT Builder向?qū)В▽?shí)際上這也是一個(gè)官方的GPTs)你要做什么,它會(huì)提示你可以這樣說(shuō):"制作一個(gè)幫助生成新產(chǎn)品視覺(jué)效果的創(chuàng)意人 "或 "制作一個(gè)幫助我格式化代碼的軟件工程師"。如下圖:

2. 輸入“創(chuàng)建一個(gè)物流系統(tǒng)的技術(shù)支持工程師,幫助商家解答系統(tǒng)問(wèn)題和處理異常訂單”,接下來(lái)GPT Builder會(huì)和你做一些j簡(jiǎn)單的對(duì)話,比如征求你對(duì)于命名、Logo的建議等等,如下圖:

3. 僅需要2輪簡(jiǎn)短對(duì)話,一個(gè)名為“小狗物流平臺(tái)技術(shù)支持”的GPTs被初步創(chuàng)建出來(lái)了。生成的“Instrucitons”部分可以視為GTP的System Prompt(系統(tǒng)提示),需要特別注意按照這4個(gè)維度修正Instrucitons,直到其準(zhǔn)確符合你的意圖:1)定位,希望GPTs執(zhí)行什么類(lèi)型的任務(wù);2)上下文,給GPTs提供一些額外的信息,比如垂直領(lǐng)域的常識(shí),從而引導(dǎo)其給出更好的回答;3)輸入數(shù)據(jù),“限定”GPTs引導(dǎo)用戶(hù)提出的問(wèn)題,確保不偏離主題;4)輸出數(shù)據(jù),“限定”GPTs給出指定格式和范圍的輸出,確保不輸出無(wú)關(guān)的內(nèi)容。如下圖:

4. 重點(diǎn)來(lái)了,在這里可以使用“Upload files”功能上傳你自己的“知識(shí)庫(kù)”文件給到大模型推理,文件可以是文檔、表格、圖片等多種格式,這可以理解是一種對(duì)LLM的“靜態(tài)”增強(qiáng)。如下圖:

5. 更重要的是,可以通過(guò)添加“Actions”的方式,接入你的API服務(wù)給到大模型調(diào)用,API通過(guò)遵循OpenAPI3的規(guī)范進(jìn)行自描述。大模型可以根據(jù)API的功能描述以及輸入輸出定義,結(jié)合用戶(hù)會(huì)話上下文進(jìn)行智能的調(diào)用,獲取你的私域數(shù)據(jù)進(jìn)行推理,這可以理解是一種對(duì)LLM的“動(dòng)態(tài)”增強(qiáng)。如下圖:

6. 最后,你可以把你精心“調(diào)教”出來(lái)的“自定義模型”分享給任何人或者發(fā)布到OpenAI的GPTs商店,如下圖:

GPTs商店自2024 年初上線以來(lái)3個(gè)月時(shí)間,已經(jīng)有超過(guò) 300 萬(wàn)個(gè)自定義的 ChatGPT發(fā)布。商店的功能包括2個(gè)排行榜,分別是“頂級(jí)推薦”和“流行趨勢(shì)”;具體的分類(lèi)有 DALL-E圖像創(chuàng)作、寫(xiě)作、效率、研究和分析、編程、教育以及生活方式共7項(xiàng),并且將由ChatGPT官方創(chuàng)作的自定義模型進(jìn)行單獨(dú)分類(lèi)展示。例如在研究和分析(Research & Analysis) 類(lèi)排名第二的“Scholar GPT”能夠利用Google Scholar、PubMed、JSTOR、Arxiv等學(xué)術(shù)庫(kù)的2億+資源和內(nèi)置的批判性閱讀技能,助力你提高研究水平,可謂是撰寫(xiě)論文的神器;在效率(Productivity)類(lèi)排名第一Canva能夠輕松幫助你設(shè)計(jì)演示文稿、徽標(biāo)、圖文混排等多種內(nèi)容,并且支持你直接在其提供的Web應(yīng)用上對(duì)AI生成的源文件進(jìn)行編輯調(diào)整,直到達(dá)成滿(mǎn)意的效果。目前,已經(jīng)有創(chuàng)作者通過(guò)GPTs商店獨(dú)特的AI生態(tài),實(shí)現(xiàn)了自己的商業(yè)模式,值得我們學(xué)習(xí)借鑒。

API(開(kāi)放接口)

如果你不想依賴(lài)于OpenAI的生態(tài)平臺(tái)實(shí)現(xiàn)自己的AI應(yīng)用和商業(yè)模式,但又想借助其提供的ChatGPT等基礎(chǔ)能力,那么,通過(guò)調(diào)用其對(duì)外開(kāi)放的API接口一直是最好的選擇。因此,OpenAI在推出GPTs的同時(shí),也快速的上線了“Assistant API” 的Beta版本,在這個(gè)版本中,你可以實(shí)現(xiàn)GPTs中提到的所有“增強(qiáng)”大模型的能力,并通過(guò)API的方式將其對(duì)外發(fā)布,供第三方應(yīng)用調(diào)用,并且支持GPT-4模型(當(dāng)然調(diào)用價(jià)格也是不菲),如下圖:

同時(shí),你仍然可以通過(guò)傳統(tǒng)的“fine-tuning model”API定制自己的微調(diào)大模型,這種方式主要是通過(guò)你上傳格式化的“問(wèn)-答”型的訓(xùn)練數(shù)據(jù)文件來(lái)實(shí)現(xiàn)對(duì)LLM的“增強(qiáng)”。相對(duì)于最新推出的“Assistant API” ,感覺(jué)這種方式在工程化的顯得不夠靈活和直接,不是很“智能”,目前“fine-tuning model”最高也只能支持GPT-3.5系列模型。如下圖:

檢索增強(qiáng)生成(RAG)技術(shù)概述和應(yīng)用

通過(guò)上一章的介紹,你可以發(fā)現(xiàn)OpenAI已經(jīng)大規(guī)模使用工程化的技術(shù)使用戶(hù)能夠基于自己的知識(shí)庫(kù)對(duì)其GTP系列大模型進(jìn)行“增強(qiáng)”,從而實(shí)現(xiàn)更加垂直化、個(gè)性化的能力。那么,如果你基于成本或安全的考慮,想在私域進(jìn)行自有知識(shí)庫(kù)的“增強(qiáng)”,甚至切換成其它的大模型來(lái)使用這個(gè)“增強(qiáng)”,就不得不考慮自行開(kāi)發(fā)實(shí)現(xiàn)了,這時(shí)候就需要了解檢索增強(qiáng)生成(RAG)概念和向量數(shù)據(jù)庫(kù)技術(shù)的應(yīng)用。

什么是檢索增強(qiáng)生成

檢索增強(qiáng)生成(RAG)技術(shù)人工智能的應(yīng)用方法,它通過(guò)結(jié)合傳統(tǒng)的信息檢索技術(shù)與最新的生成式深度學(xué)習(xí)模型,來(lái)提升信息的準(zhǔn)確性和相關(guān)性。RAG理論來(lái)自于2020年Facebook的論文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(知識(shí)密集型自然語(yǔ)言處理任務(wù)的檢索增強(qiáng)生成,原文:https://arxiv.org/abs/2005.11401)。RAG的核心思想是在大模型生成回答之前,先從一個(gè)知識(shí)庫(kù)中檢索出與查詢(xún)最相關(guān)的信息,然后基于這些信息生成準(zhǔn)確的回答。

一般來(lái)說(shuō)RAG的工作原理是:首先利用一個(gè)檢索組件在知識(shí)庫(kù)(這個(gè)過(guò)程一般使用向量數(shù)據(jù)庫(kù)實(shí)現(xiàn))中查找與用戶(hù)查詢(xún)相關(guān)的文檔或數(shù)據(jù),這一步驟確保了生成過(guò)程基于的是與查詢(xún)高度相關(guān)的信息。隨后,這些檢索到的信息被送入一個(gè)生成模型(如GPT系列大模型),該模型結(jié)合檢索到的信息和原始查詢(xún)生成詳盡的回答或內(nèi)容。其核心流程如下圖(參考:https://aws.amazon.com/cn/what-is/retrieval-augmented-generation):

RAG典型的應(yīng)用場(chǎng)景一般在問(wèn)答系統(tǒng)、內(nèi)容推薦、數(shù)據(jù)分析領(lǐng)域。其優(yōu)勢(shì)主要在于能夠結(jié)合檢索結(jié)果生成回答,提高了只依賴(lài)大模型回答的準(zhǔn)確度、實(shí)時(shí)性和信息的豐富性。

為什么是向量數(shù)據(jù)庫(kù)

上面我們提到RAG技術(shù)一般會(huì)使用向量數(shù)據(jù)庫(kù)做為“知識(shí)庫(kù)”來(lái)支撐用戶(hù)存儲(chǔ)和檢索自己的文檔或數(shù)據(jù)。關(guān)于向量數(shù)據(jù)庫(kù)的理論和概念最近隨著AIGC的火熱被談?wù)摰暮芏嗔?,這里有2篇文章能讓你快速的了解它:

1.介紹向量數(shù)據(jù)庫(kù)的數(shù)學(xué)理論:相似性度量——余弦相似度和點(diǎn)積,曼哈頓距離(L1)和歐幾里得距離(L2),https://cloud.tencent.com/developer/article/2336891

2.介紹向量數(shù)據(jù)庫(kù)的概念、原理、算法以及選型:https://guangzhengli.com/blog/zh/vector-database

對(duì)于RAG(檢索增強(qiáng)生成)技術(shù)方案來(lái)說(shuō),為什么使用向量數(shù)據(jù)庫(kù),主要是因?yàn)槠洳粌H能提供傳統(tǒng)的結(jié)構(gòu)化/非結(jié)構(gòu)化數(shù)據(jù)庫(kù)增刪改查(CRUD)以及元數(shù)據(jù)管理的能力,還在處理高維數(shù)據(jù),特別是處理深度學(xué)習(xí)模型生成的向量數(shù)據(jù)方面具有特殊的優(yōu)勢(shì),具體表現(xiàn)在:

1.維度。深度學(xué)習(xí)模型生成的文本、圖像或語(yǔ)音向量通常位于高維空間中。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)并不擅長(zhǎng)處理這類(lèi)高維數(shù)據(jù),因?yàn)樗鼈冎饕菫樘幚斫Y(jié)構(gòu)化數(shù)據(jù)(如表格數(shù)據(jù))而設(shè)計(jì)的。相比之下,向量數(shù)據(jù)庫(kù)天生就是為了存儲(chǔ)和管理高維空間數(shù)據(jù)而構(gòu)建,能夠有效地處理和存儲(chǔ)這類(lèi)數(shù)據(jù)。

2.速度。向量數(shù)據(jù)庫(kù)專(zhuān)門(mén)設(shè)計(jì)用于存儲(chǔ)高維向量,并支持快速的相似性搜索。在RAG技術(shù)中,需要從大量數(shù)據(jù)中檢索與查詢(xún)最相關(guān)的信息,這通常涉及到計(jì)算查詢(xún)向量與數(shù)據(jù)庫(kù)中所有向量之間的相似度。向量數(shù)據(jù)庫(kù)通過(guò)優(yōu)化的索引結(jié)構(gòu)和近似最近鄰(ANN)搜索算法,能夠高效地完成這一任務(wù),顯著提高檢索速度。

3.推理。向量數(shù)據(jù)庫(kù)支持基于向量相似度的復(fù)雜查詢(xún),這對(duì)于RAG技術(shù)中的自然語(yǔ)言查詢(xún)處理至關(guān)重要。它們可以根據(jù)查詢(xún)的語(yǔ)義內(nèi)容相關(guān)性而非僅僅是關(guān)鍵字匹配來(lái)檢索信息,這使得向量數(shù)據(jù)庫(kù)具有“推理”的能力,而非只是“查詢(xún)”。

向量數(shù)據(jù)庫(kù)一般基于嵌入模型(Embedding Models)將文本向量化,從而來(lái)完成推理。前面提到Google發(fā)布的BERT模型和OpenAI發(fā)布的GPT模型都能提供嵌入(Embedding)計(jì)算的能力,但一般BERT系列模型相對(duì)于GPT系列模型會(huì)“小”很多,這體現(xiàn)在參數(shù)數(shù)量和磁盤(pán)占用上,可以說(shuō)是“小模型”和“大模型”之分,在做向量計(jì)算時(shí)該如何選擇呢?簡(jiǎn)單的說(shuō)它們的相同點(diǎn)都是基于深度學(xué)習(xí)“將數(shù)據(jù)轉(zhuǎn)換為高維向量表示”。不同點(diǎn)在于小模型側(cè)重于數(shù)據(jù)的有效關(guān)聯(lián)判定和簡(jiǎn)單邏輯推理,而大模型則側(cè)重于深入理解和生成文本等更復(fù)雜的任務(wù),具體如下:


小模型

大模型

設(shè)計(jì)目標(biāo)和用途

通常設(shè)計(jì)為特定任務(wù)的一部分,比如將單詞、句子或文檔轉(zhuǎn)換為向量形式,這些向量隨后用于各種任務(wù)(如聚類(lèi)、相似度搜索等)。

為理解文本上下文并生成文本而設(shè)計(jì)的??梢灾苯佑糜谏晌谋?、問(wèn)答、提取摘要等任務(wù)。

模型規(guī)模和復(fù)雜性

往往相對(duì)簡(jiǎn)單,參數(shù)量少,專(zhuān)注于有效地將數(shù)據(jù)轉(zhuǎn)換為嵌入向量。一般模型主體占用數(shù)百M(fèi)B磁盤(pán)空間。

擁有極大的參數(shù)量(從幾十億到幾百億不等),設(shè)計(jì)更為復(fù)雜,可以捕獲數(shù)據(jù)中的細(xì)微語(yǔ)義和結(jié)構(gòu)。占用TB級(jí)磁盤(pán)空間(AI估算)。

訓(xùn)練數(shù)據(jù)和過(guò)程

訓(xùn)練通?;谔囟ㄈ蝿?wù)的數(shù)據(jù)集,目標(biāo)是學(xué)習(xí)良好的數(shù)據(jù)表示。

通過(guò)在龐大的數(shù)據(jù)集上進(jìn)行預(yù)訓(xùn)練,學(xué)習(xí)語(yǔ)言的廣泛特征和模式,然后可以在特定任務(wù)上進(jìn)行微調(diào)(fine-tuning)以提高性能。

在向量數(shù)據(jù)庫(kù)中的應(yīng)用

產(chǎn)生的向量直接用于向量數(shù)據(jù)庫(kù)中,以支持快速的相似性檢索和推理。

產(chǎn)生的向量可以用于向量數(shù)據(jù)庫(kù)。但通常更注重捕捉豐富的語(yǔ)義信息,在需要深度理解的應(yīng)用場(chǎng)景中作用更大。

下一節(jié)的例子會(huì)展示以上區(qū)別。

目前,在市場(chǎng)上可供選擇的向量數(shù)據(jù)庫(kù)產(chǎn)品越來(lái)越多了,其中Faiss(Facebook AI Similarity Search)、Milvus等產(chǎn)品已經(jīng)可以用于企業(yè)級(jí)生產(chǎn)。

Chroma是2023年中旬發(fā)布的一個(gè)面向AI應(yīng)用的開(kāi)源向量數(shù)據(jù)庫(kù),簡(jiǎn)單、輕量、易用,是專(zhuān)門(mén)為自然語(yǔ)言處理(NLP)、圖像分類(lèi)、構(gòu)建推薦系統(tǒng)和聊天機(jī)器人等領(lǐng)域的應(yīng)用而設(shè)計(jì)的,非常適合用來(lái)快速構(gòu)建和探索RAG應(yīng)用。

舉個(gè)例子

下面用實(shí)際Python代碼展示一個(gè)基于Chroma向量數(shù)據(jù)庫(kù)實(shí)現(xiàn)RAG關(guān)鍵步驟“文本推理”(對(duì)應(yīng)3.1節(jié)示意圖環(huán)節(jié)②③)的例子,分別使用“小模型”和“大模型”對(duì)中文文本進(jìn)行向量化處理,然后針對(duì)三個(gè)問(wèn)題進(jìn)行推理,比較這兩種不同模型得到的結(jié)果:

1. 創(chuàng)建chroma數(shù)據(jù)庫(kù)實(shí)例并啟動(dòng)它。當(dāng)然,在此之前你可能需要用一行代碼先安裝它“pip install chromadb”,更多的資料可以參考官方文檔:https://docs.trychroma.com/getting-started

import chromadb

basePath = "/dev/chromadbDemo/"


chroma_client = chromadb.PersistentClient(path=basePath + "chromadata")
print("數(shù)據(jù)庫(kù)已啟動(dòng):" + str(chroma_client))

2. 從磁盤(pán)上加載4段長(zhǎng)文本以及錄入4段短文本,用來(lái)構(gòu)建你自己的“知識(shí)庫(kù)”。

# ——————————————————————準(zhǔn)備數(shù)據(jù)——————————————————————

# 紅樓夢(mèng)(千字概述,正常風(fēng)格)
file_path_hlm = basePath + "book_HLM.txt"
# 金瓶梅(千字概述,正常風(fēng)格)
file_path_jpm = basePath + "book_JPM.txt"
# 水滸傳(千字概述,無(wú)厘頭風(fēng)格)
file_path_shz = basePath + "book_SHZ.txt"
# 指環(huán)王(千字概述,莎士比亞風(fēng)格)
file_path_zhw = basePath + "book_ZHW.txt"
docs = [
    open(file_path_hlm, "r", encoding="utf-8").read(),
    open(file_path_jpm, "r", encoding="utf-8").read(),
    open(file_path_shz, "r", encoding="utf-8").read(),
    open(file_path_zhw, "r", encoding="utf-8").read(),
    "不可以,早晨喝牛奶不科學(xué)",
    "吃了海鮮后是不能再喝牛奶的,因?yàn)榕D讨泻糜芯S生素C,如果海鮮喝牛奶一起服用會(huì)對(duì)人體造成一定的傷害",
    "吃海鮮是不可以吃檸檬的因?yàn)槠渲械木S生素C會(huì)和海鮮中的礦物質(zhì)形成砷",
    "吃海鮮是不能同時(shí)喝牛奶吃水果,這個(gè)至少間隔6小時(shí)以上才可以",
]
metas = [
    {"source": file_path_hlm, "uris": file_path_hlm, "author": "曹雪芹"},
    {"source": file_path_jpm, "uris": file_path_jpm, "author": "蘭陵笑笑生"},
    {"source": file_path_shz, "uris": file_path_shz, "author": "施耐庵"},
    {"source": file_path_zhw, "uris": file_path_zhw, "author": "托爾金"},
    {"source": "my_source1"},
    {"source": "my_source2"},
    {"source": "my_source3"},
    {"source": "my_source4"},
]
ids = ["id-hlm", "id-jpm", "id-shz", "id-zhw", "id1", "id2", "id3", "id4"]

3. 定義處理數(shù)據(jù)的4個(gè)函數(shù),分別是文本轉(zhuǎn)向量的函數(shù)、插入數(shù)據(jù)表的函數(shù)以及2種不同模型創(chuàng)建數(shù)據(jù)集(可以理解為“數(shù)據(jù)庫(kù)表”)的函數(shù)。

# ——————————————————————定義處理數(shù)據(jù)的函數(shù)——————————————————————

# 用于將文本輸入轉(zhuǎn)換為Bert嵌入向量,默認(rèn)使用 bert-base-chinese 模型和分詞器處理文本。
def bert_embedding(text, modelName="bert-base-chinese"):
    from transformers import BertModel, BertTokenizer

    tokenizer = BertTokenizer.from_pretrained(modelName)
    model = BertModel.from_pretrained(modelName)
    inputs = tokenizer(
        text, return_tensors="pt", padding=True, truncation=True, max_length=512
    )
    outputs = model(**inputs)
    embeddings = outputs.last_hidden_state[:, 0, :].detach().numpy()
    return embeddings


# 插入數(shù)據(jù)
def setData(collection, embedding=None):
    if embedding is None:
        collection.upsert(
            documents=docs,
            metadatas=metas,
            ids=ids,
        )
    else:
        collection.upsert(
            embeddings=embedding,
            documents=docs,
            metadatas=metas,
            ids=ids,
        )
    return collection


# 使用指定的嵌入模型建數(shù)據(jù)集,不指定則默認(rèn)為:Sentence Transformers all-MiniLM-L6-v2
def getDefaultEmbeddingCollection(embeddingModelName=""):
    collection = chroma_client.get_or_create_collection(name="collection_default")
    if embeddingModelName is None or not embeddingModelName:
        # 默認(rèn)的向量模型
        setData(collection)
    else:
        embedding = bert_embedding(docs, embeddingModelName)
        collection = setData(collection, embedding)
        collection.name = "collection_" + embeddingModelName
    return collection


# 使用OpenAI的text-embedding-ada-002模型建數(shù)據(jù)集
def getOpenAIEmbeddingCollection():
    import chromadb.utils.embedding_functions as embedding_functions

    openai_ef = embedding_functions.OpenAIEmbeddingFunction(
        api_key="[填入你的 OpenAI API Key]",
        model_name="text-embedding-ada-002",
    )
    collection = chroma_client.get_or_create_collection(
        name="collection_text-embedding-ada-002", embedding_function=openai_ef
    )
    setData(collection)
    return collection

4. 在這里定義3個(gè)問(wèn)題,用來(lái)測(cè)試基于不同模型數(shù)據(jù)集的推理能力。同時(shí)定義一個(gè)函數(shù),打印推理結(jié)果。

collections = chroma_client.list_collections()
print("現(xiàn)有數(shù)據(jù)集:" + str(collections))

# 三個(gè)問(wèn)題,用來(lái)測(cè)試不同數(shù)據(jù)集和向量模型的推理能力
q1 = "我想了解中國(guó)四大名著"
q2 = "關(guān)于宋朝發(fā)生的故事"
q3 = "吃完海鮮可以喝牛奶嗎?"


def testModel(collection, q, rtNum, embeddingModelName=None):
    if embeddingModelName is None:
        results = collection.query(query_texts=[q], n_results=rtNum)
        print(q + " - 查詢(xún)結(jié)果:" + str(results) + "\n")
    else:
        results = collection.query(
            query_embeddings=bert_embedding(q, embeddingModelName), n_results=rtNum
        )
        print(q + " - 查詢(xún)結(jié)果:" + str(results) + "\n")

有了以上的準(zhǔn)備,就可以開(kāi)始測(cè)試了。

首先我們使用“bert-base-chinese”這樣的“小模型”對(duì)問(wèn)題進(jìn)行推理測(cè)試,這是Google基于BERT架構(gòu)(Bidirectional Encoder Representations from Transformers)推出的中文預(yù)訓(xùn)練模型,能夠理解中文語(yǔ)境和語(yǔ)義,模型本身約400+MB(參考:https://huggingface.co/google-bert/bert-base-chinese),執(zhí)行Python可以自動(dòng)下載到本地。測(cè)試代碼如下:

modelName = "bert-base-chinese"
collection = getDefaultEmbeddingCollection(modelName)

print("當(dāng)前collection:" + str(collection) + "\n")
testModel(collection, q1, 2, modelName) #問(wèn)題1返回2筆推理結(jié)果
testModel(collection, q2, 3, modelName) #問(wèn)題2返回3筆推理結(jié)果
testModel(collection, q3, 5, modelName) #問(wèn)題3返回5筆推理結(jié)果

執(zhí)行上述Python代碼,截取控制臺(tái)打印的相關(guān)輸出如下:

當(dāng)前collection:name='collection_bert-base-chinese' id=UUID('d0fe761d-3e64-4b89-ab8a-59a7253d44a7') metadata=None tenant='default_tenant' database='default_database'

我想了解中國(guó)四大名著 - 查詢(xún)結(jié)果:{'ids': [['id1', 'id4']], 'distances': [[202.48262633262166, 266.160556742396]], 'metadatas': [[{'source': 'my_source1'}, {'source': 'my_source4'}]], 'embeddings': None, 'documents': [['不可以,早晨喝牛奶不科學(xué)', '吃海鮮是不能同時(shí)喝牛奶吃水果,這個(gè)至少間隔6小時(shí)以上才可以']], 'uris': None, 'data': None}

關(guān)于宋朝發(fā)生的故事 - 查詢(xún)結(jié)果:{'ids': [['id1', 'id3', 'id4']], 'distances': [[253.08461381250856, 300.2129506027819, 334.78790699255]], 'metadatas': [[{'source': 'my_source1'}, {'source': 'my_source3'}, {'source': 'my_source4'}]], 'embeddings': None, 'documents': [['不可以,早晨喝牛奶不科學(xué)', '吃海鮮是不可以吃檸檬的因?yàn)槠渲械木S生素C會(huì)和海鮮中的礦物質(zhì)形成砷', '吃海鮮是不能同時(shí)喝牛奶吃水果,這個(gè)至少間隔6小時(shí)以上才可以']], 'uris': None, 'data': None}

吃完海鮮可以喝牛奶嗎? - 查詢(xún)結(jié)果:{'ids': [['id1', 'id2', 'id4', 'id3', 'id-hlm']], 'distances': [[
  173.57739555949934, 
  201.32507459764457, 
  202.22220711154088, 
  261.7239443921094, 
  452.04586252776966]], 'metadatas': [[{'source': 'my_source1'}, {'source': 'my_source2'}, {'source': 'my_source4'}, {'source': 'my_source3'}, {'author': '曹雪芹', 'source': '/dev/chromadbDemo/book_HLM.txt', 'uris': '/dev/chromadbDemo/book_HLM.txt'}]], 'embeddings': None, 'documents': [[
  '不可以,早晨喝牛奶不科學(xué)', 
  '吃了海鮮后是不能再喝牛奶的,因?yàn)榕D讨泻糜芯S生素C,如果海鮮喝牛奶一起服用會(huì)對(duì)人體造成一定的傷害', 
  '吃海鮮是不能同時(shí)喝牛奶吃水果,這個(gè)至少間隔6小時(shí)以上才可以', 
  '吃海鮮是不可以吃檸檬的因?yàn)槠渲械木S生素C會(huì)和海鮮中的礦物質(zhì)形成砷', 
  '《紅樓夢(mèng)》是清代曹雪芹創(chuàng)作的一部長(zhǎng)篇小說(shuō),被譽(yù)為中國(guó)古代四大名著之一。該作品通過(guò)賈、王、史、薛四大家族的興衰史,細(xì)膩地描繪了封建王朝末期的社會(huì)生活,深刻揭示了封建社會(huì)的腐朽與衰敗……此處省略1000字'
]], 'uris': None, 'data': None}

解讀一下關(guān)鍵信息:ids字段是返回的結(jié)果標(biāo)識(shí);distances字段是向量距離,意思是問(wèn)題和結(jié)果的相關(guān)性,距離越短表示越相關(guān);documents字段則是返回的具體結(jié)果數(shù)據(jù)??梢园l(fā)現(xiàn):

1.“bert-base-chinese”模型的distances一般算出來(lái)是百位數(shù);

2.“小模型”是可以基于簡(jiǎn)短文本數(shù)據(jù)進(jìn)行一些簡(jiǎn)單推理的,例如“bert-base-chinese”模型對(duì)問(wèn)題3“吃完海鮮可以喝牛奶嗎?”的推理結(jié)果“基本”合格;

3.“小模型”基于較長(zhǎng)文本數(shù)據(jù)的推理很“隨機(jī)”,效果很差,例如“bert-base-chinese”模型對(duì)于問(wèn)題1“中國(guó)四大名著”和問(wèn)題2“宋朝的故事”的問(wèn)題就完全無(wú)法理解,盡管在我提供的長(zhǎng)文本數(shù)據(jù)里明顯含有這2個(gè)問(wèn)題的關(guān)鍵詞。

然后我們使用“OpenAI text-embedding-ada-002”這樣的“大模型”對(duì)問(wèn)題進(jìn)行推理測(cè)試。測(cè)試代碼如下:

collection = getOpenAIEmbeddingCollection()

print("當(dāng)前collection:" + str(collection) + "\n")
testModel(collection, q1, 2) #問(wèn)題1返回2筆推理結(jié)果
testModel(collection, q2, 3) #問(wèn)題2返回3筆推理結(jié)果
testModel(collection, q3, 5) #問(wèn)題3返回5筆推理結(jié)果

執(zhí)行上述代碼,得到如下關(guān)鍵輸出:

當(dāng)前collection:name='collection_text-embedding-ada-002' id=UUID('ec450ccf-8359-4bfb-ab2b-f4bde881cb06') metadata=None tenant='default_tenant' database='default_database'

我想了解中國(guó)四大名著 - 查詢(xún)結(jié)果:{'ids': [['id-hlm', 'id-jpm']], 'distances': [[
  0.38686231602994325, 
  0.401715835018107]], 'metadatas': [[{'author': '曹雪芹', 'source': '/dev/chromadbDemo/book_HLM.txt', 'uris': '/dev/chromadbDemo/book_HLM.txt'}, {'author': '蘭陵笑笑生', 'source': '/dev/chromadbDemo/book_JPM.txt', 'uris': '/chromadbDemo/book_JPM.txt'}]], 'embeddings': None, 'documents': [[
  '《紅樓夢(mèng)》是清代曹雪芹創(chuàng)作的一部長(zhǎng)篇小說(shuō),被譽(yù)為中國(guó)古代四大名著之一。該作品通過(guò)賈、王、史、薛四大家族的興衰史,細(xì)膩地描繪了封建王朝末期的社會(huì)生活,深刻揭示了封建社會(huì)的腐朽與衰敗。小說(shuō)以賈寶玉和林黛玉的愛(ài)情悲劇為主線,通過(guò)豐富的人物群像和錯(cuò)綜復(fù)雜的情節(jié)展現(xiàn)了一個(gè)廣闊的社會(huì)生活畫(huà)卷……此處省略1000字', 
  '《金瓶梅》是中國(guó)文學(xué)史上的一部重要小說(shuō),被認(rèn)為是明代中期的作品,作者一般被認(rèn)為是蘭陵笑笑生。這部小說(shuō)以宋代開(kāi)封為背景,詳細(xì)描繪了主人公西門(mén)慶與他的家人、情人、朋友之間的復(fù)雜關(guān)系,以及由此引發(fā)的一系列社會(huì)和家庭沖突……此處省略1000字']], 'uris': None, 'data': None}

關(guān)于宋朝發(fā)生的故事 - 查詢(xún)結(jié)果:{'ids': [['id-shz', 'id-jpm', 'id-zhw']], 'distances': [[
  0.322985944455922, 
  0.3312445684997755, 
  0.33733609769548206]], 'metadatas': [[{'author': '施耐庵', 'source': '/dev/chromadbDemo/book_SHZ.txt', 'uris': '/dev/chromadbDemo/book_SHZ.txt'}, {'author': '蘭陵笑笑生', 'source': '/dev/chromadbDemo/book_JPM.txt', 'uris': '/dev/chromadbDemo/book_JPM.txt'}, {'author': '托爾金', 'source': '/dev/chromadbDemo/book_ZHW.txt', 'uris': '/dev/chromadbDemo/book_ZHW.txt'}]], 'embeddings': None, 'documents': [[
  '水滸傳,一本讓人眼花繚亂的古典名著,故事內(nèi)容豐富得可以用來(lái)炒一大鍋劇情泡面。整個(gè)故事發(fā)生在北宋時(shí)期,可以想象成一個(gè)古代的超級(jí)英雄聯(lián)盟,但這些英雄不穿緊身衣,而是穿著古代漢服,橫掃江湖,打擊不公……此處省略1000字', 
  '《金瓶梅》是中國(guó)文學(xué)史上的一部重要小說(shuō),被認(rèn)為是明代中期的作品,作者一般被認(rèn)為是蘭陵笑笑生。這部小說(shuō)以宋代開(kāi)封為背景,詳細(xì)描繪了主人公西門(mén)慶與他的家人、情人、朋友之間的復(fù)雜關(guān)系,以及由此引發(fā)的一系列社會(huì)和家庭沖突……此處省略1000字', 
  '在中世紀(jì)幻想的土地,被稱(chēng)為中土的地方,誕生了一部偉大的故事——《指環(huán)王》。這部史詩(shī)般的作品,如同莎士比亞之筆下的戲劇,充滿(mǎn)了權(quán)力的爭(zhēng)斗、勇氣的考驗(yàn)、忠誠(chéng)與背叛的較量,以及對(duì)自由與愛(ài)的無(wú)盡追求。\n\n噢,聽(tīng)吧,那遙遠(yuǎn)的號(hào)角在召喚,就如同命運(yùn)之神在低語(yǔ),引領(lǐng)我們走向那個(gè)被稱(chēng)為“魔戒”的強(qiáng)大而又可怕的物品……此處省略1000字']], 'uris': None, 'data': None}

吃完海鮮可以喝牛奶嗎? - 查詢(xún)結(jié)果:{'ids': [['id2', 'id4', 'id3', 'id1', 'id-shz']], 'distances': [[
  0.18699816057051363, 
  0.2437766582633824, 
  0.3233349839279665, 
  0.33243019058071627, 
  0.5406020260719162]], 'metadatas': [[{'source': 'my_source2'}, {'source': 'my_source4'}, {'source': 'my_source3'}, {'source': 'my_source1'}, {'author': '施耐庵', 'source': '/dev/chromadbDemo/book_SHZ.txt', 'uris': '/dev/chromadbDemo/book_SHZ.txt'}]], 'embeddings': None, 'documents': [[
  '吃了海鮮后是不能再喝牛奶的,因?yàn)榕D讨泻糜芯S生素C,如果海鮮喝牛奶一起服用會(huì)對(duì)人體造成一定的傷害', 
  '吃海鮮是不能同時(shí)喝牛奶吃水果,這個(gè)至少間隔6小時(shí)以上才可以', 
  '吃海鮮是不可以吃檸檬的因?yàn)槠渲械木S生素C會(huì)和海鮮中的礦物質(zhì)形成砷', 
  '不可以,早晨喝牛奶不科學(xué)', 
  '水滸傳,一本讓人眼花繚亂的古典名著,故事內(nèi)容豐富得可以用來(lái)炒一大鍋劇情泡面。整個(gè)故事發(fā)生在北宋時(shí)期,可以想象成一個(gè)古代的超級(jí)英雄聯(lián)盟,但這些英雄不穿緊身衣,而是穿著古代漢服,橫掃江湖,打擊不公……此處省略1000字']], 'uris': None, 'data': None}

對(duì)比第一次小模型測(cè)試的結(jié)果,我們可以明顯感覺(jué)到:

1.“OpenAI text-embedding-ada-002”模型的distances算出來(lái)都是小于1,但含義仍然是“距離越小越相關(guān)”;

2.“大模型”基于簡(jiǎn)短文本數(shù)據(jù)的推理相當(dāng)精確,針對(duì)問(wèn)題3“吃完海鮮可以喝牛奶嗎?”的推理結(jié)果堪稱(chēng)完美,相對(duì)于之前的“小模型”結(jié)果,“大模型”能準(zhǔn)確的把“海鮮與檸檬”、“早晨喝牛奶”這類(lèi)相關(guān)性較差數(shù)據(jù)的向量距離依次排開(kāi),并且能把“水滸傳”這類(lèi)相關(guān)性極差數(shù)據(jù)的向量距離明顯拉開(kāi)。

3.“大模型”基于較長(zhǎng)文本數(shù)據(jù)的推理在這個(gè)測(cè)試中都在首位命中了事實(shí)上最相關(guān)的結(jié)果,例如它能在問(wèn)題1“我想了解中國(guó)四大名著”的推理中把描述紅樓夢(mèng)的數(shù)據(jù)排在第1位以及問(wèn)題2“關(guān)于宋朝發(fā)生的故事”的推理中把描述水滸傳的數(shù)據(jù)排在第1位。但也都有不足,例如它在問(wèn)題1“我想了解中國(guó)四大名著”的推理結(jié)果中把描述金瓶梅的數(shù)據(jù)排在第2位,按照常識(shí)應(yīng)該水滸傳才是四大名著之一;在問(wèn)題2“關(guān)于宋朝發(fā)生的故事”的推理結(jié)果中把描述指環(huán)王的數(shù)據(jù)排在第3位,而按照常識(shí)紅樓夢(mèng)似乎和中國(guó)、宋朝的相關(guān)性比指環(huán)王會(huì)更高一些。

上述的例子使用Python代碼編寫(xiě),當(dāng)然也可以使用Java實(shí)現(xiàn),Chroma也有相關(guān)的Java SDK可以使用。如果說(shuō)Java是企業(yè)應(yīng)用時(shí)代的原生語(yǔ)言,那么Python就是AI時(shí)代的原生語(yǔ)言,大多數(shù)AI項(xiàng)目的官方支持語(yǔ)言都是Python,并且相對(duì)于Java來(lái)說(shuō),Python的學(xué)習(xí)和應(yīng)用更加簡(jiǎn)便,建議直接用起來(lái)。

基于上述簡(jiǎn)單的測(cè)試證明我們可以將類(lèi)似OpenAI “text-embedding-ada-002”這樣的大模型應(yīng)用到實(shí)際的RAG生產(chǎn)中,事實(shí)上目前京東很多AI客戶(hù)服務(wù)使用的向量嵌入模型正是OpenAI “text-embedding-ada-002”。鑒于text-embedding-ada-002這個(gè)模型是GTP3時(shí)代的產(chǎn)品,相信未來(lái)OpenAI推出基于GTP4的嵌入模型一定會(huì)更加強(qiáng)大精準(zhǔn)。

而小模型對(duì)于本地化訓(xùn)練、垂直領(lǐng)域RAG應(yīng)用,特別是學(xué)習(xí)研究AI技術(shù)是更方便的。如果你不想編寫(xiě)代碼,有一些網(wǎng)站也能提供良好的沙箱,供你學(xué)習(xí)、調(diào)試小型嵌入模型,這些模型不僅限于文本,還包括圖像、語(yǔ)音,甚至視頻,國(guó)外的有“抱臉”https://huggingface.co,國(guó)內(nèi)的有“魔搭”https://modelscope.cn,都值得一試。

智能體(Agent)的概念、應(yīng)用和集成

智能體的概念和開(kāi)發(fā)思想

上面我們提到可以利用RAG技術(shù)結(jié)合自有知識(shí)庫(kù)對(duì)大模型進(jìn)行增強(qiáng),從而獲得更準(zhǔn)確、實(shí)時(shí)、豐富的垂直內(nèi)容或個(gè)性化結(jié)果。但這仍然沒(méi)有跳出內(nèi)容生成(AIGC)的范疇,如果你需要人工智能像一個(gè)“以終為始”的高效率員工一樣自主選取各種工具、和各種不同系統(tǒng)溝通協(xié)同工作,直到交付最終結(jié)果,那么就需要了解“智能體”這個(gè)方案了。

智能體(Agent)技術(shù)是人工智能應(yīng)用的一個(gè)核心概念,是指可以自主執(zhí)行任務(wù)、作出決策,并在一定程度上模擬人類(lèi)或其他智能實(shí)體行為的計(jì)算機(jī)程序或機(jī)器。目前智能體在仿真、游戲、客戶(hù)服務(wù)以及自動(dòng)化控制等多個(gè)領(lǐng)域和應(yīng)用中展示了巨大的潛力,從簡(jiǎn)單的自動(dòng)化腳本到復(fù)雜的決策支持系統(tǒng),智能體在軟件和硬件系統(tǒng)中通過(guò)扮演感知者、執(zhí)行者、決策者或?qū)W習(xí)者等多種角色來(lái)完成任務(wù)。

關(guān)于智能體的理論依據(jù)可以參考發(fā)表于2023年的論文 Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models(計(jì)劃與解決提示:通過(guò)大型語(yǔ)言模型改進(jìn)零點(diǎn)思維鏈推理,原文:https://arxiv.org/abs/2305.04091),文章主要提出了一種改進(jìn)大型語(yǔ)言模型在零次學(xué)習(xí)環(huán)境下執(zhí)行多步驟推理任務(wù)的方法,作者通過(guò)三個(gè)步驟來(lái)論證:第一步通過(guò)幾個(gè)手工制作的逐步推理示例(few-shot chain-of-thought prompting),證明大模型能夠明確地生成推理步驟并提高其推理任務(wù)的準(zhǔn)確性;第二步為了消除手動(dòng)制作示例的工作量,作者提出了零樣本思維鏈方法(Zero-shot Chain-of-Thought),該方法將目標(biāo)問(wèn)題聲明與“讓我們一步步來(lái)思考”的引導(dǎo)過(guò)程作為輸入提示給大模型;第三步,為了解決零樣本思維鏈方法存在的“遺漏步驟”錯(cuò)誤,作者提出了“先計(jì)劃再求解(PS, Plan-and-Solve)”的提示策略。

文章提出的“先計(jì)劃再求解”原理是一些智能體產(chǎn)品設(shè)計(jì)開(kāi)發(fā)的核心思想,其遵循以下幾個(gè)步驟:

1.明確問(wèn)題:首先,需要明確問(wèn)題的核心內(nèi)容和目標(biāo)。即使問(wèn)題未知,也可以通過(guò)一些通用的啟動(dòng)語(yǔ)句引導(dǎo)模型聚焦問(wèn)題,通用的提示可以是:“讓我們首先理解問(wèn)題的核心并制定一個(gè)解決方案的計(jì)劃?!?/p>

2.劃分子任務(wù):對(duì)于大部分復(fù)雜問(wèn)題,可以將其分解為更小的、更易于管理和解決的子任務(wù)。通用的提示可以是:“接下來(lái),根據(jù)這個(gè)計(jì)劃分解問(wèn)題為子任務(wù)?!?/p>

3.制定具體計(jì)劃:基于子任務(wù),進(jìn)一步細(xì)化出解決每個(gè)子任務(wù)的具體計(jì)劃。可以使用類(lèi)似于:“針對(duì)每個(gè)子任務(wù),讓我們制定一個(gè)具體的解決方案或步驟?!钡奶崾?。

4.執(zhí)行并驗(yàn)證:鼓勵(lì)模型按照計(jì)劃執(zhí)行,并在執(zhí)行過(guò)程中檢驗(yàn)每一步的正確性??梢杂茫骸艾F(xiàn)在,按照我們的解決方案計(jì)劃逐步執(zhí)行,并檢查每一步的結(jié)果是否符合任務(wù)的預(yù)期?!钡奶崾緛?lái)指導(dǎo)模型。

5.適時(shí)調(diào)整:如果在執(zhí)行過(guò)程中發(fā)現(xiàn)問(wèn)題或者結(jié)果與預(yù)期不符,需要準(zhǔn)備好調(diào)整計(jì)劃的提示,例如補(bǔ)充類(lèi)似的提示:“如果我們發(fā)現(xiàn)任何步驟的結(jié)果不如預(yù)期,讓我們回顧并調(diào)整我們的計(jì)劃。”

6.總結(jié)答案:最后,鼓勵(lì)模型匯總執(zhí)行計(jì)劃后的結(jié)果,給出最終的答案或解決方案,提示可以是:“最后,綜合我們所有子任務(wù)解決方案執(zhí)行的結(jié)果,總結(jié)出問(wèn)題答案或最終解決方案?!?/p>

舉個(gè)例子

在2022年大模型浪潮爆發(fā)后不久,開(kāi)源的智能體項(xiàng)目也跟著大量的涌現(xiàn)。從最早AutoGPT推出時(shí)的轟動(dòng),到目前MetaGPT的逐步應(yīng)用,我通過(guò)自己的跟蹤測(cè)試能深切的體會(huì)到這項(xiàng)技術(shù)從“一言難盡”到日趨成熟,在工業(yè)生產(chǎn)中的使用指日可期。

AutoGPT和MetaGPT都是非常有前景的開(kāi)源智能體產(chǎn)品,值得學(xué)習(xí)和借鑒。AutoGPT的運(yùn)行可能會(huì)麻煩一些,建議在Docker環(huán)境下跑效果會(huì)更好,參考官方文檔:https://docs.agpt.co;MetaGPT可以比較方便的在Python環(huán)境下運(yùn)行,而且有中文官方文檔:https://docs.deepwisdom.ai/main/zh/guide/get_started/introduction.html。

如果你不想編寫(xiě)代碼,也快速體驗(yàn)智能體產(chǎn)品,使用Tavily會(huì)比較方便。Tavily的口號(hào)是“對(duì)耗時(shí)的研究說(shuō)再見(jiàn)”——聲稱(chēng)可以幫助你快速洞察和全面研究一個(gè)課題,從準(zhǔn)確收集信息源到整理研究成果,并且將所有工作都集中在一個(gè)平臺(tái)上完成。商業(yè)模式是對(duì)API調(diào)用次數(shù)及調(diào)用其高質(zhì)量實(shí)時(shí)知識(shí)庫(kù)增強(qiáng)推理(RAG)付費(fèi),值得借鑒。

Tavily可以提供一個(gè)沙箱(APIPlayground),供用戶(hù)測(cè)試其“針對(duì)高質(zhì)量實(shí)時(shí)知識(shí)優(yōu)化的大模型增強(qiáng)檢索”API,沙箱只開(kāi)放通用知識(shí)庫(kù)(垂直的高質(zhì)量實(shí)時(shí)知識(shí)庫(kù)需要付費(fèi)才能使用),沙箱的測(cè)試結(jié)果會(huì)返回互聯(lián)網(wǎng)上的相關(guān)知識(shí)集。我提出了一個(gè)極富挑戰(zhàn)性的課題進(jìn)行測(cè)試,效果如下圖:

Tavily還提供了一個(gè)研究助手(Research Assistant)的Web應(yīng)用,供用戶(hù)在線使用智能體產(chǎn)品,需要用戶(hù)使用自己的OpenAI API Key調(diào)用GPT4服務(wù),支持“深度研究”,也就是要消耗更多的算力和時(shí)間(錢(qián))獲得更高質(zhì)量的結(jié)果。我提出了一個(gè)很直接很實(shí)用的課題進(jìn)行測(cè)試,消耗了大約2元多人民幣的API調(diào)用費(fèi),獲得了一份大約1500字的報(bào)告,過(guò)程如下圖:

后面我繼續(xù)針對(duì)這個(gè)課題測(cè)試了幾輪,感覺(jué)還是有一些正確的分析和建設(shè)性的結(jié)果,但也存在比較多的“幻覺(jué)”,需要用戶(hù)自行甄別,不完美,有提升的空間。有條件的話可以試用一下:https://app.tavily.com/chat。

集成大模型、RAG和智能體的方法和場(chǎng)景

通過(guò)前面的介紹,我們能夠理解大模型、RAG和智能體這些技術(shù)和理念的潛力在于相互結(jié)合,形成更為強(qiáng)大和靈活的AI系統(tǒng)——即結(jié)合大模型的深層次語(yǔ)言理解和生成能力、RAG的垂直和實(shí)時(shí)的信息檢索能力以及智能體的決策和執(zhí)行能力。

這種集成可以通過(guò)多種方式實(shí)現(xiàn),例如,通過(guò)中間件來(lái)協(xié)調(diào)不同技術(shù)的交互,或者通過(guò)在一個(gè)統(tǒng)一的框架下直接整合核心技術(shù)。目前,后者是比較主流的方式,因?yàn)長(zhǎng)angChain(https://www.langchain.com)這個(gè)開(kāi)源的AI開(kāi)發(fā)門(mén)面和編排框架用來(lái)做這件事非常優(yōu)秀。LangChain提供了一個(gè)框架,允許開(kāi)發(fā)者將大模型“轉(zhuǎn)化”為能夠執(zhí)行一系列動(dòng)作的智能體,智能體利用大模型作為“推理引擎”,來(lái)動(dòng)態(tài)的確定要采取哪些操作、使用哪些工具以及按什么順序執(zhí)行。LangChain框架主要能夠提供Chain和Agent工具來(lái)幫助你構(gòu)建智能體,Chain能夠最大程度的方便開(kāi)發(fā)者將不同的操作和處理步驟以鏈?zhǔn)降姆绞浇M合成AI流程;Agent工具由Agent類(lèi)型、AgentExecutor、Tools(支持的工具列表:https://python.langchain.com/docs/integrations/tools)這幾個(gè)部分構(gòu)成,幫助開(kāi)發(fā)者將實(shí)時(shí)信息交互、外部數(shù)據(jù)獲取、三方系統(tǒng)調(diào)用等功能集成到“鏈”中以擴(kuò)展或改善AI能力。例如:通過(guò)Google搜索獲取實(shí)時(shí)信息、從OpenWeatherMap獲取天氣信息,以及從Wikipedia獲取百科知識(shí) ??梢哉f(shuō),如果開(kāi)發(fā)AI應(yīng)用,LangChain不可或缺。(參考資料:https://www.ibm.com/topics/langchain)

目前,已經(jīng)有一些比較典型的行業(yè)應(yīng)用方案:

案例1:智能客服系統(tǒng)。在一個(gè)集成了大模型、RAG和智能體的智能客服系統(tǒng)中,大模型可用于理解用戶(hù)的查詢(xún)和生成自然語(yǔ)言回復(fù),RAG技術(shù)可用于從企業(yè)的數(shù)據(jù)庫(kù)和知識(shí)庫(kù)中檢索準(zhǔn)確的信息以支持回復(fù),而智能體則負(fù)責(zé)管理對(duì)話流程、處理事務(wù)性任務(wù)和執(zhí)行復(fù)雜的用戶(hù)請(qǐng)求。這種集成使得客服系統(tǒng)能夠提供更準(zhǔn)確、更人性化的服務(wù),同時(shí)減輕人工客服的負(fù)擔(dān)。

案例2:個(gè)性化教育平臺(tái)。在個(gè)性化教育平臺(tái)的例子中,大模型可以根據(jù)學(xué)生的學(xué)習(xí)進(jìn)度和偏好生成定制的學(xué)習(xí)材料和測(cè)試,RAG技術(shù)可以從廣泛的教育資源中檢索相關(guān)信息以豐富教學(xué)內(nèi)容,而智能體可以根據(jù)學(xué)生的反饋和學(xué)習(xí)成效調(diào)整教學(xué)策略和內(nèi)容。這種集成不僅能夠?yàn)閷W(xué)生提供更加個(gè)性化的學(xué)習(xí)體驗(yàn),還能夠幫助教師更好地理解學(xué)生的需求和進(jìn)步。

案例3:復(fù)雜決策支持系統(tǒng)。集成大模型、RAG和智能體的復(fù)雜決策支持系統(tǒng)能夠在金融、醫(yī)療和科研等領(lǐng)域提供強(qiáng)大的支持。在這種系統(tǒng)中,大模型用于處理和生成語(yǔ)言信息,RAG技術(shù)用于從大量數(shù)據(jù)中檢索相關(guān)信息和案例,智能體則負(fù)責(zé)綜合這些信息,形成決策建議。這種集成系統(tǒng)能夠處理復(fù)雜的查詢(xún),提供基于數(shù)據(jù)的決策支持。

針對(duì)供應(yīng)鏈物流領(lǐng)域通過(guò)集成大模型、RAG和智能體技術(shù),可以從如下幾個(gè)業(yè)務(wù)系統(tǒng)探索突破點(diǎn):

1.倉(cāng)儲(chǔ)管理(WMS):結(jié)合RAG技術(shù)和智能體,系統(tǒng)能夠?qū)崟r(shí)從供應(yīng)商數(shù)據(jù)庫(kù)、倉(cāng)庫(kù)庫(kù)存記錄和銷(xiāo)售數(shù)據(jù)中檢索關(guān)鍵信息,智能調(diào)整庫(kù)存水平,減少庫(kù)存積壓和缺貨風(fēng)險(xiǎn)。

2.運(yùn)輸管理(TMS):通過(guò)分析地理位置數(shù)據(jù)、運(yùn)輸成本和時(shí)間要求,智能體可以規(guī)劃最優(yōu)的貨物配送路線和調(diào)度計(jì)劃。這一過(guò)程會(huì)利用大模型來(lái)處理復(fù)雜的邏輯和約束條件,以確保高效且成本效益的配送。

3.供應(yīng)鏈銷(xiāo)售與運(yùn)營(yíng)規(guī)劃(S&OP):利用大模型處理歷史銷(xiāo)售數(shù)據(jù)、市場(chǎng)趨勢(shì)和用戶(hù)反饋,生成精準(zhǔn)的需求預(yù)測(cè)報(bào)告。智能體能夠?qū)W習(xí)并適應(yīng)市場(chǎng)變化,實(shí)時(shí)調(diào)整預(yù)測(cè)模型,提高預(yù)測(cè)的準(zhǔn)確性。

未來(lái)展望與挑戰(zhàn)

對(duì)于未來(lái),可以預(yù)見(jiàn),AI的開(kāi)發(fā)和應(yīng)用會(huì)面臨諸多的機(jī)遇與問(wèn)題,諸如更加深度的領(lǐng)域知識(shí)融合、數(shù)據(jù)隱私和安全性等等。但最主要的趨勢(shì)一定是未來(lái)的AI系統(tǒng)將具備更強(qiáng)的自適應(yīng)學(xué)習(xí)能力并跳出虛擬世界,正如2023年黃仁勛提到人工智能的下一波浪潮是“具身智能(Embodied AI)”,即AI不僅能夠理解和處理信息,還能夠在物理世界中執(zhí)行任務(wù)和作出反應(yīng)。因此,智能體(Agent)在軟件領(lǐng)域會(huì)快速的發(fā)展,當(dāng)其足夠成熟時(shí),驅(qū)動(dòng)硬件的智能體,即具身智能的規(guī)?;瘧?yīng)用將是水到渠成的事情。隨之而來(lái)的,AI倫理問(wèn)題一定會(huì)受到越來(lái)越多的挑戰(zhàn):AI應(yīng)用決策過(guò)程的透明度和可解釋性、AI決策結(jié)果的偏見(jiàn)不公平甚至歧視、人類(lèi)倫理原則是否得到遵守等,2024年春節(jié)期間和生活在歐洲的同學(xué)交流得知,目前一些西方國(guó)家已經(jīng)在開(kāi)展一些“反人工智能(AntiAI)”的運(yùn)動(dòng)和研究,但主流思想并不是反對(duì)人工智能的發(fā)展,而是建立人工智能治理框架和開(kāi)發(fā)監(jiān)管技術(shù)(例如區(qū)分AI生成的內(nèi)容和人類(lèi)生成的內(nèi)容),以確保人工智能的發(fā)展優(yōu)先考慮人類(lèi)福祉、倫理因素和安全(參考資料:https://dotcommagazine.com/2023/08/anti-ai-top-ten-things-you-need-to-know)。

另外AI技術(shù)發(fā)展與社會(huì)發(fā)展的和諧相融的問(wèn)題也非常值得思考,如何避免AI造成的技術(shù)性失業(yè)這個(gè)問(wèn)題,對(duì)我們軟件開(kāi)發(fā)者而言顯得特別重要。2024年3月在央視《對(duì)話》節(jié)目上,李彥宏表示,“以后不會(huì)存在程序員這種職業(yè)了,因?yàn)橹灰獣?huì)說(shuō)話,人人都會(huì)具備程序員的能力……未來(lái)的編程語(yǔ)言只會(huì)剩下兩種,一種叫做英文,一種叫做中文”?;叵?0年前的軟件開(kāi)發(fā)行業(yè),除了測(cè)試,諸如需求分析、畫(huà)原型、網(wǎng)頁(yè)開(kāi)發(fā)、桌面開(kāi)發(fā)、后臺(tái)服務(wù)開(kāi)發(fā),甚至界面設(shè)計(jì)(美工兼職輔助平面設(shè)計(jì))都是由程序員來(lái)做,幾乎所有當(dāng)時(shí)的“大廠”皆是如此,后來(lái)隨著技術(shù)的演進(jìn)和社會(huì)的發(fā)展,不僅編程開(kāi)發(fā)這個(gè)行當(dāng)分成了前端開(kāi)發(fā)、后端開(kāi)發(fā)、客戶(hù)端開(kāi)發(fā)、大數(shù)據(jù)開(kāi)發(fā)、算法開(kāi)發(fā)等諸多工種,連“美工”都分化成了視覺(jué)、交互、用研等專(zhuān)業(yè)領(lǐng)域,那么,未來(lái)在AI技術(shù)的發(fā)展下,這些角色的分工會(huì)重新合并,甚至不會(huì)存在了么?

可能會(huì)出現(xiàn)如下的趨勢(shì):

1.一定會(huì)提高效率和創(chuàng)造力。AIGC 可以大大提高設(shè)計(jì)人員和開(kāi)發(fā)人員的效率,我們很多團(tuán)隊(duì)在2023年初就開(kāi)始使用Midjourney輔助設(shè)計(jì)或使用JoyCoder和GitHub Copilot輔助編碼,效果有目共睹??梢灶A(yù)見(jiàn),在產(chǎn)品設(shè)計(jì)或代碼生成等探索性和創(chuàng)造性階段,通過(guò)AI智能體快速生成各種解決方案并將概念轉(zhuǎn)化為可視化表達(dá)或代碼,會(huì)變得越來(lái)越便捷并越來(lái)越具有實(shí)際價(jià)值。

2.開(kāi)發(fā)者的角色可能會(huì)演變。開(kāi)發(fā)者角色分工的界限會(huì)變得越來(lái)越模糊,全新的更具協(xié)作性和增強(qiáng)型的軟件開(kāi)發(fā)生命周期會(huì)出現(xiàn)。未來(lái)的開(kāi)發(fā)者和設(shè)計(jì)師會(huì)減少用于日常編碼或設(shè)計(jì),甚至文檔撰寫(xiě)的時(shí)間,而更多的時(shí)間用于明確智能體等AI工具的目標(biāo)、解釋人工智能生成的解決方案,以及將這些解決方案集成到多種不同的系統(tǒng)架構(gòu)中。開(kāi)發(fā)者的角色可能會(huì)演變?yōu)槌袚?dān)更多監(jiān)督和管理的職能,以確保AI生成的設(shè)計(jì)和代碼符合業(yè)務(wù)目標(biāo)以及人類(lèi)價(jià)值觀。

3.軟件開(kāi)發(fā)這個(gè)行業(yè)會(huì)“民主化”。隨著 AIGC 工具變得更加易用和強(qiáng)大,我們可能會(huì)看到越來(lái)越多沒(méi)有傳統(tǒng)設(shè)計(jì)和編碼技能的人也可以發(fā)起或參與軟件開(kāi)發(fā)。這將使軟件開(kāi)發(fā)這個(gè)行業(yè)參與的業(yè)務(wù)領(lǐng)域更加多樣化,數(shù)字化應(yīng)用的范圍更加廣泛。

(參考資料:https://insights.sei.cmu.edu/blog/application-of-large-language-models-llms-in-software-engineering-overblown-hype-or-disruptive-change/)

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2024-05-20 08:31:33

檢索增強(qiáng)生成LLM大型語(yǔ)言模型

2023-10-14 17:46:17

RAG提示工程GPT-3

2025-02-11 08:00:00

大語(yǔ)言模型檢索增強(qiáng)生成CAG

2025-04-01 09:25:09

2024-11-19 13:05:40

2024-10-31 14:46:31

2024-02-18 09:00:00

RAG工具LlamaIndexChatGPT

2024-12-23 11:31:05

大模型檢索人工智能

2024-04-19 14:27:26

檢索增強(qiáng)生成大型語(yǔ)言模型

2025-03-28 08:00:00

RAG文本檢索大模型

2024-06-19 08:14:51

大型語(yǔ)言模型LLMRAG

2023-10-31 16:37:55

大型語(yǔ)言模型人工智能

2024-04-19 09:00:01

映射算法大型語(yǔ)言模型LLM

2025-03-04 09:10:00

RAG大模型AI

2024-04-30 16:17:34

RAGLLM

2024-09-18 08:42:10

2025-02-27 10:55:44

2025-02-24 08:39:08

2024-12-04 10:35:21

2025-02-13 09:01:03

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)