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
相关推荐
界面开发小八哥22 分钟前
Java开发工具IntelliJ IDEA v2025.1——全面支持Java 24、整合AI
java·ide·人工智能·intellij-idea·idea
普兰店拉马努金1 小时前
【高中数学/古典概率】4红2黑六选二,求取出两次都是红球的概率
java·概率
智商低情商凑1 小时前
CAS(Compare And Swap)
java·jvm·面试
yangmf20401 小时前
使用 Logstash 迁移 MongoDB 数据到 Easysearch
java·elasticsearch·搜索引擎
Tiger_shl1 小时前
【Python语言基础】24、并发编程
java·数据库·python
FAQEW1 小时前
Spring boot 中的IOC容器对Bean的管理
java·spring boot·后端·bean·ioc容器
0509151 小时前
测试基础笔记第十一天
java·数据库·笔记
IDRSolutions_CN2 小时前
如何将 PDF 中的文本提取为 JSON 格式
java·经验分享·pdf·软件工程·团队开发
摘星编程2 小时前
并发设计模式实战系列(6):读写锁
java·设计模式·并发编程
Java中文社群2 小时前
最火向量数据库Milvus安装使用一条龙!
java·人工智能·后端