Class JsonExtractorOutputGuardrail<T>

java.lang.Object
dev.langchain4j.guardrails.JsonExtractorOutputGuardrail<T>
Type Parameters:
T - The type of object that the class should deserialize from JSON
All Implemented Interfaces:
Guardrail<OutputGuardrailRequest, OutputGuardrailResult>, OutputGuardrail

public class JsonExtractorOutputGuardrail<T> extends Object implements OutputGuardrail
An OutputGuardrail that will check whether or not a response can be successfully deserialized to an object of type T from JSON

If deserialization fails, the LLM will be reprompted with getInvalidJsonReprompt(AiMessage, String), which defaults to DEFAULT_REPROMPT_PROMPT.

Deserialization uses a plain Jackson ObjectMapper with its default settings. A guardrail exists to reject output that does not fit the expected shape, so it deliberately does not use LangChain4j's own JSON codec, which is more forgiving: that codec reads private fields without setters, accepts enum constants case-insensitively, and parses dates an LLM has written in a field-wise form. Output this guardrail rejects should stay rejected.

One consequence is that this guardrail always uses Jackson 2, and is the one part of LangChain4j that the langchain4j-jackson3 opt-in does not switch over.

  • Field Details

    • DEFAULT_REPROMPT_MESSAGE

      public static final String DEFAULT_REPROMPT_MESSAGE
      The default message to use when reprompting
      See Also:
    • DEFAULT_REPROMPT_PROMPT

      public static final String DEFAULT_REPROMPT_PROMPT
      The default prompt to append to the LLM during a reprompt
      See Also:
  • Constructor Details

    • JsonExtractorOutputGuardrail

      @Deprecated(since="1.20.0", forRemoval=true) public JsonExtractorOutputGuardrail(com.fasterxml.jackson.databind.ObjectMapper objectMapper, Class<T> outputClass)
      Deprecated, for removal: This API element is subject to removal in a future version.
      use JsonExtractorOutputGuardrail(Class), which does not expose Jackson types in its signature. It parses with a default ObjectMapper, so pass one here only if you need a mapper configured differently.
    • JsonExtractorOutputGuardrail

      @Deprecated(since="1.20.0", forRemoval=true) public JsonExtractorOutputGuardrail(com.fasterxml.jackson.databind.ObjectMapper objectMapper, com.fasterxml.jackson.core.type.TypeReference<T> outputType)
      Deprecated, for removal: This API element is subject to removal in a future version.
      use JsonExtractorOutputGuardrail(Type), which does not expose Jackson types in its signature. Pass new TypeReference<Foo>() {}.getType() to migrate, and pass a mapper here only if you need one configured differently from the default.
    • JsonExtractorOutputGuardrail

      public JsonExtractorOutputGuardrail(Class<T> outputClass)
      Deserializes with a plain Jackson ObjectMapper, as this guardrail has always done.
    • JsonExtractorOutputGuardrail

      public JsonExtractorOutputGuardrail(Type outputType)
      Deserializes with a plain Jackson ObjectMapper, matching JsonExtractorOutputGuardrail(Class).
    • JsonExtractorOutputGuardrail

      @Deprecated(since="1.20.0", forRemoval=true) public JsonExtractorOutputGuardrail(com.fasterxml.jackson.core.type.TypeReference<T> outputType)
      Deprecated, for removal: This API element is subject to removal in a future version.
      use JsonExtractorOutputGuardrail(Type), which does not expose Jackson types - TypeReference lives in Jackson's core package, which moved in Jackson 3. Pass new TypeReference<Foo>() {}.getType() to migrate.
  • Method Details

    • validate

      public OutputGuardrailResult validate(AiMessage responseFromLLM)
      Description copied from interface: OutputGuardrail
      Validates the response from the LLM.
      Specified by:
      validate in interface OutputGuardrail
      Parameters:
      responseFromLLM - the response from the LLM
    • invokeInvalidJson

      protected OutputGuardrailResult invokeInvalidJson(AiMessage aiMessage, String json)
    • getInvalidJsonMessage

      protected String getInvalidJsonMessage(AiMessage aiMessage, String json)
      Generates a message indicating that the provided JSON is invalid.
      Parameters:
      aiMessage - the AI message associated with the invalid JSON. This parameter is not used.
      json - the JSON that failed validation. This parameter is not used.
      Returns:
      a default message indicating that the JSON is invalid.
    • getInvalidJsonReprompt

      protected String getInvalidJsonReprompt(AiMessage aiMessage, String json)
      Generates a reprompt message indicating that the provided JSON is invalid.

      This message is appended to the user message from the previous request.

      Parameters:
      aiMessage - the AI message associated with the invalid JSON. This parameter is not used.
      json - the JSON input that failed validation. This parameter is not used.
      Returns:
      a reprompt message indicating that the JSON is invalid.
    • deserialize

      protected Optional<JsonParsingUtils.ParsedJson<T>> deserialize(String llmResponse)
      Tries to deserialize the provided LLM response string into an object of type T using the configured ObjectMapper. If deserialization fails, an empty Optional is returned.
      Parameters:
      llmResponse - the JSON-formatted response string to be deserialized
      Returns:
      an Optional containing the deserialized object if successful, or an empty Optional if deserialization fails