Невозможно подключиться к Gemini/Vertex AI (C#/.Net)

Я новичок в Gemini/Vertex AI и не могу подключиться. Я попробовал два разных предложения кода, предложенные в чате Gemini (см. ниже). Я совершенно уверен, что следующая информация, использованная в URL-адресе, верна (опечаток точно нет):

API-ключ идентификатор проекта

Я менее уверен в местоположении: оно не отображается в консоли, а в чате Gemini говорится, что для моего проекта нет точного местоположения. По предложению бота я запросил список через Cloud SDK для идентификатора моего проекта и попробовал несколько мест из полученного списка. Однако местоположение, похоже, не влияет на ответы.

Для проекта включены API-интерфейсы Gemini и Vertex AI. У меня также есть пользовательские роли «владелец» и «пользователь Vertex AI», определенные в консоли Cloud, и нет никаких ограничений на ключ API. Также в переменную среды GOOGLE_APPLICATION_CREDENTIALS была установлена ​​соответствующая информация.

По словам чат-бота Gemini, сгенерированный URL должен сработать «с большой вероятностью». Насколько я вижу, условия, перечисленные ботом, тоже выполняются, но явно что-то не так. Любая помощь очень ценится!

Вот две версии кода (хотя обе используют один и тот же URL-адрес, ошибка HTTP отличается):

// Следующие переменные одинаковы для обоих: ===================================

    private static readonly string projectId = "xxxx";
    private static readonly string location = "europe-west1"; // one of several tried
    private static readonly string geminiApiKey = "xxxx";
    private static readonly string url = $"https://{location}-aiplatform.googleapis.com/v1/projects/{projectId}/locations/{location}/publishers/google/models/gemini-pro:generateContent";

//============================================== =========================================

// попытка 1 - результат HTTP 401 "неавторизованный" ==================================

    var content = new StringContent(CreateTextRequestBody(text), Encoding.UTF8, "application/json");
    var client = new HttpClient();

    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", geminiApiKey);

    var response = await client.PostAsync(url, content);

    if (response.IsSuccessStatusCode)
    {
          string responseContent = await response.Content.ReadAsStringAsync();
          // Parse the JSON response to get the generated text
          return responseContent;
     }
     else
     {
          throw new Exception($"Gemini request error: {response.StatusCode} {response.ReasonPhrase}");
     }

//============================================== =========================================

// попытка 2 — результат HTTP 404 «Неверный ответ gRPC». ===================================

    var instance = new Google.Protobuf.WellKnownTypes.Value
    {
         StructValue = new Struct
         {
             Fields =
             {
                 { "input_text", Google.Protobuf.WellKnownTypes.Value.ForString("Hello, world!") }
             }
         }
    };

    // Convert instance to a list of values
    var instances = new List<Google.Protobuf.WellKnownTypes.Value> { instance };

    // Optional: Additional parameters for prediction
    var parameters = new Google.Protobuf.WellKnownTypes.Value
    {
        StructValue = new Struct
        {
            Fields =
            {
                { "param_key", Google.Protobuf.WellKnownTypes.Value.ForString("param_value") }
            }
        }
    };

    try
    {
        // Making the predict request
        PredictResponse response = predictionClient.Predict(url, instances, parameters);

        // Print the response
        foreach (var prediction in response.Predictions)
        {
            Debug.WriteLine($"Prediction: {prediction}");
        }
    }
    catch (Grpc.Core.RpcException e)
    {
        Debug.WriteLine($"RPC failed: {e.Status}");
    }

//============================================== =========================================

Опять же, любая помощь будет полезна, я понятия не имею, что еще попробовать.

«Плохой ответ gRPC». Не указывайте Host в заголовке запроса. Попробуйте добавить необходимые заголовки. Learn.microsoft.com/en-us/answers/questions/1273698/…

Jason Lou 23.05.2024 20:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
152
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Существует два способа подключения (вызова) API модели Gemini: Google AI или GCP Vertex AI. Пожалуйста, смотрите это обсуждение, чтобы узнать, когда и какие методы использовать, и их разницу. Google AI использует ключ API в качестве учетных данных для аутентификации, а Vertex AI использует учетную запись службы GCP. Ваше описание и код, похоже, смешивают два подхода (вам не нужен ключ API при вызове конечной точки Vertex AI).

Поскольку у вас настроен проект GCP, вы можете использовать клиентские библиотеки Vertex AI C# для подключения к Gemini API. Вот подробная инструкция. вкратце; доктор:

  • Установите клиентскую библиотеку
  • Настройка аутентификации
  • Используйте библиотеку для использования моделей Gemini.

А вот пример фрагмента кода:

var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            GenerationConfig = new GenerationConfig
            {
                Temperature = 0.4f,
                TopP = 1,
                TopK = 32,
                MaxOutputTokens = 2048
            },
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "What's in this photo?" },
                        new Part { FileData = new() { MimeType = "image/png", FileUri = "gs://generativeai-downloads/images/scones.jpg" } }
                    }
                }
            }
        };

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

Vertex AI Gemini API также представлен как REST API, как описано здесь. Однако рекомендуется сначала использовать Клиентскую библиотеку.

Другие вопросы по теме