Predicciones por lotes con modelos Claude de Anthropic

Las predicciones por lotes te permiten enviar varias peticiones que no sean sensibles a la latencia a un modelo Claude de Anthropic. En comparación con las predicciones online, en las que se envía una petición por cada solicitud, puedes agrupar un gran número de peticiones en una sola solicitud.

Modelos Claude de Anthropic admitidos

Vertex AI admite predicciones por lotes para los siguientes modelos Claude de Anthropic:

Cuotas

De forma predeterminada, el número de solicitudes en lote simultáneas que puedes hacer en un solo proyecto es 4.

Preparar la entrada

Antes de empezar, prepara el conjunto de datos de entrada en una tabla de BigQuery o como un archivo JSONL en Cloud Storage. La entrada de ambas fuentes debe seguir el formato JSON del esquema de la API Claude de Anthropic, como se muestra en el siguiente ejemplo:

{
  "custom_id": "request-1",
  "request":  {
    "messages": [{"role": "user", "content": "Hello!"}],
    "anthropic_version": "vertex-2023-10-16",
    "max_tokens": 50
  }
}

BigQuery

La tabla de entrada de BigQuery debe cumplir el siguiente esquema:

Nombre de la columna Descripción
custom_id Un ID para cada solicitud que asocie la entrada con la salida.
solicitud El cuerpo de la solicitud, que es tu petición y debe seguir el esquema de la API Claude de Anthropic
  • Tu tabla de entrada puede tener otras columnas, que el trabajo por lotes ignora.
  • Las tareas de predicción por lotes reservan dos nombres de columna para la salida de la predicción por lotes: response(JSON) y status. No use estas columnas en la tabla de entrada.

Cloud Storage

En el caso de Cloud Storage, el archivo de entrada debe ser un archivo JSONL que se encuentre en un segmento de Cloud Storage.

Solicitar una predicción por lotes

Haz una predicción por lotes con un modelo de Claude usando datos de BigQuery o Cloud Storage. Puedes elegir de forma independiente si quieres generar las predicciones en una tabla de BigQuery o en un archivo JSONL de un segmento de Cloud Storage.

BigQuery

Especifica la tabla de entrada, el modelo y la ubicación de salida de BigQuery. La tarea de predicción por lotes y la tabla deben estar en la misma región.

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

import time

from google import genai
from google.genai.types import CreateBatchJobConfig, JobState, HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

# TODO(developer): Update and un-comment below line
# output_uri = f"bq://your-project.your_dataset.your_table"

job = client.batches.create(
    # Check Anthropic Claude region availability in https://cloud.devsite.corp.google.com/vertex-ai/generative-ai/docs/partner-models/use-claude#regions
    # More about Anthropic model: https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-haiku
    model="publishers/anthropic/models/claude-3-5-haiku",
    # The source dataset needs to be created specifically in us-east5
    src="bq://python-docs-samples-tests.anthropic_bq_sample.test_data",
    config=CreateBatchJobConfig(dest=output_uri),
)
print(f"Job name: {job.name}")
print(f"Job state: {job.state}")
# Example response:
# Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000
# Job state: JOB_STATE_PENDING

# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob
completed_states = {
    JobState.JOB_STATE_SUCCEEDED,
    JobState.JOB_STATE_FAILED,
    JobState.JOB_STATE_CANCELLED,
    JobState.JOB_STATE_PAUSED,
}

while job.state not in completed_states:
    time.sleep(30)
    job = client.batches.get(name=job.name)
    print(f"Job state: {job.state}")
# Example response:
# Job state: JOB_STATE_PENDING
# Job state: JOB_STATE_RUNNING
# Job state: JOB_STATE_RUNNING
# ...
# Job state: JOB_STATE_SUCCEEDED

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: una región que admita el modelo Claude de Anthropic seleccionado (consulta las regiones de Claude).
  • PROJECT_ID: tu ID de proyecto.
  • MODEL: el nombre del modelo.
  • INPUT_URI: la tabla de BigQuery en la que se encuentra la entrada de la predicción por lotes, como bq://myproject.mydataset.input_table.
  • OUTPUT_FORMAT: para enviar los datos a una tabla de BigQuery, especifica bigquery. Para enviar los datos a un segmento de Cloud Storage, especifica jsonl.
  • DESTINATION: en BigQuery, especifica bigqueryDestination. En el caso de Cloud Storage, especifica gcsDestination.
  • OUTPUT_URI_FIELD_NAME: En BigQuery, especifica outputUri. En el caso de Cloud Storage, especifica outputUriPrefix.
  • OUTPUT_URI: en BigQuery, especifica la ubicación de la tabla, como bq://myproject.mydataset.output_result. En Cloud Storage, especifica la ubicación del segmento y la carpeta, como gs://mybucket/path/to/outputfile.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs

Cuerpo JSON de la solicitud:

