Maison > développement back-end > Golang > aiplatformb.PredictRequest.Instances nécessite le type *structpb.Value (bibliothèque client GCP Golang ; aiplatform)

aiplatformb.PredictRequest.Instances nécessite le type *structpb.Value (bibliothèque client GCP Golang ; aiplatform)

王林
Libérer: 2024-02-10 15:00:09
avant
547 Les gens l'ont consulté

aiplatformb.PredictRequest.Instances 需要类型 *structpb.Value (GCP golang 客户端库;aiplatform)

éditeur php Apple AI Platform B est une puissante instance de requête de prédiction, qui nécessite des paramètres de type structpb.Value. Il s'agit d'une bibliothèque cliente du langage Go pour GCP (Google Cloud Platform), spécialement conçue pour aiplatform. Il fournit aux utilisateurs des fonctions de prédiction pratiques pour effectuer rapidement des prédictions de modèles pendant le processus de développement. En utilisant cette bibliothèque, les utilisateurs peuvent facilement intégrer la technologie IA dans leurs applications et obtenir des résultats de prédiction précis et efficaces.

Contenu de la question

J'essaie d'accéder à mon point de terminaison Vertex AI à partir d'une application Web Golang (serveur Web/application exécutée sur cloud run + build). L'application Web a un formulaire dans lequel je soumets des détails, ma question est la suivante : comment puis-je obtenir la structure reçue de l'application Web et la convertir au type accepté dans le champ Instances de la structure aiplatformb.PredictRequest ?

type Submission struct {
        MonthlyIncome                 int
        Age                           int
        Passport                      int
    }

    var Details = Submission{}


    Ctx := context.Background()
        C, err := aiplatform.NewPredictionClient(Ctx)
    
        if err != nil {
            log.Fatalf("Error 1: %v", err)
        }

        defer C.Close()

        reqs := &aiplatformpb.PredictRequest{
            Endpoint:  "{{my endpoint that is formatted correctly}",
            Instances: []*structpb.Value{},
Copier après la connexion

J'ai essayé d'accéder à ce point de terminaison en externe à l'aide de Postman et la demande ci-dessous confirme que le point de terminaison est opérationnel. Ces valeurs sont les valeurs soumises par les détails

{
        "instances": [
            [
                29823,
                43.5,
                1
            ]
        ]
    }
Copier après la connexion

Solution de contournement

Après de nombreuses tentatives d'utilisation de la bibliothèque client et de consultation de la documentation, la méthode .Predict() [agissant sur un pointeur vers un type PredictionClient] ne permet pas de spécifier le schéma du point de terminaison du modèle vertex AI. La solution consiste donc à envoyer la requête via la méthode .RawPredict(), de sorte que la requête JSON sérialisée (structpb) ne fonctionnera que si le schéma implémenté par la bibliothèque client golang GCP correspond à votre modèle déployé. Voici la documentation GCP pour PredictionClient :

https://cloud.google.com/go/docs/reference/cloud.google.com/go/aiplatform/1.0.0/apiv1#cloud_google_com_go_aiplatform_apiv1_PredictionClient

Voici les bibliothèques requises pour former et utiliser la méthode RawPredict() :

import (
    "context"
    "fmt"
    "log"
    "reflect"
    "strconv"

    aiplatform "cloud.google.com/go/aiplatform/apiv1"
    "cloud.google.com/go/aiplatform/apiv1/aiplatformpb"
    "google.golang.org/api/option"
    "google.golang.org/genproto/googleapis/api/httpbody"
)
Copier après la connexion

Voici le code :

// Get the form values from the web applicaiton
    income, _ := strconv.Atoi(r.FormValue("MonthlyIncome")) 
    age, _ := strconv.Atoi(r.FormValue("Age"))
    passport, _ := strconv.Atoi(r.FormValue("Passport"))


//create our struct from the form values

    Details = Submission{
        MonthlyIncome:                 income,
        Age:                           age,
        Passport:                      passport,
    }

    v := reflect.ValueOf(Details)
    body = ""


    for i := 0; i < v.NumField(); i++ {

        body = body + fmt.Sprintf("%v", v.Field(i).Interface()) + ","

    }

    if last := len(body) - 1; last >= 0 && body[last] == ',' {
        body = body[:last]
    }

    Requestb = pre + body + post
    log.Println("The request string was:", Requestb)

// structure the body of the raw request
    Raw := &httpbody.HttpBody{}
    Raw.Data = []byte(Requestb)

// indentify the post request using the raw body and the endpoint
    reqs := &aiplatformpb.RawPredictRequest{
// Note  GCP Project ID, Region, and endpoint ID
        Endpoint: "projects/<PROJECT-HERE>/locations/<REGDION-HERE>/endpoints/<ENDPOINT-ID-HERE>",
        HttpBody: Raw,
    }


// CTX gets the credentials of the application service account - NOTE THE REGION
    Ctx := context.Background()
    C, err := aiplatform.NewPredictionClient(Ctx, option.WithEndpoint("<REGION-HERE>-aiplatform.googleapis.com:443"))

    if err != nil {
        log.Println("Error 1, connectrion:", err)
    }
    defer C.Close()

// gets the response using the credentials of the application service account
    resp, err := C.RawPredict(Ctx, reqs)
    if err != nil {
        log.Fatalf("Error 2, response: %v", err)
    }
    log.Println(resp)


    RespString := fmt.Sprintf("%+v", resp)
    log.Println("The Response String was:", resp)
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal