Llama Packs 是用于构建 LLM 应用程序的低代码解决方案

小夏 科技 更新 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 框架的主要贡献包括 该文...