package com.huangge1199.aiagent.controller; import com.huangge1199.aiagent.common.R; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; /** * ResControlle * * @author huangge1199 * @since 2025/5/17 12:23:36 */ @RestController @RequestMapping("/res") @Tag(name = "ChatClient返回响应") public class ResController { private final ChatClient chatClient; public ResController(ChatClient.Builder builder) { this.chatClient = builder.build(); } record ActorFilms(String actor, List movies) { } @PostMapping("/chatRes") @Operation(summary = "返回 ChatResponse") public R chatResRes(@RequestBody String question) { ChatResponse chatResponse = chatClient.prompt() .user(question) .call() .chatResponse(); return R.ok(chatResponse); } @PostMapping("/entity") @Operation(summary = "返回实体-单个实体") public R entityRes(@RequestBody String question) { ActorFilms actorFilms = chatClient.prompt() .user(question) .call() .entity(ActorFilms.class); return R.ok(actorFilms); } @PostMapping("/actorFilmsRes") @Operation(summary = "返回实体-泛型") public R> actorFilmsRes(@RequestBody String question) { List actorFilms = chatClient.prompt() .user(question) .call() .entity(new ParameterizedTypeReference>() { }); return R.ok(actorFilms); } }