Spring AI(四)机构化输出
构造实体
@Data
public class SiYaoSu {@JsonProperty("appearance")@JsonPropertyDescription("外观")private String appearance;@JsonProperty("occupation")@JsonPropertyDescription("性格")private String occupation;@JsonProperty("position")@JsonPropertyDescription("职位")private String position;@JsonProperty("action")@JsonPropertyDescription("行为逻辑")private String action;
}
ChatClient的方式实现架构化输出
@GetMapping("/structured/output")public SiYaoSu structuredOutput(String msg, HttpServletResponse response){return chatClient.prompt().user(u -> u.text(msg).media(MimeTypeUtils.IMAGE_PNG, new FileSystemResource("C:"+ File.separator+"sys.png"))).call().entity(SiYaoSu.class);}
ChatModel的方式
@GetMapping("/structured/output1")public SiYaoSu structuredOutput1(String msg, HttpServletResponse response){//格式换输出转换BeanBeanOutputConverter<SiYaoSu> beanOutputConverter = new BeanOutputConverter<>(SiYaoSu.class);
// //图片Media imageMedia = Media.builder().mimeType(MimeTypeUtils.IMAGE_PNG).data(new FileSystemResource("C:"+ File.separator+"sys.png")).build();//构造发送消息UserMessage userMessage = UserMessage.builder().media(imageMedia).text(msg+" "+beanOutputConverter.getFormat()).build();//构造提示词Prompt prompt = Prompt.builder().messages(userMessage).build();//构造请求Generation generation = chatModel.call(prompt).getResult();//获取结果String result = generation.getOutput().getText() ;//结构化转化return beanOutputConverter.convert(result);}
请求示例