Указание ResponseSchema при создании контента с помощью Vertex AI SDK (Gemini)C#

Место общения программистов C#
Ответить
Anonymous
 Указание ResponseSchema при создании контента с помощью Vertex AI SDK (Gemini)

Сообщение Anonymous »

Я пытаюсь сгенерировать контент JSON с помощью Vertex AI SDK (взаимодействующего с моделями Gemini), куда я передаю структурированный вывод («ResponseSchema») о том, как следует создавать ответ JSON.
Структурированный вывод:

Код: Выделить всё

"Comp = {'rank': int, 'score': int, 'propertyId': int, 'address': str, 'proximity': str, 'price': str, 'livingArea': str, 'lotSize': str, 'yearBuilt': int, 'bedrooms': int, 'bathrooms': int, 'notes': str}\r\nReturn: list[Comp]"
Код C#:

Код: Выделить всё

{
var prompts = args.Prompts;
var systemPrompts = BuildSystemPrompts(args);

try
{
var predictionServiceClient = new PredictionServiceClientBuilder
{
Endpoint = $"{GeminiLocation}-aiplatform.googleapis.com",
ChannelCredentials = GetGoogleCredentials()
}.Build();
GenerateContentRequest request = new()
{
Model = $"projects/{GeminiProjectId}/locations/{GeminiLocation}/publishers/google/models/{GeminiModelId}",
Contents = { BuildGeminiPromptContents(prompts) },
SystemInstruction = new Content()
{
Parts = { systemPrompts.Select(prompt => new Part { Text = prompt }) }
},
GenerationConfig = new GenerationConfig
{
CandidateCount = 1,
Temperature = Temperature,
MaxOutputTokens = args.MaxOutputTokens ?? MaxOutputTokens,
TopP = TopP,
Seed = Seed,
ResponseMimeType = args.Output == GenAiOutput.Json ? "application/json" : "text/plain",
ResponseSchema = args.OutputSchema != null ?
OpenApiSchema.Parser.ParseFrom(BinaryData.FromBytes(Encoding.UTF8.GetBytes(args.OutputSchema))) :
null
}
};
var response = await predictionServiceClient.GenerateContentAsync(request);
var message = response?.Candidates?.FirstOrDefault()?.Content?.Parts?.FirstOrDefault()?.Text ?? "No Response";

Logging.Model.Instance.LogInformation(LoggingCategory, null, false, $"Gemini Request: Prompts: {string.Join(", ", args.Prompts)}, Message: {message}");
return new GenAiResponse { Message = message };
}
catch (Exception ex)
{
Logging.Model.Instance.LogError(LoggingCategory, ex);
return null;
}
}
Когда я выполняю этот код, он выдает следующее исключение:

Google.Protobuf.InvalidProtocolBufferException: 'Сообщение протокола содержал тег с недопустимым типом провода.'

Я не вижу в Интернете примеров того, как правильно указать ResponseSchema в C#. Есть ли у кого-нибудь какие-нибудь рекомендации для меня?

Подробнее здесь: https://stackoverflow.com/questions/793 ... sdk-gemini
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»