将嵌入模型与适用于 RAG 的 LlamaIndex on Vertex AI 搭配使用

本页介绍了可供选择的嵌入模型,并展示了如何使用所选模型创建 RAG 语料库。在 RAG 语料库的整个生命周期内,您的模型与 RAG 语料库之间的关联将保持不变。

嵌入是输入的数值表示法。您可以在应用中使用嵌入来识别复杂含义和语义关系,以及处理和生成语言。

嵌入的工作原理是将文本、图片和视频转换为浮点数组(称为向量)。嵌入空间中两个向量越接近,它们的输入就越相似。

嵌入模型是语义检索系统的重要组成部分。检索系统的性能取决于嵌入模型映射数据中关系的程度。

适用于 RAG 的 LlamaIndex on Vertex AI 实现了检索增强生成 (RAG),并为您提供了以下可在 RAG 语料库中使用的嵌入模型:

  • Vertex AI 文本嵌入模型:由发布商(例如 Google)训练的模型。这些模型是在大量文本数据集上进行训练的,可为许多任务提供强大的基础。
  • 经过微调的 Vertex AI 文本嵌入模型:经过训练以具备专业知识或高度量身定制的性能的模型。
  • 开源嵌入模型:仅提供英语版本和多语言版本的第三方开源嵌入模型。

使用 Vertex AI 文本嵌入模型

Vertex AI 文本嵌入 API 使用 Gecko 嵌入模型,该模型会生成一个 768 维的密集嵌入向量。与倾向于将字词直接映射到数字的稀疏向量不同,密集嵌入会存储文本的含义。在生成式 AI 中使用密集向量嵌入的优势在于,您可以更好地搜索与查询含义相符的段落,而不是搜索直接的字词或语法匹配项,即使段落不使用相同的语言也是如此。

Gecko 模型提供英语版和多语言版。与经过微调的 Gecko 模型不同,发布商 Gecko 模型不需要部署,因此与适用于 RAG 的 LlamaIndex on Vertex AI 搭配使用时最为简单。建议将以下 Gecko 模型与 RAG 语料库搭配使用:

  • text-embedding-004
  • text-multilingual-embedding-002
  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001

如果您在创建 RAG 语料库时未指定嵌入模型,适用于 RAG 的 LlamaIndex on Vertex AI 会默认为 RAG 语料库分配 text-embedding-004 模型。

发布商 Gecko 模型可能会被废弃。如果发生这种情况,发布商 Gecko 模型无法与适用于 RAG 的 LlamaIndex on Vertex AI 搭配使用,即使是废弃之前创建的 RAG 语料库也是如此。当 Gecko 模型被废弃时,您必须迁移 RAG 语料库,这意味着您需要创建 RAG 语料库并导入数据。另一种方法是使用经过微调的 Gecko 模型或自行部署的 OSS 嵌入模型,这些模型在弃用后仍受支持。

以下代码示例演示了如何使用发布商 Gecko 模型创建 RAG 语料库。

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Set this to your choice of publisher Gecko model. Note that the full resource name of the publisher model is required.
  // Example: projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/text-embedding-004
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
              "vertex_prediction_endpoint": {
                    "endpoint": '\""${ENDPOINT_NAME}"\"'
              }
        }
  }'

Python 版 Vertex AI SDK

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Configure a Google first-party embedding model
  embedding_model_config = rag.EmbeddingModelConfig(
        publisher_model="publishers/google/models/text-embedding-004"
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
        display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

使用经过微调的 Vertex AI 文本嵌入模型

虽然基础发布商模型是基于大量文本数据集进行训练的,并且为许多任务提供了强大的基础,但在某些情况下,您可能需要模型具备专业知识或高度量身定制的性能。在这种情况下,模型调优可让您使用相关数据微调模型的表示法。这种方法的另一个好处是,在对模型进行微调后,生成的图片归您所有,并且不会受到 Gecko 模型弃用的任何影响。所有经过微调的 Gecko 嵌入模型都会生成具有 768 维向量的嵌入。如需详细了解这些模型,请参阅获取文本嵌入

如需对 Gecko 模型进行微调,请参阅调优文本嵌入

以下代码示例演示了如何使用已部署且经过微调的 Gecko 模型创建 RAG 语料库。

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex AI endpoint resource with the deployed fine-tuned Gecko model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

Python 版 Vertex AI SDK

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=${PROJECT_ID}, location="us-central1")

  # Your Vertex Endpoint resource with the deployed fine-tuned Gecko model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/${PROJECT_ID}/locations/us-central1/endpoints/${ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=${MODEL_ENDPOINT},
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=${DISPLAY_NAME}, embedding_model_config=embedding_model_config
  )

使用 OSS 嵌入模型

适用于 RAG 的 LlamaIndex on Vertex AI 支持仅支持英语和多语言变体的第三方开源嵌入模型。下表列出了支持的 E5 型号。

模型版本 基本模型 参数 嵌入维度 仅支持英语
e5-base-v2 MiniLM 1.09 亿 768
e5-large-v2 MiniLM 3.35 亿 1024
e5-small-v2 MiniLM 3300 万 384
multilingual-e5-large xlm-roberta-large 5.6 亿 1024
multilingual-e5-small microsoft/Multilingual-MiniLM-L12-H384 1.18 亿 384

如需将 E5 模型与适用于 RAG 的 LlamaIndex on Vertex AI 搭配使用,必须从 Model Garden 部署 E5 模型。如需部署 E5 模型,请参阅 Google Cloud 控制台中的 E5 Text Embedding

以下代码示例演示了如何使用已部署的 E5 模型创建 RAG 语料库。

curl

  ENDPOINT=us-central1-aiplatform.googleapis.com
  PROJECT_ID=YOUR_PROJECT_ID

  // Your Vertex Endpoint resource with the deployed E5 model
  // Example: projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${ENDPOINT_ID}
  ENDPOINT_NAME=YOUR_ENDPOINT_NAME

  // Set a display name for your corpus.
  // For example, "my test corpus"
  CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

  // CreateRagCorpus
  // Input: ENDPOINT, PROJECT_ID, ENDPOINT_NAME, CORPUS_DISPLAY_NAME
  curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${ENDPOINT}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora \
  -d '{
        "display_name" : '\""${CORPUS_DISPLAY_NAME</var>}"\"',
        "rag_embedding_model_config" : {
                "vertex_prediction_endpoint": {
                      "endpoint": '\""${ENDPOINT_NAME}"\"'
                }
        }
    }'

Python 版 Vertex AI SDK

  import vertexai
  from vertexai.preview import rag

  # Set Project
  PROJECT_ID = "YOUR_PROJECT_ID"
  vertexai.init(project=PROJECT_ID, location="us-central1")

  # Your Vertex Endpoint resource with the deployed E5 model
  ENDPOINT_ID = "YOUR_MODEL_ENDPOINT_ID"
  MODEL_ENDPOINT = "projects/{PROJECT_ID}/locations/us-central1/endpoints/{ENDPOINT_ID}"

  embedding_model_config = rag.EmbeddingModelConfig(
      endpoint=MODEL_ENDPOINT,
  )

  # Name your corpus
  DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"

  rag_corpus = rag.create_corpus(
      display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config
  )

后续步骤