宣布我们的 LlamaCloud 全面上线 (以及我们的 1900 万美元 A 轮融资!)
LlamaIndex

Jerry Liu 2023-11-22

介绍 Llama Packs

今天我们激动地推出 Llama Packs 🦙📦— 一个由社区驱动的预打包模块中心,您可以使用它们来快速启动您的 LLM 应用程序。您可以将它们导入以用于各种用例,从构建 Streamlit 应用,到构建基于 Weaviate 的高级检索,再到执行结构化数据提取的简历解析器。同样重要的是,您可以根据需要检查和自定义它们。

它们已在 LlamaHub 上线:我们已与启动合作伙伴共同发布了 16+ 个模板,并且还将添加更多模板!

(致美国的朋友们,感恩节快乐 🦃)

背景

构建 LLM 应用程序时有太多选择,这使得针对特定用例开始构建变得困难。即便是对于 RAG,用户也需要做出以下决策:

  • 我应该使用哪个 LLM?嵌入模型?
  • 向量数据库?
  • 分块/解析策略
  • 检索算法
  • 集成到应用程序中

每个用例都需要不同的参数,而 LlamaIndex 作为核心 LLM 框架,提供了一整套中立的模块,供用户组合构建应用程序。

但我们需要一种方法让用户更容易地针对其用例开始使用。这正是 Llama Packs 的作用所在。

概览

Llama Packs 可以从两个方面描述

  • 一方面,它们是预打包的 模块 ,可以通过参数进行初始化并开箱即用,以实现特定用例(无论是完整的 RAG 管道、应用程序模板等等)。您也可以导入 子模块 (例如 LLM、查询引擎)直接使用
  • 另一方面,LlamaPacks 是 模板 ,您可以检查、修改和使用它们。

您可以通过我们的 llama_index Python 库或命令行接口 (CLI) 下载它们,只需 一行代码:

CLI

llamaindex-cli download-llamapack <pack_name> --download-dir <pack_directory>

Python

from llama_index.llama_pack import download_llama_pack

# download and install dependencies
VoyageQueryEnginePack = download_llama_pack(
  "&lt;pack_name&gt;", "&lt;pack_directory&gt;"
)

Llama Packs 可以涵盖不同的抽象级别 — 有些是完整的预打包模板(完整的 Streamlit / Gradio 应用),有些则组合了一些较小的模块(例如我们与 Weaviate 结合的 SubQuestionQueryEngine)。所有这些都可以在 LlamaHub 找到 👇。您可以通过从下拉菜单中选择“Llama Packs”来过滤 Pack。

LlamaHub 上的 Llama Packs

我们很高兴能与以下公司/贡献者合作进行本次发布,提供了 16+ 个模板。 下面我们重点介绍几个示例:

这篇博客文章篇幅有限,无法介绍所有模板,在接下来的几天里,我们将对每个 Pack 进行详细介绍。

特别感谢来自 LlamaIndex 团队的 Logan Markewich 和 Andrei Fajardo,使 Llama Packs 成功启动并运行。

示例演练

展示 LlamaPack 功能的最佳方式是提供一个示例。我们将演练一个简单的 Llama Pack,它为用户提供了使用 Voyage AI 嵌入的 RAG 管道设置。

Voyage AI Pack。每个 Pack 都有详细的 README,关于如何使用 / 模块。

首先,我们下载并使用一组文档初始化 Pack:

from llama_index.llama_pack import download_llama_pack

# download pack
VoyageQueryEnginePack = download_llama_pack("VoyageQueryEnginePack", "./voyage_pack")
# initialize pack (assume documents is defined)
voyage_pack = VoyageQueryEnginePack(documents)

每个 Llama Pack 都实现了一个 get_modules() 函数,允许您检查/使用其中的模块。

modules = voyage_pack.get_modules()
display(modules)

# get LLM, vector index
llm = modules["llm"]
vector_index = modules["index"]

Llama Pack 可以 开箱即用 地运行。通过调用 run 函数,我们将执行 RAG 管道并获得响应。在这种情况下,您无需担心内部实现细节。

# this will run the full pack
response = voyage_pack.run("What did the author do growing up?", similarity_top_k=2)
print(str(response))
The author spent his time outside of school mainly writing and programming. He wrote short stories and attempted to write programs on an IBM 1401. Later, he started programming on a TRS-80, creating simple games and a word processor. He also painted still lives while studying at the Accademia.

第二件重要的事情是,您可以 完全访问 Llama Pack 的代码。这使您可以自定义 Llama Pack、提取代码,或者只是将其作为参考来构建您自己的应用程序。让我们看一下下载到 voyage_pack/base.py 的 Pack,并将 OpenAI 的 LLM 替换为 Anthropic 的。

from llama_index.llms import Anthropic
...

class VoyageQueryEnginePack(BaseLlamaPack):
    def __init__(self, documents: List[Document]) -&gt; None:
        llm = Anthropic()
        embed_model = VoyageEmbedding(
            model_name="voyage-01", voyage_api_key=os.environ["VOYAGE_API_KEY"]
        )
        service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)
        self.llm = llm
        self.index = VectorStoreIndex.from_documents(
            documents, service_context=service_context
        )

    def get_modules(self) -&gt; Dict[str, Any]:
        """Get modules."""
        return {"llm": self.llm, "index": self.index}

    def run(self, query_str: str, **kwargs: Any) -&gt; Any:
        """Run the pipeline."""
        query_engine = self.index.as_query_engine(**kwargs)
        return query_engine.query(query_str)

您可以直接重新导入该模块并再次运行它:

from voyage_pack.base import VoyageQueryEnginePack

voyage_pack = VoyageQueryEnginePack(documents)
response = voyage_pack.run("What did the author do during his time in RISD?")
print(str(response))

结论

快来试试吧,并告诉我们您的想法!

贡献

还没加入吗?我们 非常乐意 收录您的贡献!如果您有任何基于 LlamaIndex 的模板,添加它几乎就像将现有代码复制/粘贴到 BaseLlamaPack 子类中一样简单。查看此文件夹以获取完整的示例集:https://github.com/run-llama/llama-hub/tree/main/llama_hub/llama_packs

资源

所有 Llama Packs 都可以在 LlamaHub 上找到:https://llamahub.ai/

完整的 Notebook 演练在这里:https://github.com/run-llama/llama_index/blob/main/docs/examples/llama_hub/llama_packs_example.ipynb