SpringAI OpenAI 接口 ChatClient 提示模版
·
SpringAI OpenAI 接口 ChatClient 提示模版
@Tag(name = "学习-ChatClient 提示模版", description = "学习-ChatClient 提示模版")
@RestController
@RequestMapping("/study/api/chat/client/promptTemplate")
@Slf4j
public class ChatClientPromptTemplateController {
private ChatClient chatClient;
public ChatClientPromptTemplateController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
private static final String QUEST = "列出5部由{actor}主演的电影。";
private static final String QUEST2 = "列出{actor}在{year}年主演的电影。";
/**
* 使用提示模版简单示例
* 模板方式 - 可以重复使用同一个模板
* @param actor
* @return
*/
@Operation(summary = "提示模版 simple", description = "学习提示模版。")
@GetMapping("/simple")
public String usePromptTemplateSimple(String actor) {
String result = chatClient.prompt().user(
u->u.text(QUEST).param("actor",actor)).call().content();
return result;
}
/**
* 使用提示模版 多个参数示例
* 模板方式 - 清晰管理多个参数
* @param actor
* @return
*/
@Operation(summary = "提示模版 多参数", description = "学习提示模版。")
@PostMapping("/moreArgs")
public String usePromptTemplateMoreArgs(@RequestBody Actor actor) {
System.out.println(actor);
String result = chatClient.prompt().user(
u->u.text(QUEST2).param("actor",actor.getName()).param("year",actor.getYear())).call().content();
return result;
/**
* 等价于
* String result2 = chatClient.prompt()
* .user("列出"+actor.getName()+"在"+actor.getYear()+"年主演的电影。").call().content();
* 字符串连接方式 - 容易出错,难以阅读
*/
}
/**
* 防止 SQL 注入类似的安全问题
* 字符串连接 - 危险(可能被注入)
* String userInput = "John Williams; DELETE FROM users;";
* 使用模板方式 - 安全(框架会转义)
* DELETE FROM users 作为参数传递,不会被当作指令
*
*/
/**
* 使用提示模版 复杂条件构建
* @param
* @return
*/
@Operation(summary = "提示模版 复杂条件构建", description = "学习提示模版。")
@GetMapping("/complex")
public String usePromptTemplateComplexCondition() {
PromptTemplate promptTemplate = new PromptTemplate("{province}有多少个市。");
Prompt prompt = promptTemplate.create(Map.of( "province", "内蒙古"));
String result = chatClient.prompt(prompt).call().content();
return result;
}
/**
* 使用提示模版 类型安全
* 支持不同类型参数
* @param
* @return
*/
@Operation(summary = "提示模版 类型安全", description = "学习提示模版。")
@GetMapping("/safe")
public String usePromptTemplateSage() {
// 模板方式 - 支持不同类型参数
return chatClient.prompt()
.user(u -> u
.text("中国 温度: {temp}°C, 湿度: {humidity}%, 风速: {wind}km/h 最接近的城市。")
.param("temp", 25.5) // double
.param("humidity", 65) // int
.param("wind", 12.3f)) // float
.call().content();
}
// 国际化支持
}
@Data
@AllArgsConstructor
class Actor {
String name;
String year;
}
更多推荐



所有评论(0)