Я новичок в 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}");
}
//============================================== =========================================
Опять же, любая помощь будет полезна, я понятия не имею, что еще попробовать.
Существует два способа подключения (вызова) API модели Gemini: Google AI или GCP Vertex AI. Пожалуйста, смотрите это обсуждение, чтобы узнать, когда и какие методы использовать, и их разницу. Google AI использует ключ API в качестве учетных данных для аутентификации, а Vertex AI использует учетную запись службы GCP. Ваше описание и код, похоже, смешивают два подхода (вам не нужен ключ API при вызове конечной точки Vertex AI).
Поскольку у вас настроен проект GCP, вы можете использовать клиентские библиотеки Vertex AI C# для подключения к Gemini API. Вот подробная инструкция. вкратце; доктор:
А вот пример фрагмента кода:
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, как описано здесь. Однако рекомендуется сначала использовать Клиентскую библиотеку.
«Плохой ответ gRPC». Не указывайте Host в заголовке запроса. Попробуйте добавить необходимые заголовки. Learn.microsoft.com/en-us/answers/questions/1273698/…