Heim > Backend-Entwicklung > Golang > aiplatformb.PredictRequest.Instances erfordert den Typ *structpb.Value (GCP Golang-Client-Bibliothek; aiplatform)

aiplatformb.PredictRequest.Instances erfordert den Typ *structpb.Value (GCP Golang-Client-Bibliothek; aiplatform)

王林
Freigeben: 2024-02-10 15:00:09
nach vorne
531 Leute haben es durchsucht

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

php-Editor Apple AI Platform B ist eine leistungsstarke Vorhersageanforderungsinstanz, die Parameter vom Typ structpb.Value erfordert. Dies ist eine Go-Sprach-Client-Bibliothek für GCP (Google Cloud Platform), die speziell für aiplatform entwickelt wurde. Es bietet Benutzern praktische Vorhersagefunktionen, um während des Entwicklungsprozesses schnell Modellvorhersagen zu treffen. Mithilfe dieser Bibliothek können Benutzer KI-Technologie problemlos in ihre Anwendungen integrieren und genaue und effiziente Vorhersageergebnisse erhalten.

Frageninhalt

Ich versuche, über eine Golang-Webanwendung (Webserver/Anwendung, die auf Cloud Run + Build läuft) auf meinen Vertex AI-Endpunkt zuzugreifen. Die Webanwendung verfügt über ein Formular, in dem ich Details übermittle. Meine Frage lautet: Wie kann ich die von der Webanwendung erhaltene Struktur abrufen und in den Typ konvertieren, der im Feld „Instanzen“ der Struktur aiplatformb.PredictRequest akzeptiert wird?

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{},
Nach dem Login kopieren

Ich habe versucht, mit Postman extern auf diesen Endpunkt zuzugreifen, und die folgende Anfrage bestätigt, dass der Endpunkt betriebsbereit ist. Bei diesen Werten handelt es sich um die von den Details übermittelten Werte

{
        "instances": [
            [
                29823,
                43.5,
                1
            ]
        ]
    }
Nach dem Login kopieren

Workaround

Nach vielen Versuchen, die Client-Bibliothek zu verwenden und die Dokumentation zu konsultieren, erlaubt Ihnen die .Predict()-Methode [die auf einen Zeiger auf einen PredictionClient-Typ wirkt] nicht, das Schema des Vertex-AI-Modellendpunkts anzugeben. Die Lösung besteht also darin, die Anfrage über die Methode .RawPredict() zu senden, sodass die serialisierte JSON-Anfrage (structpb) nur funktioniert, wenn das von der Golang-GCP-Clientbibliothek implementierte Schema mit Ihrem bereitgestellten Modell übereinstimmt. Hier ist die GCP-Dokumentation für PredictionClient:

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

Die folgenden Bibliotheken sind zum Erstellen und Verwenden der RawPredict()-Methode erforderlich:

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"
)
Nach dem Login kopieren

Das ist der 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)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonaiplatformb.PredictRequest.Instances erfordert den Typ *structpb.Value (GCP Golang-Client-Bibliothek; aiplatform). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage