Spring AI (三) 提示词对象Prompt

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对象。

代码实例

java 复制代码
    @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;
    }

测试

http 复制代码
###
GET http://localhost:8080/chat/simpleChat?message=什么是AI

3.2.模板PromptTemplate

PromptTemplate类的作用是创建结构化提示词,它是Spring AI提示词工程中的关键组件。该类实现了三个接口,

分别是PromptTemplateStringActionsPromptTemplateActionsPromptTemplateMessageActions,这些接口的主要功能如下:

  • PromptTemplateStringActions:主要用于创建和渲染提示词字符串,接口的返回值类型均是String类型,这是提示词的基本形式。
  • PromptTemplateActions:主要用于创建Prompt对象,该对象可直接传递给ChatClient以生成响应。
  • PromptTemplateMessageActions:主要用于创建Message对象,这允许针对Message对象进行其他的相关操作。

代码实现

java 复制代码
    @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();

    }

测试

http 复制代码
###
GET http://localhost:8080/chat/forTemplates?message=美国

3.3.通过Resource构造PromptTemplate

我们除了可以通过定义String字符串加载Template以外,我们还可以以Resource的形式加载Template,

.ts Resource文件

在 resouces下创建 prompts/code.st (文件后缀名合理即可)

ts 复制代码
使用 {language} 编写一段实现 {description} 的程序。

代码实现

java 复制代码
    @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();
    }

测试

http 复制代码
###
GET http://localhost:8080/chat/forTemplatesByResource?description=冒泡排序&language=java
相关推荐
ssf-yasuo17 分钟前
SPIRE: Semantic Prompt-Driven Image Restoration 论文阅读笔记
论文阅读·笔记·prompt
代码之光_198024 分钟前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端
ajsbxi29 分钟前
苍穹外卖学习记录
java·笔记·后端·学习·nginx·spring·servlet
StayInLove1 小时前
G1垃圾回收器日志详解
java·开发语言
对许1 小时前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
鹿屿二向箔1 小时前
基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统
spring·mvc·mybatis
无尽的大道1 小时前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
小鑫记得努力1 小时前
Java类和对象(下篇)
java
binishuaio1 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE1 小时前
【Java SE】StringBuffer
java·开发语言