You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Go中使用aiplatformpb GenerateContentRequest遇404错误如何解决?

Go调用Gemini Pro出现404错误的解决方法

使用Go 1.22.1和aiplatform 1.64包调用Gemini Pro时,遇到以下错误:

rpc error: code = Unimplemented desc = unexpected HTTP status code received from server: 404 (Not Found); transport: received unexpected content-type "text/html; charset=UTF-8"

问题代码(Go)

func googleGemini() string {
    ctx := context.Background()

    client, err := aiplatform.NewPredictionClient(ctx)
    if err != nil {
        log.Printf("[googleGemini] ERROR! %v", err)
        return ""
    }

    var parts []*aiplatformpb.Part
    parts = append(parts, &aiplatformpb.Part{
        Data: &aiplatformpb.Part_Text{
            Text: "Hello!",
        },
    })

    content := &aiplatformpb.Content{
        Role:  "user",
        Parts: parts,
    }
    // endpoint := "us-central1-aiplatform.googleapis.com"
    model := "gemini-1.0-pro-001"
    location := "us-central1"
    contentRequest := aiplatformpb.GenerateContentRequest{
        Model: fmt.Sprintf(
            "projects/%s/locations/%s/publishers/google/models/%s",
            PROJECT_ID(), location, model),
        Contents: []*aiplatformpb.Content{content},
    }

    resp, err := client.GenerateContent(ctx, &contentRequest)
    if err != nil {
        log.Printf("[googleGemini] ERROR! %v", err)
        return ""
    }

    return resp.Candidates[0].Content.Parts[0].GetText()
}

可正常运行的curl命令

cat << EOF > request.json
{
    "contents": [
        {
            "role": "user",
            "parts": [
                {
                    "text": "Hello!"
                }
            ]
        }
    ]
}
EOF

API_ENDPOINT="us-central1-aiplatform.googleapis.com"
PROJECT_ID="$(gcloud config get project)"
MODEL_ID="gemini-1.0-pro-001"
LOCATION_ID="us-central1"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${API_ENDPOINT}/v1/projects/${PROJECT_ID}/locations/${LOCATION_ID}/publishers/google/models/${MODEL_ID}:streamGenerateContent" -d '@request.json'

错误原因及修正

核心问题:未指定区域Endpoint

aiplatform.NewPredictionClient默认使用全局Endpoint(aiplatform.googleapis.com),但你的Gemini模型部署在us-central1区域,必须显式指定对应区域的Endpoint,否则请求会发送到错误地址导致404。

修正后的代码

func googleGemini() string {
    ctx := context.Background()

    // 显式配置区域Endpoint
    endpoint := "us-central1-aiplatform.googleapis.com:443"
    client, err := aiplatform.NewPredictionClient(ctx, option.WithEndpoint(endpoint))
    if err != nil {
        log.Printf("[googleGemini] ERROR! %v", err)
        return ""
    }
    defer client.Close() // 确保客户端资源释放

    var parts []*aiplatformpb.Part
    parts = append(parts, &aiplatformpb.Part{
        Data: &aiplatformpb.Part_Text{
            Text: "Hello!",
        },
    })

    content := &aiplatformpb.Content{
        Role:  "user",
        Parts: parts,
    }
    model := "gemini-1.0-pro-001"
    location := "us-central1"
    contentRequest := aiplatformpb.GenerateContentRequest{
        Model: fmt.Sprintf(
            "projects/%s/locations/%s/publishers/google/models/%s",
            PROJECT_ID(), location, model),
        Contents: []*aiplatformpb.Content{content},
    }

    resp, err := client.GenerateContent(ctx, &contentRequest)
    if err != nil {
        log.Printf("[googleGemini] ERROR! %v", err)
        return ""
    }

    return resp.Candidates[0].Content.Parts[0].GetText()
}

关键修改点

  • 添加option.WithEndpoint(endpoint)参数创建客户端,指定us-central1区域的Endpoint
  • 增加defer client.Close()语句,避免资源泄漏

内容的提问来源于stack exchange,提问作者Neil C. Obremski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:35:02