Я пытаюсь сгенерировать контент JSON с помощью Vertex AI SDK (взаимодействующего с моделями Gemini), куда я передаю структурированный вывод («ResponseSchema») о том, как следует создавать ответ JSON.
Структурированный вывод:
Я пытаюсь сгенерировать контент JSON с помощью Vertex AI SDK (взаимодействующего с моделями Gemini), куда я передаю структурированный вывод («ResponseSchema») о том, как следует создавать ответ JSON. Структурированный вывод: [code]"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]"[/code] Код C#: [code]{ 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; } } [/code] Когда я выполняю этот код, он выдает следующее исключение:
Google.Protobuf.InvalidProtocolBufferException: 'Сообщение протокола содержал тег с недопустимым типом провода.'
Я не вижу в Интернете примеров того, как правильно указать ResponseSchema в C#. Есть ли у кого-нибудь какие-нибудь рекомендации для меня?