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