1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| import com.fasterxml.jackson.annotation.JsonPropertyOrder; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.converter.ListOutputConverter; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.Map;
@Slf4j @RestController @RequestMapping("/structuredOutput") public class StructuredOutputController { @Resource private ChatClient ollamaChatChatClient;
@JsonPropertyOrder({"actor", "movies"}) record ActorsFilms(String actor, List<String> movies) { }
@RequestMapping(value = "/chat1") public ActorsFilms chat1() { ActorsFilms actorsFilms = ollamaChatChatClient.prompt().user("列出演员刘德华的5部代表性电影。").call().entity(ActorsFilms.class); return actorsFilms; }
@JsonPropertyOrder({"releaseDate"}) record Film(String movie, String releaseDate) { }
@RequestMapping(value = "/chat2") public List<Film> chat2() { List<Film> films = ollamaChatChatClient.prompt().user("列出演员刘德华的5部代表性电影").call().entity(new ParameterizedTypeReference<>() { }); return films; }
@RequestMapping(value = "/chat3") public Map<String, Object> chat3() { Map<String, Object> result = ollamaChatChatClient.prompt().user(u -> u.text("提供一组关于 {subject} 的列表").param("subject", "一个包含数字1到9的数组,其键名为'numbers'")).call().entity(new ParameterizedTypeReference<Map<String, Object>>() { }); return result; }
@RequestMapping(value = "/chat4") public List<String> chat4() { List<String> list = ollamaChatChatClient.prompt().user(u -> u.text("列出五种 {subject}").param("subject", "冰淇淋口味")).call().entity(new ListOutputConverter(new DefaultConversionService())); return list; } }
|