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