使用羊驼索引网络查询知识网络

内容

AndreiLlamaIndex Blog

新的llama-index扩展包使得快速创建RAG系统网络成为可能。数据供应商可以在其数据上构建强大的RAG,并将其暴露在ContributorService背后,以加入LlamaIndex网络。

RAG背后的主要前提是向LLM注入上下文(或知识),以便从中获得更准确的响应。因此,RAG系统的一个关键组成部分是获取知识的数据源。因此,直觉告诉我们,RAG系统可以利用的知识越多,它最终将变得越好(在回答潜在的深度和广度问题方面)。这一概念的精神与基本上每个其他数据驱动学科中发现的精神并没有太大不同——获得更多(好的)数据,随后并有效地使用,通常会导致更好的结果。

在这种背景下,我们很高兴地宣布发布我们最新的 llama-index 库扩展,名为 llama-index-networks。这个库扩展使得构建一个基于外部数据源的 RAGs 网络成为可能,并由外部参与者提供支持。这种新的网络范式为数据供应商提供了一种新的方式,让他们将数据提供给那些希望获取数据以构建更具知识性系统的人!

在这篇博客文章中,我们将介绍新扩展库的主要类,并向您展示,只需几行代码,您就可以使您的 QueryEngine 准备好作为 RAG 网络的一部分做出贡献。我们还将分享这对于数据供应商如何在这个 LLMs 新时代内向消费者提供数据意味着什么的想法。

关于术语:在本文中,我们使用 llama-index-networks 来指代实际的扩展,而 llama-index[networks] 指的是带有 llama-index-networks 扩展的 llama-index 安装。

Alex、Beth和Bob的故事

网络中演员及其问题陈述的说明性示例。

为了说明如何使用llama-index-networks软件包,我们考虑三个虚构的角色,Alex、Bob和Beth,以及以下情景:

  • Bob 和 Beth 各自拥有自己的文件集,并且他们已经在这些文件上构建了相当出色的 RAG 系统(当然是使用 llama-index!)
  • Alex 听说了 Bob 和 Beth 拥有的这些富有洞察力的文件,并希望能够查询他们两人构建的各自的 RAG。
  • Bob 和 Beth 非常善良(或者,也许他们被支付了一定数额的未公开的美元),同意让 Alex 访问他们的 RAG 系统。

为了促进这种新型知识交流方式,他们同意建立一个由Alex可以查询的RAGs网络。

Bob 和 Beth 在他们的 RAGs 上构建了一个网络服务

ContributorService 是围绕一个 QueryEngine 构建的。

使用llama-index-networks软件包,Bob和Beth只需几行代码就可以使他们各自的QueryEngine准备好参与网络。

贝丝的贡献者服务文件。

Beth构建了她的QueryEngine,并将其暴露在标准LlamaIndex Network Contributor Service后面。

注意:Bob可能会利用Docker和云计算服务使其达到生产级别。

from llama_index.networks.contributor import ContributorService import uvicorn

beth_query_engine = ... beth_contributor_service = ContributorService.from_config_file( ".env.contributor",
beth_query_engine
)

if name == "main:
uvicorn.run(beth_contributor_service.app, port=8000)

Bob会使用类似的代码行来使他的QueryEngine准备好为任何LlamaIndex网络做出贡献。请注意,dotenv文件.env.contributor包含服务的设置以及任何必要的API密钥(例如,OPENAI_API_KEYANTHROPIC_API_KEY),在底层实现为使用FastAPI的REST服务。

Alex构建了一个NetworkQueryEngine

Alex构建了一个NetworkQueryEngine,连接到Beth和Bob各自的ContributorService。

对于Alex,他使用llama-index-networks扩展的NetworkQueryEngine类来连接Beth和Bob的ContributorService

Alex的网络查询引擎。

Alex 构建了一个 NetworkQueryEngine 来连接到 ContributorService 的列表。

from llama_index.networks.contributor import ContributorClient from llama_index.networks.query_engine import NetworkQueryEngine from llama_index.llms.groq import Groq

