为 PaLM 2 模型的回答提供事实依据

将 PaLM 用于您的数据

如需在 Vertex AI 上的生成式 AI 中使用模型连接,您需要满足一些前提条件。其中包括创建 Vertex AI Search 数据源、为数据存储区启用企业版,以及将数据存储区关联到 Vertex AI Search 中的应用。数据源用作在 Vertex AI 中连接 text-bisonchat-bison 的基础。

Vertex AI Search 可帮助您根据您提供的数据开始进行高质量的搜索或推荐。如需详细了解 Vertex AI Search,请参阅 Vertex AI Search 简介

启用 Vertex AI Search

  1. 在 Google Cloud 控制台中,进入 Search & Conversation 页面。

    Search & Conversation

  2. 阅读并同意服务条款,然后点击继续并激活 API

在 Vertex AI Search 中创建数据存储区

如需将模型连接到源数据,您需要准备好数据并将其保存到 Vertex AI Search。为此,您需要在 Vertex AI Search 中创建数据存储区

如果您从头开始,则需要准备数据以注入到 Vertex AI Search 中。如需开始操作,请参阅准备数据以进行注入。注入过程可能需要几分钟到几小时才能完成,具体取决于数据的大小。只有非结构化数据存储区支持连接功能。 准备好要注入的数据后,您可以创建搜索数据存储区。成功创建数据存储区后,创建搜索应用以关联到该存储区并启用企业版

连接 text-bison 模型

连接功能适用于 text-bisonchat-bison 模型。以下示例使用 text-bison 基础模型。

如果使用 API,请在调用预测时连接 text-bison。为此,请添加可选的 groundingConfig 并引用数据存储区位置和数据存储区 ID。

