‹ 博客列表

Spring AI Alibaba 31|Structured Output 结构化输出 · 错误处理

模型可能不总是返回格式完美的 JSON。以下是处理潜在问题的策略: Try-Catch 模式 ReactAgent agent = ReactAgent.builder() .name(“data_extractor”) .model(ch

模型可能不总是返回格式完美的 JSON。以下是处理潜在问题的策略:

Try-Catch 模式

ReactAgent agent = ReactAgent.builder()
  .name("data_extractor")
  .model(chatModel)
  .outputType(DataOutput.class)
  .build();

try {
  AssistantMessage result = agent.call("提取数据");
  ObjectMapper mapper = new ObjectMapper();
  DataOutput data = mapper.readValue(result.getText(), DataOutput.class);
  // 处理数据
} catch (JsonProcessingException e) {
  System.err.println("JSON解析失败: " + e.getMessage());
  System.err.println("原始输出: " + result.getText());
  // 回退处理
}

验证模式

public class ValidatedOutput {
  private String title;
  private Integer rating;

  public void validate() throws IllegalArgumentException {
      if (title == null || title.isEmpty()) {
          throw new IllegalArgumentException("标题不能为空");
      }
      if (rating != null && (rating < 1 || rating > 5)) {
          throw new IllegalArgumentException("评分必须在1-5之间");
      }
  }

  // Getter 和 Setter 方法...
}

AssistantMessage result = agent.call("生成评价");
ValidatedOutput output = mapper.readValue(result.getText(), ValidatedOutput.class);
output.validate();  // 如果无效则抛出异常

重试模式

int maxRetries = 3;
DataOutput data = null;

for (int i = 0; i < maxRetries; i++) {
  try {
      AssistantMessage result = agent.call("提取数据");
      data = mapper.readValue(result.getText(), DataOutput.class);
      break;  // 成功
  } catch (Exception e) {
      if (i == maxRetries - 1) {
          throw new RuntimeException("多次尝试后仍然失败", e);
      }
      System.out.println("第" + (i + 1) + "次尝试失败,重试中...");
  }
}

Spring AI Alibaba 专注于简单性和灵活性,允许开发者在显式 schema 字符串(最大控制)和 Java 类(类型安全)之间进行选择。

  • Agents – 了解 ReactAgent 功能
  • Models – 支持的聊天模型
  • Messages – 消息类型和处理

本文整理自 Spring AI Alibaba 官方文档《Structured Output 结构化输出》:https://java2ai.com/docs/frameworks/agent-framework/tutorials/structured-output

本文来自 https://aimock.cn/blog,站内重新编排。
内容仅供学习交流,转载请注明出处。