在本文中,我們將仔細研究 LLAMA Packs,這是 LLM 應用程式開發中最重要的功能之一。
Llama Packs 既是一種快速高效的構建 LLM 應用程式的方法,也是一組預打包的模組和模板,可幫助開發人員更快、更高效地開始構建 LLM 應用程式。
LLAMA Packs 的真正亮點是它的可重用性和可擴充套件性,使 LLM 應用程式開發變得極其簡單、直觀和靈活。
與其他LLM框架相比,LlamaIndex是乙個高度抽象的框架。 然而,llamaindex 團隊更注重抽象和可重用性。 使用 Llama Packs,LlamAindex 的許多原生功能,例如從基本到高階的查詢策略,以及與第三方供應商的整合,都是預先打包的,因此開發人員可以輕鬆呼叫相應 Llama Pack 的執行時函式來執行邏輯。 這種具有豐富預打包模組和模板的低質量解決方案在 LLM 應用程式開發中是前所未有的。
可重用性伴隨著可伸縮性的挑戰。 同樣,LlamaIndex 團隊在這一領域處於領先地位——Llama Packs 在設計時考慮到了可擴充套件性。 我們可以輕鬆地將模組預打包並在本地製作副本,根據需要自定義和擴充套件功能,然後簡單地重新匯入包並使用它。 我們隨時歡迎社群為擴充套件現有軟體包做出貢獻!
SentenceWindowNodeParser 是一種用於建立句子表示形式的工具,該表示形式考慮了周圍的單詞和句子。 在檢索過程中,在將檢索到的句子傳遞給 LLM 之前,使用 MetaDataReplacementNodePostProcessor 將單個句子替換為包含周圍句子的視窗。 這對於需要全面理解句子含義的任務特別有用,例如機器翻譯或摘要。 對於大型文件,這有助於檢索更精細的細節。
在 Llama Pack 之前的實現中,使用 SentenceWindowNodeParser 實現多文件 RAG 管道的完整原始碼如下:
import nest_asyncionest_asyncio.apply()import os, openai, logging, sysos.environ["openai_api_key"] = "sk-#################################"openai.api_key = os.environ["openai_api_key"]logging.basicconfig(stream=sys.stdout, level=logging.debug)# load documentsfrom llama_index import **directoryreaderdocuments = **directoryreader("data").load_data()print(f"loaded documents with documents")# setup node parser and service contextfrom llama_index import servicecontext, set_global_service_contextfrom llama_index.llms import openaifrom llama_index.embeddings import huggingfaceembeddingfrom llama_index.node_parser import sentencewindownodeparser, *nodeparsernode_parser = sentencewindownodeparser.from_defaults( window_size=3, window_metadata_key="window", original_text_metadata_key="original_text",)llm = openai(model="gpt-3.5-turbo", temperature=0.1)embed_model = huggingfaceembedding( model_name="sentence-transformers/all-mpnet-base-v2", max_length=512)ctx = servicecontext.from_defaults( llm=llm, embed_model=embed_model)from llama_index import vectorstoreindex# extract nodes and build indexdocument_list = **directoryreader("data").load_data()nodes = node_parser.get_nodes_from_documents(document_list)sentence_index = vectorstoreindex(nodes, service_context=ctx)# define query enginefrom llama_index.indices.postprocessor import metadatareplacementpostprocessormetadata_query_engine = sentence_index.as_query_engine( similarity_top_k=2, # the target key defaults to `window` to match the node_parser's default node_postprocessors=[ metadatareplacementpostprocessor(target_metadata_key="window") ]# run queryresponse = metadata_query_engine.query("give me a summary of devops self-service-centric pipeline security and guardrails.")print(str(response))在上面的程式碼片段中,詳細步驟包括:
載入文件。 設定節點解析程式。
定義服務上下文。
提取節點並構建索引。
定義查詢引擎。
執行查詢。 使用 Llama Pack 後:
import nest_asyncionest_asyncio.apply()import os, openai, logging, sysos.environ["openai_api_key"] = "sk-#################################"openai.api_key = os.environ["openai_api_key"]logging.basicconfig(stream=sys.stdout, level=logging.debug)# load documentsfrom llama_index import **directoryreaderdocuments = **directoryreader("data").load_data()print(f"loaded documents with documents")# download and install llama packs dependenciesfrom llama_index.llama_pack import download_llama_packsentencewindowretrieverpack = download_llama_pack( "sentencewindowretrieverpack", "./sentence_window_retriever_pack")# create the pack sentencewindowretrieverpacksentence_window_retriever_pack = sentencewindowretrieverpack(documents)# run queryresponse = sentence_window_retriever_pack.run("give me a summary of devops self-service-centric pipeline security and guardrails.")print(str(response))正如我們所看到的,Llama Packs 的實現大大簡化了 **!載入文件後,只需三個簡單的步驟:
* 並安裝軟體包。
建立包。 執行包。
這是乙個視覺比較。
接下來,我們來談談**的主要組成部分。
Llama Packs 中的每個包都遵循相同的結構:
__init__.py:p ython 封裝指示器。
base.py:包的主要邏輯。
readme.md:關於如何使用包的說明。
requirements.txt:包的依賴項。
向下鑽取到主檔案base.py,主要有三個功能:
__init__:初始化包。 這是包的主要邏輯。 在我們的示例中,此函式包含設定節點解析器和服務上下文、提取節點和構建索引以及定義查詢引擎的步驟。 這個函式就是 Llama 將主要邏輯打包成乙個包的方式,這樣我們作為開發者就不必一遍又一遍地編寫包的詳細邏輯了。
get_modules:允許我們檢查模組的使用情況。
run:觸發管道。 這就是我們所處的位置__init__該函式在呼叫查詢函式的查詢引擎中定義。
在某些情況下,現有的 LLAMA 包可能無法滿足您的需求,例如您可能需要使用不同的嵌入模型。 這就是我們上面提到的 Llama Pack 的可擴充套件性方面。 但是,我們如何擴充套件現有軟體包呢?自sentence_window_retriever_pack例如。
首先,複製已經 **sentence_window_retriever_pack並重命名它sentence_window_retriever_pack_copy
其次,在sentence_window_retriever_pack_copy目錄base.py要將其嵌入到模型中,請執行以下操作:
self.embed_model = huggingfaceembedding( model_name="sentence-transformers/all-mpnet-base-v2", max_length=512)更改為:
self.embed_model = "local:baai/bge-base-en-v1.5"第三步是相應地修改您的應用程式不再是包(在下面的程式碼片段中注釋掉了),您現在需要從複製的包匯入sentencewindowretrieverpack
## download and install llama packs dependencies# from llama_index.llama_pack import download_llama_pack# sentencewindowretrieverpack = download_llama_pack(# "sentencewindowretrieverpack", "./sentence_window_retriever_pack"# )from sentence_window_retriever_pack_copy.base import sentencewindowretrieverpack# create the pack sentencewindowretrieverpacksentence_window_retriever_pack = sentencewindowretrieverpack(documents)就這樣!執行新修改的應用程式,並檢視最新更改的生效情況。
在本文中,我們介紹了所有 LLM 框架最重要的功能之一——LLAMA Packs。 我們研究了它是什麼,為什麼需要它,如何實現它,以及我們如何擴充套件它以滿足我們在 LLM 應用程式開發中的需求。
introducing llama packs:
llama packs example:
tweet introducing llama packs:
metadata replacement + node sentence window:
點讚並關注二師兄談話獲取更多資訊並閱讀我的簡短技術文章。