模型可能不总是返回格式完美的 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

AI项目博客






