Skip to content

使用托管索引#

LlamaIndex 提供了多个与托管索引集成的接入点。托管索引是一种特殊类型的索引,不像 LlamaIndex 中的本地索引那样进行管理,而是通过 API 进行管理,比如 Vectara

使用托管索引#

与 LlamaIndex 中的任何其他索引(树、关键词表、列表)类似,任何 ManagedIndex 都可以使用一组文档进行构建。构建完成后,该索引可以用于查询。

如果索引之前已经填充了文档,那么它也可以直接用于查询。

Google 生成语义检索器#

Google 的语义检索器提供了查询和检索功能。在 LlamaIndex 中创建一个托管索引,插入文档,然后在任何地方使用查询引擎或检索器!

from llama_index.core import SimpleDirectoryReader
from llama_index.indices.managed.google import GoogleIndex

# 创建语料库
index = GoogleIndex.create_corpus(display_name="My first corpus!")
print(f"新创建的语料库 ID 为 {index.corpus_id}。")

# 插入
documents = SimpleDirectoryReader("data").load_data()
index.insert_documents(documents)

# 查询
query_engine = index.as_query_engine()
response = query_engine.query("作者在成长过程中做了什么?")

# 检索
retriever = index.as_retriever()
source_nodes = retriever.retrieve("作者在成长过程中做了什么?")

请参阅 笔记本指南 以获取完整详情。

Vectara#

首先,注册 并使用 Vectara 控制台创建一个语料库(也称为索引),并添加用于访问的 API 密钥。 然后将客户 ID、语料库 ID 和 API 密钥放入您的环境中。

然后按以下方式构建 Vectara 索引并进行查询:

from llama_index.core import ManagedIndex, SimpleDirectoryReader
from llama_index.indices.managed.vectara import VectaraIndex

# 加载文档并构建索引
vectara_customer_id = os.environ.get("VECTARA_CUSTOMER_ID")
vectara_corpus_id = os.environ.get("VECTARA_CORPUS_ID")
vectara_api_key = os.environ.get("VECTARA_API_KEY")

documents = SimpleDirectoryReader("../paul_graham_essay/data").load_data()
index = VectaraIndex.from_documents(
    documents,
    vectara_customer_id=vectara_customer_id,
    vectara_corpus_id=vectara_corpus_id,
    vectara_api_key=vectara_api_key,
)

备注: * 如果环境变量 VECTARA_CUSTOMER_IDVECTARA_CORPUS_IDVECTARA_API_KEY 已经存在于环境中,则您无需在调用中显式指定它们,VectaraIndex 类将从环境中读取它们。 * 要连接到多个 Vectara 语料库,您可以将 VECTARA_CORPUS_ID 设置为逗号分隔的列表,例如:12,51 将连接到语料库 12 和语料库 51

如果您的语料库中已经有文档,您可以按以下方式直接访问数据构建 VectaraIndex

index = VectaraIndex()

索引将连接到现有语料库,而无需加载任何新文档。

要查询索引,只需按以下方式构建查询引擎:

query_engine = index.as_query_engine(summary_enabled=True)
print(query_engine.query("作者在成长过程中做了什么?"))

或者您可以使用聊天功能:

chat_engine = index.as_chat_engine()
print(chat_engine.chat("作者在成长过程中做了什么?").response)

聊天功能的使用方式与您期望的一样,后续的 chat 调用会保持对话历史记录。所有这些都是在 Vectara 平台上完成的,因此您无需添加任何额外的逻辑。

有关更多示例,请参见以下内容:

Zilliz#

首先,设置您的Zilliz Cloud 账户并创建一个免费的无服务器集群。 然后从您的账户中复制项目 ID、集群 ID 和 API 密钥。

现在,您可以构建 ZillizCloudPipelineIndex 来索引文档并进行查询,如下所示:

import os

from llama_index.core import ManagedIndex
from llama_index.indices.managed.zilliz import ZillizCloudPipelineIndex

# 从 URL 加载文档并构建文档索引
zcp_index = ZillizCloudPipelineIndex.from_document_url(
    url="https://publicdataset.zillizcloud.com/milvus_doc.md",
    project_id="<YOUR_ZILLIZ_PROJECT_ID>",
    cluster_id="<YOUR_ZILLIZ_CLUSTER_ID>",
    token="<YOUR_ZILLIZ_API_KEY>",
    metadata={"version": "2.3"},  # 可选
)

# 将更多文档插入索引,例如 Milvus v2.2 文档
zcp_index.insert_doc_url(
    url="https://publicdataset.zillizcloud.com/milvus_doc_22.md",
    metadata={"version": "2.2"},
)

# 查询索引
from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters

query_engine_milvus23 = zcp_index.as_query_engine(
    search_top_k=3,
    filters=MetadataFilters(
        filters=[
            ExactMatchFilter(key="version", value="2.3")
        ]  # version == "2.3"
    ),
    output_metadata=["version"],
)

question = "Can users delete entities by complex boolean expressions?"
# 检索
retrieval_result = query_engine_with_filters.retrieve(question)
# 查询
answer = query_engine_with_filters.query(question)
- Zilliz示例笔记本