取得文字嵌入

本頁面說明如何使用 Text Embedding API 建立文字嵌入。

Vertex AI 支援透過 Text Embedding API,在 Google Distributed Cloud (GDC) 實體隔離方案中使用文字嵌入。文字嵌入會使用向量表示法。

文字嵌入會將以任何支援語言編寫的文字資料,轉換為數值向量。這些向量表示法旨在擷取所代表字詞的語意和語境。文字嵌入模型可針對各種工作類型生成最佳化嵌入,例如文件檢索、常見問答、分類和文字事實查核。

如要進一步瞭解文字嵌入使用的重要概念,請參閱下列說明文件:

事前準備

如要在 GDC 專案中生成文字嵌入,請向管理員要求必要權限。

要求 IAM 角色

請與 IAM 專案管理員聯絡,要求在專案命名空間中取得下列其中一個角色,具體取決於您要使用的模型:

  • AI 文字嵌入開發人員 (ai-text-embedding-developer):使用文字嵌入模型生成文字嵌入。
  • AI Text Embedding Multilingual Developer (ai-text-embedding-multilingual-developer):使用 Text Embedding Multilingual 模型生成文字嵌入。

如要進一步瞭解這些角色,請參閱「準備 IAM 權限」。如要瞭解服務帳戶的角色繫結,請參閱「設定服務帳戶」。

準備環境

在 GDC 專案中使用文字嵌入前,請先完成下列步驟:

  1. 設定 Vertex AI 專案。
  2. 選擇其中一個可用的文字嵌入模型,具體取決於語言和工作類型。
  3. 視要使用的模型而定,啟用 Text Embedding 或 Text Embedding Multilingual API。
  4. 安裝 Vertex AI 用戶端程式庫。

  5. 取得驗證權杖。

模型要求、服務帳戶和 IAM 角色繫結必須使用同一個專案。

取得文字片段的文字嵌入

符合必要條件後,您可以使用 Text Embedding 或 Text Embedding Multilingual 模型,透過 API 或 Python 適用的 SDK 取得某段文字的文字嵌入。

下列範例使用 text-embedding-004 模型。

對文字嵌入 API 提出 REST 要求。否則,請透過 Python 指令碼與模型互動,取得文字嵌入。

REST

如要取得文字嵌入,請指定模型端點並傳送 POST 要求。

請按照下列步驟提出要求:

  1. 將要求內容儲存至名為 request.json 的 JSON 檔案。檔案必須如下所示:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  2. 使用 curl 工具提出要求:

    curl -X POST \
    -H "Authorization: Bearer TOKEN"\
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://ENDPOINT:443/v1/projects/PROJECT/locations/PROJECT/endpoints/MODEL:predict"
    

    更改下列內容:

    • TOKEN:您取得的驗證權杖。
    • ENDPOINT:貴組織使用的文字嵌入或多語言文字嵌入端點。詳情請參閱「查看服務狀態和端點」。
    • PROJECT:您的專案名稱。
    • MODEL:要使用的模型。可用的值如下:

      • endpoint-text-embedding:文字嵌入模型。
      • endpoint-text-embedding-multilingual:文字嵌入多語言模型。

輸出結果會與下列內容相似:

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}

Python

請按照下列步驟,從 Python 指令碼取得文字嵌入:

  1. 安裝 Vertex AI Platform 用戶端程式庫。

  2. 將要求內容儲存至名為 request.json 的 JSON 檔案。檔案必須如下所示:

    {
      "instances": [
        {
          "content": "What is life?",
          "task_type": "",
          "title": ""
        }
      ]
    }
    
  3. 安裝需要的 Python 程式庫:

    pip install absl-py
    
  4. 建立名為 client.py 的 Python 檔案。檔案應如下例所示:

    import json
    import os
    from typing import Sequence
    
    import grpc
    from absl import app
    from absl import flags
    
    from google.protobuf import json_format
    from google.protobuf.struct_pb2 import Value
    from google.cloud.aiplatform_v1.services import prediction_service
    
    _INPUT = flags.DEFINE_string("input", None, "input", required=True)
    _HOST = flags.DEFINE_string("host", None, "Prediction endpoint", required=True)
    _ENDPOINT_ID = flags.DEFINE_string("endpoint_id", None, "endpoint id", required=True)
    _TOKEN = flags.DEFINE_string("token", None, "STS token", required=True)
    
    # ENDPOINT_RESOURCE_NAME is a placeholder value that doesn't affect prediction behavior.
    ENDPOINT_RESOURCE_NAME="projects/PROJECT/locations/PROJECT/endpoints/MODEL"
    
    os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = CERT_NAME
    
    # predict_client_secure builds a client that requires TLS
    def predict_client_secure(host):
      with open(os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"], 'rb') as f:
          creds = grpc.ssl_channel_credentials(f.read())
    
      channel_opts = ()
      channel_opts += (('grpc.ssl_target_name_override', host),)
      client = prediction_service.PredictionServiceClient(
          transport=prediction_service.transports.grpc.PredictionServiceGrpcTransport(
              channel=grpc.secure_channel(target=host+":443", credentials=creds, options=channel_opts)))
      return client
    
    def predict_func(client, instances, token):
      resp = client.predict(
          endpoint=ENDPOINT_RESOURCE_NAME,
          instances=instances,
          metadata=[ ("x-vertex-ai-endpoint-id", _ENDPOINT_ID.value), ("authorization", "Bearer " + token),])
      print(resp)
    
    def main(argv: Sequence[str]):
      del argv  # Unused.
      with open(_INPUT.value) as json_file:
          data = json.load(json_file)
          instances = [json_format.ParseDict(s, Value()) for s in data["instances"]]
    
      client = predict_client_secure(_HOST.value,)
    
      predict_func(client=client, instances=instances, token=_TOKEN.value)
    
    if __name__=="__main__":
      app.run(main)
    

    更改下列內容:

    • PROJECT:您的專案名稱。
    • MODEL:要使用的模型。可用的值如下:
      • text-embedding:文字嵌入模型。
      • text-embedding-multilingual:文字嵌入多語言模型。
    • CERT_NAME:憑證授權單位 (CA) 憑證檔案的名稱,例如 org-1-trust-bundle-ca.cert。只有在開發環境中,才需要這個值。否則請省略。
  5. 傳送要求:

    python client.py --token=TOKEN --host=ENDPOINT --input=request.json --endpoint_id=MODEL
    

    更改下列內容:

    • TOKEN:您取得的驗證權杖。
    • ENDPOINT:貴組織使用的文字嵌入或多語言文字嵌入端點。詳情請參閱「查看服務狀態和端點」。
    • MODEL:要使用的模型。可用的值如下:

      • text-embedding:文字嵌入模型。
      • text-embedding-multilingual:文字嵌入多語言模型。

輸出結果會與下列內容相似:

{"predictions":[[-0.00668720435,3.20804138e-05,-0.0281705819,-0.00954890903,-0.0818724185,0.0150693133,-0.00677698106,0.0167487375,-0.0534791686,0.00208711182,0.032938987,-0.01491543]],"deployedModelId":"text-embedding","model":"models/text-embedding/1","modelDisplayName":"text-embedding","modelVersionId":"1"}