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.

When the response is already clean JSON, the result is a plain SUCCESS carrying the deserialized object, not a rewritten output: a rewrite would prevent any guardrail later in the chain from reprompting.

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

      public JsonExtractorOutputGuardrail(Class<T> outputClass)
      Creates a guardrail that checks the LLM response can be deserialized into the given class, using a plain Jackson ObjectMapper with its default settings.
    • JsonExtractorOutputGuardrail

      public JsonExtractorOutputGuardrail(Type outputType)
      Creates a guardrail that checks the LLM response can be deserialized into the given type, using a plain Jackson ObjectMapper with its default settings. Use it for generic types such as List<Foo>, obtained for example with new TypeReference<List<Foo>>() {}.getType().
  • 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 a plain Jackson 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