When working with OpenAI's API responses in Java, it's often useful to request structured output instead of plain text. This enables better parsing, validation, and downstream processing. The OpenAI Java SDK supports this through JSON Schema-based formats.
Reference: StructuredOutputsExample.java (GitHub)
https://github.com/openai/openai-java/blob/main/openai-java-example/src/main/java/com/openai/example/StructuredOutputsExample.java
ResponseFormatTextJsonSchemaConfig.Schema schema = ResponseFormatTextJsonSchemaConfig.Schema.builder() .putAdditionalProperty("type", JsonValue.from("object")) .putAdditionalProperty( "properties", JsonValue.from(Map.of("employees", Map.of("type", "array", "items", Map.of("type", "string"))))) .putAdditionalProperty("required", JsonValue.from(List.of("employees"))) .putAdditionalProperty("additionalProperties", JsonValue.from(false)) .build(); createParams = createParams.toBuilder() // .instructions(assistant.instructions()) .text(ResponseTextConfig.builder() .format(ResponseFormatTextJsonSchemaConfig.builder() .name("employee-list") .schema(schema) .build()) .build()) .build(); openAiClient.getClient().responses().create(createParams).output().stream() .flatMap(item -> item.message().stream()) .flatMap(message -> message.content().stream()) .flatMap(content -> content.outputText().stream()) .forEach(outputText -> System.err.println(outputText.text()));
Convert Assistant defined response format.
Assistant assistant = openAiClient.getClient().beta() .assistants() .retrieve(AssistantRetrieveParams.builder() .assistantId(openAiAssistantId) .build()); ResponseFormatJsonSchema.JsonSchema jsonSchema = assistant.responseFormat().get() .asResponseFormatJsonSchema() .jsonSchema(); ResponseFormatTextJsonSchemaConfig.Schema schema = ResponseFormatTextJsonSchemaConfig.Schema.builder() .additionalProperties(jsonSchema.schema().get()._additionalProperties()) .build(); ResponseCreateParams createParams = ResponseCreateParams.builder() .input(input) .model(model) .text(ResponseTextConfig.builder() .format(ResponseFormatTextJsonSchemaConfig.builder() .name(jsonSchema.name()) .schema(schema) .build()) .build()) .build();
Niciun comentariu:
Trimiteți un comentariu