如果您不知道数据存储区 ID,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,转到 Vertex AI Search 页面,然后在导航菜单中点击数据存储区。 <a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="BU2UnTd/bvXw0I31NoHStFtigmNHgUGOXn/QVSGplOhB4J1rwNxdLslXsSNCBkPOFvWIDj0tv6yobddHSWXSow==" target="console" track-name="consoleLink" track-type="tasks" }="">转到“数据存储区”页面</a{:>
  2. 点击您的数据存储区的名称。
  3. 在数据存储区的数据页面上,获取数据存储区 ID。

REST

如需使用 Vertex AI API 测试文本提示,请向发布方模型端点发送 POST 请求。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目 ID
  • PROMPT:提示是提交到语言模型用以接收回复的自然语言请求。提示可以包含问题、说明、语境信息、示例和文本,供模型完成或继续。 (请勿为此处的提示添加引号。)
  • TEMPERATURE:温度 (temperature) 在生成回复期间用于采样,在应用 topPtopK 时会生成回复。温度可以控制词元选择的随机性。 较低的温度有利于需要更少开放性或创造性回复的提示,而较高的温度可以带来更具多样性或创造性的结果。温度为 0 表示始终选择概率最高的词元。在这种情况下,给定提示的回复大多是确定的,但可能仍然有少量变化。

    如果模型返回的回答过于笼统、过于简短,或者模型给出后备回答,请尝试提高温度。

  • MAX_OUTPUT_TOKENS:响应中可生成的词元数量上限。词元约为 4 个字符。100 个词元对应大约 60-80 个单词。

    指定较低的值可获得较短的回答,指定较高的值可获得可能较长的回答。

  • TOP_P:Top-P 可更改模型选择输出词元的方式。系统会按照概率从最高(见 top-K)到最低的顺序选择词元,直到所选词元的概率总和等于 top-P 的值。例如,如果词元 A、B 和 C 的概率分别为 0.3、0.2 和 0.1,并且 top-P 值为 0.5,则模型将选择 A 或 B 作为下一个词元(通过温度确定),并会排除 C,将其作为候选词元。

    指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。

  • TOP_K:Top-K 可更改模型选择输出词元的方式。如果 top-K 设为 1,表示所选词元是模型词汇表的所有词元中概率最高的词元(也称为贪心解码)。如果 top-K 设为 3,则表示系统将从 3 个概率最高的词元(通过温度确定)中选择下一个词元。

    在每个词元选择步骤中,系统都会对概率最高的 top-K 词元进行采样。然后,系统会根据 top-P 进一步过滤词元,并使用温度采样选择最终的词元。

    指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。

  • SOURCE_TYPE:模型连接到的数据源类型。仅支持 Vertex AI Search。
  • VERTEX_AI_SEARCH_DATA_STORE:Vertex AI Search 数据存储区 ID 路径。

    VERTEX_AI_SEARCH_DATA_STORE 必须采用以下格式。使用为位置和集合提供的值:projects/{project_id}/locations/global/collections/default_collection/dataStores/{data_store_id}

    注意:此数据存储区 ID 路径中的项目 ID 是您的 Vertex AI Search 项目 ID。

HTTP 方法和网址:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict

请求 JSON 正文:

{
  "instances": [
    { "prompt": "PROMPT"}
  ],
  "parameters": {
    "temperature": TEMPERATURE,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "topP": TOP_P,
    "topK": TOP_K,
    "groundingConfig": {
      "sources": [
          {
              "type": "VERTEX_AI_SEARCH",
              "vertexAiSearchDatastore": "VERTEX_AI_SEARCH_DATA_STORE"
          }
      ]
    }
  }
}

如需发送请求,请选择以下方式之一:

curl

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict"

PowerShell

将请求正文保存在名为 request.json 的文件中,然后执行以下命令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict" | Select-Object -Expand Content

您应该收到类似以下内容的 JSON 响应。

控制台

如需从 Vertex AI Studio 连接模型,请按照以下说明操作。

  1. 在 Model Garden 中选择 PaLM 2 for Text BisonPaLM 2 for Chat Bison 模型卡片。

    <a{: class="button button-primary" l10n-attrs-original-order="href,target,class,track-name,track-type" l10n-encrypted-href="kDsq5VTi6ASK/vNFlrWmnltigmNHgUGOXn/QVSGplOi71dheYhG9dKuv3S+0ajmQkfzB9oP/Mo2x7xIe1klR5Wv+Luwn/kGU2mxRbPxpxolc9gBRk3QOdMg5rdH6ChX7" target="console" track-name="consoleLink" track-type="tasks" }="">转到 Model Garden</a{:>
  2. 在模型卡片中,点击打开提示设计。系统会打开 Vertex AI Studio。
  3. 从参数面板中选择高级
  4. 切换启用连接选项,然后选择自定义
  5. 从连接来源下拉菜单中,选择 Vertex AI Search
  6. 输入内容的 Vertex AI Search 数据存储区路径。路径应采用以下格式:projects/{project_id}/locations/global/collections/default_collection/dataStores/{data_store_id}
  7. 输入您的提示,然后点击提交

Python

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

from typing import Optional

import vertexai
from vertexai.language_models import (
    GroundingSource,
    TextGenerationModel,
    TextGenerationResponse,
)

def grounding(
    project_id: str,
    location: str,
    data_store_location: Optional[str],
    data_store_id: Optional[str],
) -> TextGenerationResponse:
    """Grounding example with a Large Language Model"""

    vertexai.init(project=project_id, location=location)

    # TODO developer - override these parameters as needed:
    parameters = {
        "temperature": 0.7,  # Temperature controls the degree of randomness in token selection.
        "max_output_tokens": 256,  # Token limit determines the maximum amount of text output.
        "top_p": 0.8,  # Tokens are selected from most probable to least until the sum of their probabilities equals the top_p value.
        "top_k": 40,  # A top_k of 1 means the selected token is the most probable among all tokens.
    }

    model = TextGenerationModel.from_pretrained("text-bison@002")

    if data_store_id and data_store_location:
        # Use Vertex AI Search data store
        grounding_source = GroundingSource.VertexAISearch(
            data_store_id=data_store_id, location=data_store_location
        )
    else:
        # Use Google Search for grounding (Private Preview)
        grounding_source = GroundingSource.WebSearch()

    response = model.predict(
        "What are the price, available colors, and storage size options of a Pixel Tablet?",
        grounding_source=grounding_source,
        **parameters,
    )
    print(f"Response from Model: {response.text}")
    print(f"Grounding Metadata: {response.grounding_metadata}")

后续步骤