Llama Packs 是用於構建 LLM 應用程式的低程式碼解決方案

Mondo 科技 更新 2024-01-31

在本文中,我們將仔細研究 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:

點讚並關注二師兄談話獲取更多資訊並閱讀我的簡短技術文章。

相關問題答案

    構建出色的 LLM 應用程式的四個關鍵

    這些建議提高了 LLM 申請的準確性,並包括如何選擇正確的 LLM 的注意事項。翻譯自 Adrien Truille 的 個關鍵技巧,用於構建更好的 LLM 驅動的應用程式,她是 Snowflake 的產品管理總監兼 Streamlit 負責人,負責資料雲的視覺化資料產品和 Streamlit 計畫...

    JD和LLM有什麼區別?

    JD 法學博士 和LLM 法學碩士 是兩種不同型別的法律學位,區別主要在於習學習的內容 學位型別和學習習的方式。JD是Juris Doctor的縮寫,是法學學位的一種,是美國本科畢業生申請法學院的主要學位。法學博士課程主要包括法學研究方法 法學理論 法律實務 法律倫理 憲法 訴訟等課程,旨在培養學生...

    LLM大語言模型 AskBot大模型的深度分析與應用

    在當今的人工智慧領域,大型語言模型 LLMs 已成為乙個熱門話題。通過深度學習和自然語言處理技術,LLM能夠理解和生成更自然 更準確的文字內容。作為最好的模型之一,AskBot 模型將 LLM 的應用推向了乙個新的高度。.LLM大型語言模型概述。LLM是一種基於深度學習的自然語言處理模型,其核心是在...

    新技術 LIN 迫使 LLM 回答有毒的問題

    美國普渡大學的研究人員發表了一篇題為 讓他們灑豆子!從 生產 LLMS中提取強制知識。他們描述說,他們設計了一種新方法,可以打破現有的LLM規則,並使它們給出 有害 的響應,利用大型模型供應商暴露與快速響應相關的概率資料的趨勢。研究人員使用了一種稱為lint LLM審訊 的技術,該技術比通常繞過安全...

    大型語言模型 (LLM) 使用指令進行調整,以提高 top-k 推薦系統的效能

    q 這個 測試 有什麼問題?a 本文旨在解決如何在推薦系統中使用大型語言模型 LLMS 作為排名器的問題,以提高top k推薦器系統的效能。具體來說,提出了乙個名為 Reconk rcer 的框架來優化 LLM,以通過指令調優技術更好地適應推薦的任務。對 Recranker 框架的主要貢獻包括 該文...