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

Cloud Function调用Vertex AI生成式Prompt授权失败求助

解决Cloud Function调用Vertex AI的授权问题

你的核心问题在于Cloud Function环境下不能直接加载本地服务账号文件,同时代码存在库导入冲突,以下是具体修复方案:

问题分析

  1. Cloud Function运行时会自动提供默认应用凭据,无需手动读取service-account-file.json——本地加载文件的方式在部署后会找不到文件路径,直接导致授权失败。
  2. 代码中同时导入google.auth.transport.requests和requests并重命名为req,容易引发命名混淆,干扰请求逻辑正常执行。

修复后的代码

import os
from google.auth.transport.requests import Request
from google.oauth2 import id_token
import requests as http_requests  # 重命名避免与谷歌auth库的requests冲突

def vertex_ai_request(request):
    # 定义常量
    API_ENDPOINT = "us-central1-aiplatform.googleapis.com"
    PROJECT_ID = "XXXX"
    MODEL_ID = "text-bison@001"
    URL = f"https://{API_ENDPOINT}/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/{MODEL_ID}:predict"

    # 利用Cloud Function默认凭据获取身份令牌
    credentials = id_token.fetch_id_token(Request(), URL)

    # 请求头配置
    headers = {
        "Authorization": f"Bearer {credentials}",
        "Content-Type": "application/json"
    }

    # 请求体内容
    payload = {
        "instances": [
            {
                "content": "Your content here ..."
            }
        ],
        "parameters": {
            "candidateCount": 1,
            "maxOutputTokens": 317,
            "temperature": 0.2,
            "topP": 0.8,
            "topK": 40
        }
    }

    # 发送POST请求
    response = http_requests.post(URL, headers=headers, json=payload)
    print(response.json())

    return 'Request completed', 200

关键配置步骤

  1. 权限配置:给Cloud Function使用的默认服务账号(格式为[你的项目ID]@appspot.gserviceaccount.com)添加Vertex AI Predictor角色:
    • 进入Google Cloud控制台的IAM页面
    • 找到对应服务账号,点击编辑按钮,添加Vertex AI > Vertex AI Predictor角色
  2. 部署注意事项:部署Cloud Function时无需上传服务账号JSON文件,确保运行环境的服务账号已配置好上述权限即可。

额外优化建议

如果想简化调用逻辑,可以直接使用Vertex AI Python SDK,无需手动构造HTTP请求:

from google.cloud import aiplatform

def vertex_ai_request(request):
    aiplatform.init(project="XXXX", location="us-central1")
    model = aiplatform.Model("text-bison@001")
    response = model.predict(
        instances=[{"content": "Your content here ..."}],
        parameters={
            "candidateCount": 1,
            "maxOutputTokens": 317,
            "temperature": 0.2,
            "topP": 0.8,
            "topK": 40
        }
    )
    print(response.predictions)
    return 'Request completed', 200

使用SDK时同样依赖Cloud Function的默认凭据,只需确保服务账号拥有对应权限即可。

内容的提问来源于stack exchange,提问作者Sandy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:52:10