é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.
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{},
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 ] ] }
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 :
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" )
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)
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!