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
相关推荐
铁蛋AI编程实战14 分钟前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘25 分钟前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays101127 分钟前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
摇滚侠38 分钟前
在 SpringBoot 项目中,开发工具使用 IDEA,.idea 目录下的文件需要提交吗
java·spring boot·intellij-idea
云姜.43 分钟前
java多态
java·开发语言·c++
李堇1 小时前
android滚动列表VerticalRollingTextView
android·java
泉-java1 小时前
第56条:为所有导出的API元素编写文档注释 《Effective Java》
java·开发语言
寄存器漫游者2 小时前
Linux 软件编程 - IO 编程
linux·运维·spring
zfoo-framework2 小时前
帧同步和状态同步
java
charlotte102410242 小时前
高并发:关于在等待学校教务系统选课时的碎碎念
java·运维·网络