beth_client = ContributorClient.from_config_file( env_file=".env.beth_contributor.client" ) bob_client = ContributorClient.from_config_file( env_file=".env.bob_contributor.client" ) contributors = [beth_client, bob_client]

llm = Groq() network_query_engine = NetworkQueryEngine.from_args( contributors=contributors, llm=llm )

network_query_engine.query("为什么天空是蓝色的?")

这里的 dotenv 文件存储了服务参数,比如连接到 ContributorService 所需的 api_url

在继续这篇博客文章的下一部分之前,我们将花几行来解释一下当Alex查询他的NetworkQueryEngine时涉及到的一些内容。当调用query()方法时(也支持异步!),查询将被发送给所有贡献者。他们的响应将被存储为新的Nodes,并且会合成一个响应(带有相关的ResponseSynthesizer)。读完这些内容后,一些人可能会注意到这是在使用我们的QueryEngine抽象时的常见模式;确实,这正是重点所在。使用NetworkQueryEngine应该与在我们的库中使用任何其他QueryEngine非常相似!

这标志着我们关于Alex、Bob和Beth的小故事的结束。在结束这篇博客文章之前,我们首先提供了一些可能通过使用llama-index-networks而出现的机会。

一个新的数据供应和消费世界

RAG市场是一个可以通过llama-index[网络]实现的用例。

一个可能由llama-index[networks]轻松驱动的世界是RAG的市场。这是一个数据供应商将其数据打包成RAG形式,供数据消费者扩展其查询系统知识的地方。潜在的RAG(数据)供应商可能是您当地的报纸、图书出版公司等。

在这种新的数据供应和消费模式中,数据供应商更多地负责准备数据,使其更易消费——具体来说,供应商拥有查询引擎的构建。这应该极大地使数据消费者受益,因为通过像ContributorService(封装了QueryEngine)这样提供的标准接口,他们可以比以往更容易地从数据中获取所需的知识(即相对于交换原始数据的传统数据市场)。

我们正是基于这种愿景构建了 llama-index[networks],以便:(i) 让数据供应商更容易以新的、更有效的方式提供其数据中所包含的知识,(ii) 让数据消费者更容易连接到这些新形式的外部知识。

内部网络:另一个潜在的用例

除了为RAG市场提供动力外,我们预见到连接RAGs的需求,这些RAGs可能由一个总公司拥有,但不一定由其管理。更具体地说,特许经营权可能涵盖其所有业务的数据。虽然他们可以在整个数据库上构建一个“中央”的单体RAG,但在个别运营商上构建RAG并查询这些运营商可能更有效率和有效。

交换信息以构建更好、更有见识的系统的想法并不新鲜。然而,利用RAGs促进这种交流的想法可能是新的(据我们所知,它是新的),我们相信现有和新的需要这种合作的用例都可以从这一概念中受益。

关于隐私的简短说明

在数据协作中的一个重要考虑因素是隐私和安全。值得一提的是,上述示例假定在网络上共享的数据符合数据隐私和安全法律法规。我们相信随着这项技术的发展,将会开发并整合必要的功能和能力,以促进符合规定的RAG网络。

查看演示以了解更多!

要查看一个网络连接到一组贡献者的实际演示,请查看 Github 代码库 code 中的 llama-index-networks,并导航到 examples/demo 子文件夹。

总结
文章介绍了新的llama-index扩展包,使得快速创建RAG系统网络成为可能。数据供应商可以在其数据上构建强大的RAG,并将其暴露在ContributorService后面,以加入LlamaIndex网络。RAG系统的关键组成部分是其获取知识的数据源。文章还介绍了llama-index-networks扩展库的主要类,展示了如何通过几行代码使QueryEngine准备好作为RAG网络的一部分。此外,文章探讨了llama-index[networks]在数据供应和消费方面的潜在用例,包括RAG市场和内部网络。最后,文章强调了隐私和安全在数据协作中的重要性,并鼓励查看演示以了解更多信息。