运行评估

您可以使用 Vertex AI SDK for Python生成式 AI 评估模块,以编程方式使用 Gen AI Evaluation Service API 评估生成式语言模型和应用。本页介绍了如何使用 Vertex AI SDK 运行评估。

准备工作

安装 Vertex AI SDK

如需通过 Vertex AI SDK for Python 安装 Gen AI Evaluation 模块,请运行以下命令:

!pip install -q google-cloud-aiplatform[evaluation]

如需了解详情,请参阅安装 Python 版 Vertex AI SDK

对 Vertex AI SDK 进行身份验证

安装 Python 版 Vertex AI SDK 后,您需要进行身份验证。以下主题介绍了在本地工作以及使用 Colaboratory 时如何向 Vertex AI SDK 进行身份验证:

  • 如果您是在本地开发,请在本地环境中设置应用默认凭据 (ADC)

    1. 安装 Google Cloud CLI,然后通过运行以下命令对其进行初始化

      gcloud init
      
    2. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login
      

      系统会显示登录屏幕。在您登录后,您的凭据会存储在 ADC 使用的本地凭据文件中。如需详细了解如何在本地环境中使用 ADC,请参阅本地开发环境

  • 在 Colaboratory 中,在 Colab 单元中运行以下命令以进行身份验证:

    from google.colab import auth
    auth.authenticate_user()
    

    此命令将打开一个窗口,您可在其中完成身份验证。

了解服务账号

Gen AI Evaluation Service 使用服务账号Vertex AI 中的 Gemini API 获取基于模型的评估指标的预测结果。此服务账号会在 Gen AI 评估服务收到第一个请求时自动预配。

名称 说明 电子邮件地址 角色
Vertex AI Rapid Eval Service Agent 用于为基于模型的评估获取预测结果的服务账号。 service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com roles/aiplatform.rapidevalServiceAgent

与快速评估服务代理关联的权限包括:

角色 权限
Vertex AI Rapid Eval Service Agent (roles/aiplatform.rapidevalServiceAgent) aiplatform.endpoints.predict

运行评估

使用 EvalTask 类针对以下用例运行评估:

EvalTask

EvalTask 类可帮助您根据特定任务评估模型和应用。为了公平地比较生成模型,您通常需要使用特定指标针对固定的评估数据集重复评估各种模型和提示模板。在一次评估运行中同时评估多个指标也很重要。

EvalTask 还与 Vertex AI Experiments 集成,可帮助您跟踪每次评估运行的配置和结果。Vertex AI Experiments 可帮助管理和解释评估结果,使您能够做出明智的决策。

以下示例演示了如何实例化 EvalTask 类并运行评估:

from vertexai.evaluation import (
    EvalTask,
    PairwiseMetric,
    PairwiseMetricPromptTemplate,
    PointwiseMetric,
    PointwiseMetricPromptTemplate,
    MetricPromptTemplateExamples
)

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
    experiment=EXPERIMENT_NAME,
)

eval_result = eval_task.evaluate(
    model=MODEL,
    prompt_template=PROMPT_TEMPLATE,
    experiment_run=EXPERIMENT_RUN,
)

使用基于模型的指标运行评估

对于基于模型的指标,请使用 PointwiseMetricPairwiseMetric 类来定义根据您的特定标准量身定制的指标。使用以下选项运行评估:

使用基于模型的指标示例

您可以在 Vertex AI SDK 中直接使用内置常量 Metric Prompt Template Examples。或者,您也可以在自由形式指标定义界面中修改并合并它们。

如需查看涵盖大多数主要用例的指标提示模板示例的完整列表,请参阅指标提示模板

以下 Vertex AI SDK 示例展示了如何使用 MetricPromptTemplateExamples 类来定义指标:

# View all the available examples of model-based metrics
MetricPromptTemplateExamples.list_example_metric_names()

# Display the metric prompt template of a specific example metric
print(MetricPromptTemplateExamples.get_prompt_template('fluency'))

# Use the pre-defined model-based metrics directly
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[MetricPromptTemplateExamples.Pointwise.FLUENCY],
)

eval_result = eval_task.evaluate(
    model=MODEL,
)

使用基于模型的指标模板化接口

使用 Vertex AI SDK 中的 PointwiseMetricPromptTemplatePairwiseMetricPromptTemplate 类填充 CriteriaRating Rubrics 等字段,以自定义指标。如果您未提供输入内容,系统会为某些字段(例如 Instruction)分配默认值。

(可选)您可以指定 input_variables,它是指标提示模板用于生成基于模型的评估结果的输入字段列表。默认情况下,对于点状指标,系统会包含模型的 response 列;对于成对指标,系统会同时包含候选模型的 responsebaseline_model_response 列。

如需了解详情,请参阅指标提示模板中的“构建指标提示模板的结构”部分。

# Define a pointwise metric with two custom criteria
custom_text_quality = PointwiseMetric(
    metric="custom_text_quality",
    metric_prompt_template=PointwiseMetricPromptTemplate(
        criteria={
          "fluency": "Sentences flow smoothly and are easy to read, avoiding awkward phrasing or run-on sentences. Ideas and sentences connect logically, using transitions effectively where needed.",
          "entertaining": "Short, amusing text that incorporates emojis, exclamations and questions to convey quick and spontaneous communication and diversion.",
        },
        rating_rubric={
          "1": "The response performs well on both criteria.",
          "0": "The response is somewhat aligned with both criteria",
          "-1": "The response falls short on both criteria",
        },
        input_variables=["prompt"],
    ),
)

# Display the serialized metric prompt template
print(custom_text_quality.metric_prompt_template)

