Vertex AI for RAG 上的 LlamaIndex 概览

LlamaIndex 是一个用于开发上下文增强大语言模型 (LLM) 应用的数据框架。当您将 LLM 应用于数据时,会进行上下文增强。这样可以实现检索增强生成 (RAG)。

LLM 的一个常见问题是,它们不理解私密知识,即组织的数据。借助 Vertex AI for RAG 上的 LlamaIndex,您可以使用其他私密信息来丰富 LLM 上下文,因为该模型可以减少幻觉并更准确地回答问题。

通过将额外的知识来源与 LLM 拥有的现有知识相结合,可以提供更好的上下文。改进的上下文以及查询提高了 LLM 的响应质量。

以下概念是了解 Vertex AI 上的 LlamaIndex 的关键。这些概念按检索增强生成 (RAG) 过程的顺序列出。

  1. 数据注入:从不同数据源注入数据。例如,本地文件、Cloud Storage 和 Google 云端硬盘。

  2. 数据转换:转换数据,以便为编入索引做好准备。例如,数据会被拆分为块。

  3. 嵌入:字词或文本的数值表示。这些数字可捕获文本的语义含义和上下文。类似或相关字词或文本往往具有相似的嵌入,这意味着它们在高维向量空间中更接近。

  4. 数据索引:Vertex AI for RAG 上的 LlamaIndex 会创建一个名为“语料库”的索引。索引会对知识库进行构建,使其针对搜索进行优化。例如,索引就像是一本大型参考书的详细目录。

  5. 检索:当用户提问或提供问题时,Vertex AI for RAG 上的 LlamaIndex 中的检索组件会搜索其知识库,以查找与查询相关的信息。

  6. 生成:检索到的信息将成为添加到原始用户查询的上下文(作为生成式 AI 模型的指南),以生成确实有依据的相关响应。

本页面介绍了如何在 Vertex AI for RAG 上开始使用 LlamaIndex,并提供了 Python 示例,以演示如何使用 RAG API

如需了解文件大小限制,请参阅支持的文档类型。如需了解与 Vertex AI for RAG 上的 LlamaIndex 相关的配额,请参阅 Vertex AI for RAG 上的 LlamaIndex 配额。如需了解如何自定义参数,请参阅检索参数

使用 Vertex AI SDK 在 Vertex AI for RAG 上运行 LlamaIndex

如需在 Vertex AI for RAG 上使用 LlamaIndex,请执行以下操作:

  1. 安装 Vertex AI SDK for Python

  2. 在 Google Cloud 控制台中运行以下命令以设置项目。

    gcloud config set {project}

  3. 运行以下命令以授权您的登录。

    gcloud auth application-default login

  4. 复制此示例代码并将其粘贴到 Google Cloud 控制台中,以在 Vertex AI 上运行 LlamaIndex。

Python

如需了解如何安装或更新 Python 版 Vertex AI SDK,请参阅安装 Python 版 Vertex AI SDK。如需了解详情,请参阅 Python API 参考文档

from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
import vertexai

# Create a RAG Corpus, Import Files, and Generate a response

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# display_name = "test_corpus"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

# Create RagCorpus
rag_corpus = rag.create_corpus(display_name=display_name)

# Import Files to the RagCorpus
response = rag.import_files(
    rag_corpus.name,
    paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)

# Direct context retrieval
response = rag.retrieval_query(
    rag_corpora=[rag_corpus.name],
    text="What is RAG and why it is helpful?",
    similarity_top_k=10,
)
print(response)

# Enhance generation
# Create a RAG retrieval tool
rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_corpora=[rag_corpus.name],  # Currently only 1 corpus is allowed.
            similarity_top_k=3,  # Optional
        ),
    )
)
# Create a gemini-pro model instance
rag_model = GenerativeModel(
    model_name="gemini-1.0-pro-002", tools=[rag_retrieval_tool]
)

# Generate response
response = rag_model.generate_content("What is RAG and why it is helpful?")
print(response.text)

支持的模型

以下模型及其支持 Vertex AI 上的 LlamaIndex 的版本包括:

模型 版本
Gemini 1.5 Flash(预览版) gemini-1.5-flash-preview-0514
Gemini 1.5 Pro(预览版) gemini-1.5-pro-preview-0514
Gemini 1.0 Pro gemini-1.0-pro-001
gemini-1.0-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-vision-001
Gemini gemini-experimental

支持的文档类型

支持纯文本文档,其中包括以下文件类型及其文件大小限制:

文件类型 文件大小限制
Google 文档 从 Google Workspace 导出时为 10 MB
Google 绘图 从 Google Workspace 导出时为 10 MB
Google 幻灯片 从 Google Workspace 导出时为 10 MB
HTML 文件 10 MB
JSON 文件 1 MB
Markdown 文件 10 MB
Microsoft PowerPoint 幻灯片(PPTX 文件) 10 MB
Microsoft Word 文档(DOCX 文件) 10 MB
PDF 文件 50 MB
文本文件 10 MB

可以将 Vertex AI for RAG 上的 LlamaIndex 与其他文档类型搭配使用,但可能会生成质量不佳的回答。

支持的数据源

有三个受支持的数据源,其中包括:

  • 使用 upload_file(最多 25 MB)的单个文件上传,这是一个同步调用。

  • 从 Cloud Storage 导入文件。

  • 从 Google 云端硬盘导入目录。

    必须向服务账号授予正确的权限,才能导入文件。 否则,系统不会导入任何文件,也不会显示错误消息。如需详细了解文件大小限制,请参阅支持的文档类型

    如需进行身份验证并授予权限,请执行以下操作:

    1. 转到 Google Cloud 项目的 IAM 页面
    2. 选择包括 Google 提供的角色授权
    3. 搜索 Vertex AI RAG Data Service Agent 服务账号。
    4. 点击云端硬盘文件夹上的共享,然后与服务账号共享。
    5. 向服务账号授予 Google 云端硬盘文件夹或文件的 Viewer 权限。您可以在网址中找到 Google 云端硬盘资源 ID。

如需了解详情,请参阅 RAG API 参考文档

支持的数据转换

注入文档后,Vertex AI for RAG 上的 LlamaIndex 会运行一组转换以获得最佳质量,并且开发者可以控制其用例的参数。

这些参数包括下列各项:

参数 说明
chunk_size 将文档注入到索引时,文档会被拆分为块。chunk_size 参数(以词元为单位)指定块的大小。默认块大小为 1,024 个词元。
chunk_overlap 默认情况下,文档会被分成具有一定重叠度的块,以提高相关性和检索质量。默认块重叠为 200 个词元。

块越小意味着嵌入越精确。较大的块大小意味着嵌入可能更通用,但可能会错过特定细节。

例如,如果将 200 个字词(而不是 1000 个字词)转换为相同维度的嵌入数组,可能会丢失细节。这也是考虑模型上下文长度限制的一个好示例。大数据块可能不适合小窗口模型。

检索参数

下表包含检索参数:

参数 说明
similarity_top_k 控制检索的最大上下文数。
vector_distance_threshold 仅考虑距离小于阈值的上下文。

索引管理

语料库是文档或信息来源的集合。该集合也称为索引。然后,可以查询该索引以检索 LLM 生成的相关上下文。首次创建索引时,该过程可能需要多花费一分钟时间。为了在同一 Google Cloud 项目中更多地创建索引,此过程需要的时间更短。

支持以下索引操作:

不支持对语料库执行并发操作。如需了解详情,请参阅 RAG API 参考文档

文件管理

支持以下文件操作:

如需了解详情,请参阅 RAG API 参考文档

后续步骤