如何使用 C# 和 curl 调用带有 Api 密钥的 Google Vertex AI 端点

问题描述 投票:0回答:1

从 c# 程序我想调用我的 vertex ai 端点 使用 api key 进行预测(通过 “Google Cloud”/Credentials/API Keys“ ))。我给了 api 密钥访问 Vertex AI 和作为测试其他一切。

用 curl 或 c# 调用它,我收到错误消息,该服务需要“OAuth 2 访问令牌”或其他东西。

卷曲: 卷曲-X POST -H "apikey=..mykey..." -H "Content-Type: application/json" https://.....googleapis.com/v1/projects/[PROJECT_ID]/locations/europe-west4/端点/[ENDPOINT_ID]:预测 -d @image.json

错误: “错误”: { “代码”:401, “消息”:“请求缺少必需的身份验证凭据。需要 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据。... }

我的问题: 有没有办法使用 Apikey 对顶点 ai 进行身份验证?

c# authentication curl api-key google-cloud-vertex-ai
1个回答
0
投票

我看到这有点老了,但我遇到了同样的问题,一周后就解决了。

步骤如下

在 c# 中使用此代码

using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json;

class Program
{
    static async Task Main(string[] args)
    {
        // Define the endpoint URL
        var endpointUrl = $"https://{location}-aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/{endpoint_id}:predict";

        // Read the image file as bytes
        var imageData = File.ReadAllBytes(filename);

        // Convert the image data to base64
        var imageBase64 = Convert.ToBase64String(imageData);

        // Define the request body
        var requestBody = new
        {
            instances = new[]
            {
                new {
                    content = imageBase64
                }
            }
        };

        // Serialize the request body to JSON
        var requestBodyJson = JsonConvert.SerializeObject(requestBody);

        // Create an HTTP client and request message
        using var client = new HttpClient();
        using var request = new HttpRequestMessage(HttpMethod.Post, endpointUrl);
        request.Content = new StringContent(requestBodyJson, System.Text.Encoding.UTF8, "application/json");

        // Set the authentication header
        request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_ACCESS_TOKEN");

        // Send the request and get the response
        using var response = await client.SendAsync(request);
        var responseBodyJson = await response.Content.ReadAsStringAsync();

        // Deserialize the response body from JSON
        dynamic responseBody = JsonConvert.DeserializeObject(responseBodyJson);

        // Process the response
        // ...
    }
}

对我来说,邮件问题是 YOUR_ACCESS_TOKEN,它不是 API 密钥。

o 获取用于调用 Vertex AI 端点的访问令牌,您需要使用具有调用端点所需权限的 Google Cloud 凭据进行身份验证。

以下是使用 Google Cloud SDK 获取访问令牌的方法:

按照此处的说明安装 Google Cloud SDK:https://cloud.google.com/sdk/install.

打开终端或命令提示符并运行以下命令以使用您的 Google Cloud 凭据进行身份验证:

gcloud auth application-default login

按照提示登录您的谷歌云账号并授予谷歌云SDK权限

通过身份验证后,您可以通过运行以下命令获取访问令牌:

gcloud auth application-default print-access-token

这将输出一个访问令牌,您可以使用它来验证您对 Vertex AI 端点的请求。

在我之前提供的示例代码片段中,将 YOUR_ACCESS_TOKEN 替换为您使用上述步骤获得的访问令牌。

应该可以解决

© www.soinside.com 2019 - 2024. All rights reserved.