# Run evaluation using the custom_text_quality metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

使用基于模型的指标不加格式 SDK 接口

为了在自定义指标提示模板时获得更大的灵活性,您可以直接使用自由格式界面(可接受直接字符串输入)来定义指标。

# Define a pointwise multi-turn chat quality metric
pointwise_chat_quality_metric_prompt = """Evaluate the AI's contribution to a meaningful conversation, considering coherence, fluency, groundedness, and conciseness.
 Review the chat history for context. Rate the response on a 1-5 scale, with explanations for each criterion and its overall impact.

# Conversation History
{history}

# Current User Prompt
{prompt}

# AI-generated Response
{response}
"""

freeform_multi_turn_chat_quality_metric = PointwiseMetric(
    metric="multi_turn_chat_quality_metric",
    metric_prompt_template=pointwise_chat_quality_metric_prompt,
)

# Run evaluation using the freeform_multi_turn_chat_quality_metric metric
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[freeform_multi_turn_chat_quality_metric],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

评估翻译模型

如需评估翻译模型,您可以在使用 Vertex AI SDK 时指定 BLEUMetricXCOMET 作为评估指标。

#Prepare the dataset for evaluation.
sources = [
    "Dem Feuer konnte Einhalt geboten werden",
    "Schulen und Kindergärten wurden eröffnet.",
]

responses = [
    "The fire could be stopped",
    "Schools and kindergartens were open",
]

references = [
    "They were able to control the fire.",
    "Schools and kindergartens opened",
]

eval_dataset = pd.DataFrame({
    "source": sources,
    "response": responses,
    "reference": references,
})

# Set the metrics.

metrics = [
    "bleu",
    pointwise_metric.Comet(),
    pointwise_metric.MetricX(),
]

eval_task = evaluation.EvalTask(
    dataset=eval_dataset,
    metrics=metrics,
)
eval_result = eval_task.evaluate()

使用基于计算的指标运行评估

您可以单独使用基于计算的指标,也可以将其与基于模型的指标结合使用。

# Combine computation-based metrics "ROUGE" and "BLEU" with model-based metrics
eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=["rouge_l_sum", "bleu", custom_text_quality],
)
eval_result = eval_task.evaluate(
    model=MODEL,
)

其他指标自定义

如果您需要进一步自定义指标,例如为基于模型的指标选择其他评判模型,或定义新的基于计算的指标,则可以使用 Vertex AI SDK 中的 CustomMetric 类。如需了解详情,请参阅以下笔记本:

运行基于模型的评估,并提高速率限制和配额

对基于模型的指标的单个评估请求会导致对 Vertex AI 中的 Gemini API 发出多个底层请求,并消耗判定模型 gemini-1.5-pro 配额。每分钟模型请求数 (RPM) 配额按项目计算,这意味着对评判模型 gemini-1.5-pro 的请求和对基于模型指标的 Gen AI Evaluation Service 的请求均计入 gemini-1.5-pro 在特定区域的项目评判模型 RPM 配额。

在以下用例中,您应提高评判模型 RPM 配额并设置更高的评估服务费率限制 evaluation_service_qps

  • 数据量增加:如果您使用基于模型的指标处理的数据量显著增加,则可能会达到默认的 RPM 配额。通过增加配额,您可以在不影响性能的情况下处理更大的数据量。

  • 更快的评估:如果您的应用需要更快的评估周转时间,则可能需要更高的 RPM 配额。对于时间敏感型应用或具有实时互动的应用,评估延迟可能会影响用户体验,因此这类应用尤其需要注意这一点。

  • 复杂的评估任务:更高的 RPM 配额可确保您有足够的容量来处理复杂任务或大量文本的资源密集型评估。

  • 用户并发量高:如果您预计项目中会有大量用户同时请求基于模型的评估和模型推断,那么提高模型 RPM 上限至关重要,以防止出现瓶颈并保持响应速度。

如需提高模型配额并使用 Gen AI Evaluation Service SDK 提高费率上限,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入 IAM 和管理配额页面。

    在控制台中查看配额

  2. 过滤条件字段中,指定维度(模型标识符)和指标(Gemini 模型的配额标识符):base_model:gemini-1.5-proMetric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model

  3. 针对您要增加的配额,点击更多操作菜单 按钮。

  4. 在下拉菜单中,点击修改配额。此时会打开配额更改面板。

  5. 修改配额下方,输入新的配额值。

  6. 点击提交请求

  7. 配额增加请求将通过电子邮件进行确认,通常需要两个工作日才能处理完毕。

  8. 在通过电子邮件批准配额提升请求后,您可以按如下方式设置 evaluation_service_qps 参数:

from vertexai.evaluation import EvalTask

# GEMINI_RPM is the requests per minute (RPM) quota for gemini-1.5-pro in your region
# Evaluation Service QPS limit is equal to (gemini-1.5-pro RPM / 60 sec / default number of samples)
CUSTOM_EVAL_SERVICE_QPS_LIMIT = GEMINI_RPM / 60 / 4

eval_task = EvalTask(
    dataset=DATASET,
    metrics=[METRIC_1, METRIC_2, METRIC_3],
)

eval_result = eval_task.evaluate(
    evaluation_service_qps=CUSTOM_EVAL_SERVICE_QPS_LIMIT,
    # Specify a retry_timeout limit for a more responsive evaluation run
    # the default value is 600 (in seconds, or 10 minutes)
    retry_timeout=RETRY_TIMEOUT,
)

如需详细了解配额和限制,请参阅 Gen AI Evaluation Service 配额Gen AI Evaluation Service API

后续步骤