En esta página, se describe cómo generar predicciones de AA con Spanner emulador.
La integración de Vertex AI en Spanner se puede usar con el emulador de Spanner para generar predicciones con la predicción de AA de GoogleSQL o PostgreSQL funciones. El emulador es un objeto binario que imita a un servidor de Spanner. y se pueden usar en pruebas de integración y unidad. Puedes usar el emulador como un proyecto de código abierto o de forma local con Google Cloud CLI. Para obtener más información sobre las funciones de predicción de la IA, consulta ¿Cómo funciona la integración de Spanner con Vertex AI?.
Puedes usar cualquier modelo con el emulador para generar predicciones. También puedes usar un modelo del Vertex AI Model Garden o un modelo implementado en tu extremo de Vertex AI. Como el emulador no se conecta a Vertex AI, el emulador no puede verificar el modelo ni su esquema para ninguno de los modelos usados desde el Model Garden de Vertex AI o implementado en Vertex AI en los extremos.
De forma predeterminada, cuando usas una función de predicción con el emulador, la función produce un valor aleatorio basado en las entradas del modelo proporcionadas y el esquema de salida del modelo. Puedes usar una función de devolución de llamada para modificar la entrada y salida del modelo, y generar resultados de predicción según comportamientos específicos.
Antes de comenzar
Instala el emulador de Spanner
Puedes instalar el emulador de forma local. o configúralo con el repositorio de GitHub.
Seleccionar un modelo
Cuando usas la función ML.PREDICT
(para GoogleSQL) o ML_PREDICT_ROW
(para PostgreSQL), debes especificar la ubicación del modelo de AA. Puedes usar cualquier modelo entrenado. Si seleccionas un modelo
que se ejecutan en Vertex AI Model Garden o un modelo que
implementados en tu extremo de Vertex AI
Debes proporcionar los valores input
y output
para estos modelos.
Para obtener más información sobre la integración de Vertex AI de Spanner, consulta ¿Cómo funciona la integración de Vertex AI de Spanner?
Genere predicciones
Puedes usar el emulador para generar predicciones con la Funciones de predicción de AA de Spanner.
Comportamiento predeterminado
Puedes usar cualquier modelo implementado en un extremo con el emulador de Spanner para generar predicciones. En el siguiente ejemplo, se usa un modelo llamado
FraudDetection
para generar un resultado.
GoogleSQL
Para obtener más información sobre cómo usar la función ML.PREDICT
para generar predicciones, consulta Cómo generar predicciones de AA con SQL.
Registra el modelo
Antes de poder usar un modelo con la función ML.PREDICT, debes registrarlo con la sentencia CREATE MODEL y proporcionar los valores input
y output
:
CREATE MODEL FraudDetection
INPUT (Amount INT64, Name STRING(MAX))
OUTPUT (Outcome BOOL)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID'
);
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud en el que se encuentra el modeloREGION_ID
: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo,us-central1
ENDPOINT_ID
: Es el ID del extremo del modelo.
Ejecuta la predicción
Usa la función GoogleSQL ML.PREDICT
para generar tu predicción.
SELECT Outcome
FROM ML.PREDICT(
MODEL FraudDetection,
(SELECT 1000 AS Amount, "John Smith" AS Name))
El resultado esperado de esta consulta es TRUE
.
PostgreSQL
Para obtener más información sobre cómo usar la función spanner.ML_PREDICT_ROW
para generar predicciones, consulta Cómo generar predicciones de AA con SQL.
Ejecuta la predicción
Usa la función spanner.ML_PREDICT_ROW
de PostgreSQL para generar tu predicción.
SELECT (spanner.ml_predict_row(
'projects/`MODEL_ID`/locations/`REGION_ID`/endpoints/`ENDPOINT_ID`',
'{"instances": [{"Amount": "1000", "Name": "John Smith"}]}'
)->'predictions'->0->'Outcome')::boolean
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud en el que se encuentra el modeloREGION_ID
: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo,us-central1
ENDPOINT_ID
: Es el ID del extremo del modelo.
El resultado esperado de esta consulta es TRUE
.
Devolución de llamada personalizada
Puedes usar una función de devolución de llamada personalizada para implementar los comportamientos seleccionados del modelo.
y transformar entradas específicas
de modelos en salidas. En el siguiente ejemplo, se usa el modelo gemini-pro
de Vertex AI Model Garden y el emulador de Spanner para generar predicciones con una devolución de llamada personalizada.
Cuando usas una devolución de llamada personalizada para un modelo, debes crear una bifurcación del repositorio del emulador de Spanner y, luego, compilarlo e implementarlo. Para obtener más información compilar e implementar el emulador de Spanner, consulta el Guía de inicio rápido del emulador de Spanner.
GoogleSQL
Registra el modelo
Antes de poder usar un modelo con el función ML.PREDICT, debes registrar el modelo con el Declaración CREATE MODEL:
CREATE MODEL GeminiPro
INPUT (prompt STRING(MAX))
OUTPUT (content STRING(MAX))
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-pro',
default_batch_size = 1
);
Como el emulador no se conecta a Vertex AI,
debes proporcionar los valores input
y output
.
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud en el que se encuentra el modeloREGION_ID
: Es el ID de la región de Google Cloud. en la que se encuentra el modelo, por ejemplo,us-central1
Callback
Usa una devolución de llamada para agregar lógica personalizada al modelo GeminiPro
.
absl::Status ModelEvaluator::Predict(
const googlesql::Model* model,
const CaseInsensitiveStringMap<const ModelColumn>& model_inputs,
CaseInsensitiveStringMap<ModelColumn>& model_outputs) {
// Custom logic for GeminiPro.
if (model->Name() == "GeminiPro") {
RET_CHECK(model_inputs.contains("prompt"));
RET_CHECK(model_inputs.find("prompt")->second.value->type()->IsString());
RET_CHECK(model_outputs.contains("content"));
std::string content;
// Process prompts used in tests.
int64_t number;
static LazyRE2 is_prime_prompt = {R"(Is (\d+) a prime number\?)"};
if (RE2::FullMatch(
model_inputs.find("prompt")->second.value->string_value(),
*is_prime_prompt, &number)) {
content = IsPrime(number) ? "Yes" : "No";
} else {
// Default response.
content = "Sorry, I don't understand";
}
*model_outputs["content"].value = googlesql::values::String(content);
return absl::OkStatus();
}
// Custom model prediction logic can be added here.
return DefaultPredict(model, model_inputs, model_outputs);
}
Ejecuta la predicción
Usa la función GoogleSQL ML.PREDICT
para generar tu predicción.
SELECT content
FROM ML.PREDICT(MODEL GeminiPro, (SELECT "Is 7 a prime number?" AS prompt))
El resultado esperado de esta consulta es "YES"
.
PostgreSQL
Usa la función de PostgreSQL spanner.ML_PREDICT_ROW
para generar
la predicción.
Devolución de llamada
Usa una devolución de llamada para agregar lógica personalizada al modelo GeminiPro
.
absl::Status ModelEvaluator::PgPredict(
absl::string_view endpoint, const googlesql::JSONValueConstRef& instance,
const googlesql::JSONValueConstRef& parameters,
lesql::JSONValueRef prediction) {
if (endpoint.ends_with("publishers/google/models/gemini-pro")) {
RET_CHECK(instance.IsObject());
RET_CHECK(instance.HasMember("prompt"));
std::string content;
// Process prompts used in tests.
int64_t number;
static LazyRE2 is_prime_prompt = {R"(Is (\d+) a prime number\?)"};
if (RE2::FullMatch(instance.GetMember("prompt").GetString(),
*is_prime_prompt, &number)) {
content = IsPrime(number) ? "Yes" : "No";
} else {
// Default response.
content = "Sorry, I don't understand";
}
prediction.SetToEmptyObject();
prediction.GetMember("content").SetString(content);
return absl::OkStatus();
}
// Custom model prediction logic can be added here.
return DefaultPgPredict(endpoint, instance, parameters, prediction);
}
Ejecuta la predicción
SELECT (spanner.ml_predict_row(
'projects/`PROJECT_ID`/locations/`REGION_ID`/publishers/google/models/gemini-pro',
'{"instances": [{"prompt": "Is 7 a prime number?"}]}'
)->'predictions'->0->'content')::text
Reemplaza lo siguiente:
PROJECT_ID
: El ID del proyecto de Google Cloud en el que se encuentra el modeloREGION_ID
: Es el ID de la región de Google Cloud a la que pertenece el modelo. ubicados en, por ejemplo,us-central1
El resultado esperado de esta consulta es "YES"
.