使用托管索引#
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_ID
、VECTARA_CORPUS_ID
和 VECTARA_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)