3.提示词对象Prompt
3.1.Prompt
Prompt类的作用是创建结构化提示词, 实现了ModelRequest<List<Message>>接口
-
Prompt(String contents):创建一个包含指定内容的Prompt对象。 -
Prompt(String contents, ChatOptions modelOptions):创建一个包含指定内容和模型选项的Prompt对象。 -
Prompt(List<Message> messages):创建一个包含指定消息列表的Prompt对象。 -
Prompt(List<Message> messages, ChatOptions modelOptions):创建一个包含指定消息列表和模型选项的Prompt对象。 -
Prompt(Message message):创建一个包含指定消息的Prompt对象。 -
Prompt(Message message, ChatOptions modelOptions):创建一个包含指定消息和模型选项的Prompt对象。
代码实例
@GetMapping("/chat/completion")public String completion(@RequestParam(value = "message", defaultValue = "中国的首都是哪里?")String message) {// 创建用户消息对象,封装外部传入的消息内容UserMessage msg = new UserMessage(message);// 根据用户消息创建提示对象,为对话提供上下文Prompt prompt = new Prompt(msg);// 调用聊天客户端的呼叫方法,传入提示对象,发起对话请求ChatResponse call = chatClient.call(prompt);// 从对话响应中获取生成结果,即机器人的回答内容Generation result = call.getResult();// 从生成结果中提取输出消息,为最终展示给用户的消息内容AssistantMessage output = result.getOutput();// 提取输出消息的内容,准备进行后续处理或展示String content = output.getContent();return content;}
测试
###
GET http://localhost:8080/chat/simpleChat?message=什么是AI
3.2.模板PromptTemplate
PromptTemplate类的作用是创建结构化提示词,它是Spring AI提示词工程中的关键组件。该类实现了三个接口,
分别是PromptTemplateStringActions、PromptTemplateActions和PromptTemplateMessageActions,这些接口的主要功能如下:

PromptTemplateStringActions:主要用于创建和渲染提示词字符串,接口的返回值类型均是String类型,这是提示词的基本形式。PromptTemplateActions:主要用于创建Prompt对象,该对象可直接传递给ChatClient以生成响应。PromptTemplateMessageActions:主要用于创建Message对象,这允许针对Message对象进行其他的相关操作。
代码实现
@GetMapping("/chat/forTemplates")public String forTemplates(@RequestParam(value = "message", defaultValue = "中国")String message) {// PromptTemplate promptTemplate = new PromptTemplate( "{message}的首都是哪里?." );
// Prompt prompt = promptTemplate.create(Map.of("message", message ));PromptTemplate promptTemplate = new PromptTemplate("{message}的首都是哪里?.", Map.of("message", message));Prompt prompt = promptTemplate.create();return chatClient.call(prompt).getResult().getOutput().getContent();}
测试
###
GET http://localhost:8080/chat/forTemplates?message=美国
3.3.通过Resource构造PromptTemplate
我们除了可以通过定义String字符串加载Template以外,我们还可以以Resource的形式加载Template,
.ts Resource文件
在 resouces下创建 prompts/code.st (文件后缀名合理即可)
使用 {language} 编写一段实现 {description} 的程序。
代码实现
@Value("classpath:prompts/code.st")private Resource codeTemplate;@GetMapping("/chat/forTemplatesByResource")public String forTemplatesByResource(@RequestParam String description, @RequestParam String language) {PromptTemplate promptTemplate = new PromptTemplate(codeTemplate);Prompt prompt = promptTemplate.create(Map.of("description", description, "language", language));return chatClient.call(prompt).getResult().getOutput().getContent();}
测试
###
GET http://localhost:8080/chat/forTemplatesByResource?description=冒泡排序&language=java
