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
相关推荐
早起鸟儿20 分钟前
docker-Dockerfile 配置
java·linux·运维·docker
云边小网安24 分钟前
java集合篇(六) ---- ListIterator 接口
java·开发语言·青少年编程·java集合
都叫我大帅哥30 分钟前
Spring WebFlux:响应式编程的“未来战士”还是“花架子”?
java·spring·flux
都叫我大帅哥32 分钟前
Reactor 深度解析:响应式编程的「核反应堆」是如何工作的?
java·spring
不太厉害的程序员33 分钟前
NC65配置xml找不到Bean
xml·java·后端·eclipse
chanalbert1 小时前
数据库连接池深度研究分析报告
数据库·spring
我在北国不背锅1 小时前
基于Java开发的浏览器自动化Playwright-MCP服务器
java·playwright·mcp
LUCIAZZZ2 小时前
钉钉机器人-自定义卡片推送快速入门
java·jvm·spring boot·机器人·钉钉·springboot
优秀1352 小时前
java33
java
fajianchen3 小时前
Spring中观察者模式的应用
java·开发语言