基于開(kāi)源AI數(shù)據(jù)框架LlamaIndex構(gòu)建上下文增強(qiáng)型LLA應(yīng)用 原創(chuàng)
譯者 | 朱先忠
審校 | 重樓
引言
“將你的企業(yè)數(shù)據(jù)轉(zhuǎn)化為可用于實(shí)際生產(chǎn)環(huán)境的LLM應(yīng)用程序,”??LlamaIndex主頁(yè)???用60號(hào)字體這樣高亮顯示。其副標(biāo)題是“LlamaIndex是構(gòu)建LLM應(yīng)用程序的領(lǐng)先數(shù)據(jù)框架?!蔽也惶_定它是否是業(yè)內(nèi)領(lǐng)先的數(shù)據(jù)框架,但我認(rèn)為它是一個(gè)與??LangChain???和??Semantic Kernel??一起構(gòu)建大型語(yǔ)言模型應(yīng)用的領(lǐng)先數(shù)據(jù)框架。
LlamaIndex目前提供兩種開(kāi)源語(yǔ)言框架和一個(gè)云端支持。一種開(kāi)源語(yǔ)言是Python;另一種開(kāi)源語(yǔ)言是TypeScript。??LlamaCloud???(目前處于個(gè)人預(yù)覽版本)通過(guò)??LlamaHub???提供存儲(chǔ)、檢索、數(shù)據(jù)源鏈接,以及針對(duì)復(fù)雜文檔的付費(fèi)方式的專(zhuān)有解析服務(wù)??LlamaParse??,該服務(wù)也可作為獨(dú)立服務(wù)提供。
LlamaIndex在加載數(shù)據(jù)、存儲(chǔ)和索引數(shù)據(jù)、通過(guò)編排LLM工作流進(jìn)行查詢(xún)以及評(píng)估LLM應(yīng)用程序的性能方面都具有優(yōu)勢(shì)。當(dāng)前,LlamaIndex集成了40多個(gè)向量存儲(chǔ)、40多個(gè)LLM和160多個(gè)數(shù)據(jù)源。其中,LlamaIndex Python代碼存儲(chǔ)庫(kù)已獲得超過(guò)30K的星級(jí)好評(píng)。
典型的LlamaIndex應(yīng)用程序會(huì)執(zhí)行問(wèn)答、結(jié)構(gòu)化提取、聊天或語(yǔ)義搜索,和/或充當(dāng)代理。它們可以使用檢索增強(qiáng)生成(RAG)技術(shù)將LLM與特定的數(shù)據(jù)源聯(lián)系起來(lái),這些源通常不包括在模型的原始訓(xùn)練集中。
顯然,LlamaIndex框架將會(huì)與LangChain、Semantic Kernel和Haystack等框架展開(kāi)市場(chǎng)競(jìng)爭(zhēng)。不過(guò),并非所有這些框架都有完全相同的應(yīng)用范圍和功能支持,但就流行程度而言,LangChain的Python代碼倉(cāng)庫(kù)有超過(guò)80K的星級(jí)好評(píng),幾乎是LlamaIndex(超過(guò)30K的星級(jí)好評(píng))的三倍,而相對(duì)最晚出現(xiàn)的Semantic Kernel已經(jīng)獲得超過(guò)18K的星級(jí)好評(píng),略高于LlamaIndex的一半,Haystack的代碼倉(cāng)庫(kù)有超過(guò)13K的星級(jí)好評(píng)。
上述好評(píng)結(jié)果是與代碼倉(cāng)庫(kù)的年齡密切相關(guān)的,因?yàn)樾羌?jí)好評(píng)會(huì)隨著時(shí)間的推移而積累;這也是為什么我用“超過(guò)”來(lái)修飾星級(jí)好評(píng)數(shù)的原因。GitHub上的星級(jí)好評(píng)數(shù)與歷史進(jìn)程中的流行度存在松散的相關(guān)性。
LlamaIndex、LangChain和Haystack都擁有許多大公司作為用戶(hù),其中一些公司使用了不止一個(gè)這樣的框架。Semantic Kernel來(lái)自微軟,除了案例研究之外,微軟通常不會(huì)公布用戶(hù)數(shù)據(jù)。
LlamaIndex框架可幫助你將數(shù)據(jù)、嵌入、LLM、向量數(shù)據(jù)庫(kù)和求值連接到應(yīng)用程序中。這些支持可以用于問(wèn)答、結(jié)構(gòu)化提取、聊天、語(yǔ)義搜索和代理等環(huán)境。
LlamaIndex框架的功能
從高層面來(lái)看,LlamaIndex框架的開(kāi)發(fā)主旨在幫助你構(gòu)建上下文增強(qiáng)的LLM應(yīng)用程序,意味著你可以將自己的私有數(shù)據(jù)與大型語(yǔ)言模型相結(jié)合。上下文增強(qiáng)LLM應(yīng)用程序的示例包括問(wèn)答聊天機(jī)器人、文檔理解和提取以及自動(dòng)化代理等領(lǐng)域。
LlamaIndex提供的工具可執(zhí)行數(shù)據(jù)加載、數(shù)據(jù)索引和存儲(chǔ)、使用LLM查詢(xún)數(shù)據(jù)以及評(píng)估LLM應(yīng)用程序的性能:
- 數(shù)據(jù)連接器從其本機(jī)源和格式中獲取現(xiàn)有數(shù)據(jù)。?
- 數(shù)據(jù)索引,也稱(chēng)為嵌入,以中間表示形式構(gòu)建數(shù)據(jù)。?
- 引擎提供對(duì)數(shù)據(jù)的自然語(yǔ)言訪(fǎng)問(wèn)。其中包括用于回答問(wèn)題的查詢(xún)引擎,以及用于與你的數(shù)據(jù)進(jìn)行多消息對(duì)話(huà)的聊天引擎。?
- 代理是LLM驅(qū)動(dòng)的知識(shí)工具,結(jié)合其他軟件工具增強(qiáng)性能。?
- 可觀察性/評(píng)估集成使你能夠?qū)?yīng)用程序進(jìn)行實(shí)驗(yàn)、評(píng)估和監(jiān)控。?
上下文增強(qiáng)
LLM受過(guò)大量文本的訓(xùn)練,但不一定是關(guān)于你的領(lǐng)域的文本信息。當(dāng)前,存在三種主要方法可以執(zhí)行上下文增強(qiáng)并添加有關(guān)域的信息,即提供文檔、執(zhí)行RAG和微調(diào)模型。
首先,最簡(jiǎn)單的上下文擴(kuò)充方法是將文檔與查詢(xún)一起提供給模型,為此你可能不需要LlamaIndex。除非文檔的總大小大于你正在使用的模型的上下文窗口;否則,提供文檔是可以正常工作的,這在最近還是一個(gè)常見(jiàn)的問(wèn)題?,F(xiàn)在,有了具有百萬(wàn)個(gè)標(biāo)記上下文窗口的LLM,這可以使你在執(zhí)行許多任務(wù)時(shí)避免繼續(xù)下一步操作。如果你計(jì)劃對(duì)一百萬(wàn)個(gè)標(biāo)記語(yǔ)料庫(kù)執(zhí)行許多查詢(xún),那么需要對(duì)文檔進(jìn)行緩存處理;但是,這是另外一個(gè)待討論的話(huà)題了。
檢索增強(qiáng)生成在推理時(shí)將上下文與LLM相結(jié)合,通常與向量數(shù)據(jù)庫(kù)相結(jié)合。RAG過(guò)程通常使用嵌入來(lái)限制長(zhǎng)度并提高檢索到的上下文的相關(guān)性,這既繞過(guò)了上下文窗口的限制,又增加了模型看到回答問(wèn)題所需信息的概率。
從本質(zhì)上講,嵌入函數(shù)獲取一個(gè)單詞或短語(yǔ),并將其映射到浮點(diǎn)數(shù)的向量;這些向量通常存儲(chǔ)在支持向量搜索索引的數(shù)據(jù)庫(kù)中。然后,檢索步驟使用語(yǔ)義相似性搜索,通常使用查詢(xún)嵌入和存儲(chǔ)向量之間的角度的余弦,來(lái)找到“附近”的信息,以便在增強(qiáng)提示中使用。
微調(diào)LLM是一個(gè)有監(jiān)督的學(xué)習(xí)過(guò)程,涉及到根據(jù)特定任務(wù)調(diào)整模型的參數(shù)。這是通過(guò)在一個(gè)較小的、特定于任務(wù)或特定于領(lǐng)域的數(shù)據(jù)集上訓(xùn)練模型來(lái)完成的,該數(shù)據(jù)集標(biāo)有與目標(biāo)任務(wù)相關(guān)的樣本。使用許多服務(wù)器級(jí)GPU進(jìn)行微調(diào)通常需要數(shù)小時(shí)或數(shù)天時(shí)間,并且需要數(shù)百或數(shù)千個(gè)標(biāo)記的樣本。
安裝LlamaIndex
你可以通過(guò)三種方式安裝Python版本的LlamaIndex:從??GitHub存儲(chǔ)庫(kù)???中的源代碼,使用??llama index starter???安裝,或者使用??llama-index-core??結(jié)合選定的集成組件。starter方式的安裝如下所示:
pip install llama-index
除了LlamaIndex核心之外,這種安裝方式還將安裝OpenAI LLM和嵌入。注意,你需要提供OpenAI API密鑰(請(qǐng)參閱鏈接https://platform.openai.com/docs/quickstart),然后才能運(yùn)行使用這種安裝方式的示例。LlamaIndex starter程序示例非常簡(jiǎn)單,基本上僅包含經(jīng)過(guò)幾個(gè)簡(jiǎn)單的設(shè)置步驟后的五行代碼。在??官方的代碼倉(cāng)庫(kù)??中還提供了更多的例子和有關(guān)參考文檔。
進(jìn)行自定義安裝可能看起來(lái)像下面這樣:
pip install llama-index-core llama-index-readers-file llama-index-llms-ollama llama-index-embeddings-huggingface
這將安裝一個(gè)Ollama和Hugging Face嵌入的接口。此安裝還提供一個(gè)本地starter級(jí)的示例。無(wú)論從哪種方式開(kāi)始,你都可以使用pip添加更多的接口模塊。
如果你更喜歡用JavaScript或TypeScript編寫(xiě)代碼,那么你可以使用??LlamaIndex.TS???。TypeScript版本的一個(gè)優(yōu)點(diǎn)是,你可以在??StackBlitz??上在線(xiàn)運(yùn)行示例,而無(wú)需任何本地設(shè)置。不過(guò),你仍然需要提供一個(gè)OpenAI API密鑰。
LlamaCloud和LlamaParse
??LlamaCloud???是一個(gè)云服務(wù),允許你上傳、解析和索引文檔,并使用LlamaIndex進(jìn)行搜索。當(dāng)前,該項(xiàng)服務(wù)仍處于個(gè)人alpha測(cè)試階段,我無(wú)法訪(fǎng)問(wèn)它。
LlamaParse作為L(zhǎng)lamaCloud的一個(gè)組件,允許你將PDF解析為結(jié)構(gòu)化數(shù)據(jù);它可以通過(guò)REST API、Python包和Web UI獲得。這個(gè)組件目前處于公測(cè)階段。在每周前7K頁(yè)的免費(fèi)試用之后,你可以注冊(cè)使用LlamaParse,只需支付少量的使用費(fèi)。官網(wǎng)上提供的有關(guān)針對(duì)蘋(píng)果10K大小文件基礎(chǔ)上的對(duì)于LlamaParse和PyPDF比較的例子令人印象深刻,但我自己沒(méi)有測(cè)試過(guò)。
LlamaHub
??LlamaHub??讓你可以訪(fǎng)問(wèn)LlamaIndex的大量集成,其中包括代理、回調(diào)、數(shù)據(jù)加載程序、嵌入以及大約17個(gè)其他類(lèi)別。通常,這些集成內(nèi)容位于LlamaIndex存儲(chǔ)庫(kù)、PyPI和NPM中,你可以使用pip-install或NPM-install加載使用。
create-llama CLI
??create-lama??是一個(gè)命令行工具,用于生成LlamaIndex應(yīng)用程序。這是開(kāi)始使用LlamaIndex的快速方法。生成的應(yīng)用程序中包含一個(gè)Next.js驅(qū)動(dòng)的前端和三種后端方案可供選擇。
RAG-CLI
??RAG CLI???也是一個(gè)命令行工具,用于與LLM交流你在計(jì)算機(jī)上本地保存的文件。這只是LlamaIndex的眾多使用場(chǎng)景案例之一,不過(guò)這種情況非常普遍。
LlamaIndex組件
??LlamaIndex組件指南??會(huì)為你提供有關(guān)LlamaIndex各個(gè)部分的具體幫助。下面的第一個(gè)屏幕截圖顯示了組件指南菜單。第二個(gè)顯示了提示的組件指南,滾動(dòng)到關(guān)于自定義提示的部分。
LlamaIndex組件指南記錄了構(gòu)成框架的不同部分,其中介紹了相當(dāng)多的組件。
我們正在研究這種提示詞的使用模式。這個(gè)特殊的例子展示了如何自定義問(wèn)答提示,以莎士比亞戲劇的風(fēng)格回答問(wèn)題。值得注意的是,這是一個(gè)零樣本提示,因?yàn)樗鼪](méi)有提供任何示例。
學(xué)習(xí)LlamaIndex
一旦你閱讀、理解并用你喜歡的編程語(yǔ)言(Python或TypeScript)運(yùn)行了入門(mén)示例,我建議你盡可能多地閱讀、理解和嘗試其他看起來(lái)更有趣的一些示例。下面的屏幕截圖顯示了通過(guò)運(yùn)行essay.ts并使用chatEngine.ts詢(xún)問(wèn)相關(guān)問(wèn)題來(lái)生成一個(gè)名為essay的文件的結(jié)果。這是一個(gè)使用RAG進(jìn)行問(wèn)答的示例。
其中,chatEngine.ts程序使用LlamaIndex的ContextChatEngine、Document、Settings和VectorStoreIndex等組件。當(dāng)我分析其??源代碼???時(shí),我看到它依賴(lài)于OpenAI gpt-3.5-turb-16k模型;這種情況可能會(huì)隨著時(shí)間的推移而改變。如果我對(duì)文檔的分析是正確的話(huà),那么VectorStoreIndex模塊使用了開(kāi)源的、基于Rust的??Qdrant??向量數(shù)據(jù)庫(kù)。
在用我的OpenAI密鑰設(shè)置了終端環(huán)境后,我運(yùn)行essay.ts來(lái)生成一個(gè)散文題材的文件,并運(yùn)行chatEngine.ts來(lái)實(shí)現(xiàn)有關(guān)此文章的查詢(xún)。
為L(zhǎng)LM提供上下文
正如你所看到的,LlamaIndex非常容易用于創(chuàng)建LLM應(yīng)用程序。我能夠針對(duì)OpenAI LLM和RAG Q&A應(yīng)用程序的文件數(shù)據(jù)源進(jìn)行測(cè)試。值得注意的是,LlamaIndex集成了40多個(gè)向量存儲(chǔ)、40多個(gè)LLM和160多個(gè)數(shù)據(jù)源;它適用于幾種使用場(chǎng)景,包括Q&A問(wèn)答、結(jié)構(gòu)化提取、聊天、語(yǔ)義搜索和代理應(yīng)用等。
最后,我建議你認(rèn)真評(píng)估LlamaIndex與LangChain、Semantic Kernel和Haystack等框架。這其中的一個(gè)或多個(gè)很可能會(huì)滿(mǎn)足你的需求。當(dāng)然,我不能籠統(tǒng)地推薦其中某一個(gè),因?yàn)椴煌膽?yīng)用程序會(huì)有不同的要求。
LlamaIndex優(yōu)點(diǎn)
- 幫助創(chuàng)建問(wèn)答、結(jié)構(gòu)化提取、聊天、語(yǔ)義搜索和代理等類(lèi)型的LLM應(yīng)用程序?
- 支持Python和TypeScript?
- 框架是免費(fèi)和開(kāi)源的?
- 提供大量示例和集成組件?
LlamaIndex不足
- 云環(huán)境僅限于私人預(yù)覽?
- 營(yíng)銷(xiāo)有點(diǎn)言過(guò)其實(shí)?
LlamaIndex費(fèi)用
開(kāi)源:免費(fèi)。
LlamaParse導(dǎo)入服務(wù):每周免費(fèi)支持7K頁(yè)的文檔,然后每1000頁(yè)需要支付3美元。
平臺(tái)支持
支持Python和TypeScript,以及云端SaaS(目前處于私人預(yù)覽狀態(tài))。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專(zhuān)家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。
原文標(biāo)題:LlamaIndex review: Easy context-augmented LLM applications,作者:Martin Heller
鏈接:https://www.infoworld.com/article/3715622/llamaindex-review-easy-context-augmented-llm-applications.html