'{
  "displayName": "JOB_NAME",
  "model": "publishers/anthropic/models/MODEL",
  "inputConfig": {
    "instancesFormat":"bigquery",
    "bigquerySource":{
      "inputUri" : "INPUT_URI"
    }
  },
  "outputConfig": {
    "predictionsFormat":"OUTPUT_FORMAT",
    "DESTINATION":{
      "OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
    }
  }
}'

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Cloud Storage

Especifica la ubicación de Cloud Storage del archivo JSONL, el modelo y la ubicación de salida.

Python

Para saber cómo instalar o actualizar el SDK de Vertex AI para Python, consulta Instalar el SDK de Vertex AI para Python. Para obtener más información, consulta la documentación de referencia de la API Python.

import time

from google import genai
from google.genai.types import CreateBatchJobConfig, JobState, HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
# TODO(developer): Update and un-comment below line
# output_uri = "gs://your-bucket/your-prefix"

# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.batches.Batches.create
job = client.batches.create(
    # More about Anthropic model: https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-haiku
    model="publishers/anthropic/models/claude-3-5-haiku",
    # Source link: https://storage.cloud.google.com/cloud-samples-data/batch/anthropic-test-data-gcs.jsonl
    src="gs://cloud-samples-data/anthropic-test-data-gcs.jsonl",
    config=CreateBatchJobConfig(dest=output_uri),
)
print(f"Job name: {job.name}")
print(f"Job state: {job.state}")
# Example response:
# Job name: projects/%PROJECT_ID%/locations/us-central1/batchPredictionJobs/9876453210000000000
# Job state: JOB_STATE_PENDING

# See the documentation: https://googleapis.github.io/python-genai/genai.html#genai.types.BatchJob
completed_states = {
    JobState.JOB_STATE_SUCCEEDED,
    JobState.JOB_STATE_FAILED,
    JobState.JOB_STATE_CANCELLED,
    JobState.JOB_STATE_PAUSED,
}

while job.state not in completed_states:
    time.sleep(30)
    job = client.batches.get(name=job.name)
    print(f"Job state: {job.state}")
# Example response:
# Job state: JOB_STATE_PENDING
# Job state: JOB_STATE_RUNNING
# Job state: JOB_STATE_RUNNING
# ...
# Job state: JOB_STATE_SUCCEEDED

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: una región que admita el modelo Claude de Anthropic seleccionado (consulta las regiones de Claude).
  • PROJECT_ID: .
  • MODEL: el nombre del modelo.
  • INPUT_URIS: lista separada por comas de las ubicaciones de Cloud Storage de la entrada de predicción por lotes JSONL, como gs://bucketname/path/to/jsonl.
  • OUTPUT_FORMAT: para enviar los datos a una tabla de BigQuery, especifica bigquery. Para enviar los datos a un segmento de Cloud Storage, especifica jsonl.
  • DESTINATION: en BigQuery, especifica bigqueryDestination. En el caso de Cloud Storage, especifica gcsDestination.
  • OUTPUT_URI_FIELD_NAME: En BigQuery, especifica outputUri. En el caso de Cloud Storage, especifica outputUriPrefix.
  • OUTPUT_URI: en BigQuery, especifica la ubicación de la tabla, como bq://myproject.mydataset.output_result. En Cloud Storage, especifica la ubicación del segmento y la carpeta, como gs://mybucket/path/to/outputfile.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs

Cuerpo JSON de la solicitud:

'{
  "displayName": "JOB_NAME",
  "model": "publishers/anthropic/models/MODEL",
  "inputConfig": {
    "instancesFormat":"jsonl",
    "gcsSource":{
      "uris" : "INPUT_URIS"
    }
  },
  "outputConfig": {
    "predictionsFormat":"OUTPUT_FORMAT",
    "DESTINATION":{
      "OUTPUT_URI_FIELD_NAME": "OUTPUT_URI"
    }
  }
}'

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

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

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$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://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Obtener el estado de una tarea de predicción por lotes

Obtén el estado de tu tarea de predicción por lotes para comprobar si se ha completado correctamente.

REST

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: .
  • LOCATION: la región en la que se encuentra tu trabajo por lotes.
  • JOB_ID: el ID del trabajo por lotes que se devolvió cuando creaste el trabajo.

Método HTTP y URL:

GET https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID

Para enviar tu solicitud, elige una de estas opciones:

curl

Ejecuta el comando siguiente:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID"

PowerShell

Ejecuta el comando siguiente:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/batchPredictionJobs/JOB_ID" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la siguiente.

Recuperar la salida de una predicción por lotes

Cuando se complete una tarea de predicción por lotes, obtén la salida de la ubicación que hayas especificado. En BigQuery, la salida se encuentra en la columna response(JSON) de la tabla de BigQuery de destino. En el caso de Cloud Storage, la salida se guarda como un archivo JSONL en la ubicación de salida de Cloud Storage.

Puedes acceder a los resultados de la predicción por lotes completa cuando se hayan procesado todas las filas o después de 24 horas, lo que ocurra primero.