【SAA】SpringAI Alibaba学习笔记(二):提示词Prompt

目录

一、是什么?

(一)角色一:System

二、角色二:User

三、角色三:Assistant

四、角色四:Tool

五、提示词模板:PromptTemplate


一、是什么?

提示词初步的简单理解即是给大模型的文字指令,在我们使用AI时,在对话框输入的文字信息可以初步理解为就是提示词。但是在程序调用API里,被划分为四大角色。

模型对象从最初可以在call方法里传入简单的字符串,到可以传入一个封装好的Message信息,再到最后可以封装好一个Prompt对象,赋予角色,可以实现与AI模型复杂而又详细的交互。当然最终肯定是希望使用"白话"自然语言就可以实现特定的功能。

而使用chatModel调用和使用chatClient调用也有不同。

(一)角色一:System

用于设定AI行为边界/角色/定位。指导AI的行为和响应方式,设置AI如何解释和回复输入的。

示例:①chatModel调用:

java 复制代码
@GetMapping("/prompttemplate/chat3")
    public String chat3(String question) {
        SystemMessage systemMessage = new SystemMessage("你是一个Java编程助手,拒绝回答非技术问题。");  //设置System角色信息
        UserMessage userMessage = new UserMessage(question);   //传入的参数即是我们的User角色信息
        Prompt prompt = new Prompt(List.of(systemMessage, userMessage));  //传入Prompt对象封装
        String result = deepseekChatModel.call(prompt).getResult().getOutput().getText();  //把prompt对象传入call方法再获取它的文本信息。
        System.out.println(result);
        return result;
    }

②chatClient调用:

java 复制代码
/**
     * 与chatModel不同的是,chatClient使用的是链式调用
     * @param question  用户传入的提示词信息
     * @return
     */
    @GetMapping("/prompttemplate/chat4")
    public Flux<String> chat4(String question) {
        return deepseekChatClient.prompt()
                .system("你是一个Java编程助手,拒绝回答非技术问题。") 
                .user(question)
                .stream() //流式输出
                .content();
    }

我们来看看问它技术问题和非技术问题,它分别会怎么回答?这里使用chatClient调用。

①技术问题

②非技术问题

可以看到它非技术问题是无法给我们解答的,因为我们在System角色给它设定了边界,告诉它只可以回答有关于Java的问题。


二、角色二:User

用户原始提问输入。代表用户的输入他们向AI提出的问题、命令或陈述。这个"User"跟我们平时向AI发出的指令一样。


三、角色三:Assistant

AI返回的响应信息,定义为"助手角色"消息。用它可以确保上下文能够连贯的交互。实现记忆对话,积累回答。


四、角色四:Tool

桥接外部服务,即ToolCalling。类似调用第三方utils工具类,可以给模型赋予更多功能,类似的像实时获取天气、时间等功能。


五、提示词模板:PromptTemplate

我们之前学习使用过JdbcTemplate、RedisTemplate等。都是为了简化开发。现在PromptTemplate可以使用占位符来动态插入内容。还可以实现提示词与代码的分离,方便后期维护。

首先我们在resources目录下创建prompttemplate/template.txt,里面编写以下内容。

复制代码
讲一个关于{topic}的故事,并以{output_format}格式输出。

使用花括号"{}"来标识需要动态插入的地方,然后在使用PromptTemplate进行动态插入。

java 复制代码
 @Value("classpath:/prompttemplate/template.txt")  //指定提示词模板文本文件的路径
    private org.springframework.core.io.Resource userTemplate;  //引入userTemplate

    @GetMapping("/prompttemplate/chat2")
    public String chat2(String topic, String output_format) {  //这两个参数就是我们要动态插入的内容
        PromptTemplate promptTemplate = new PromptTemplate(userTemplate);  //创建PromptTemplate对象

        Prompt prompt = promptTemplate.create(Map.of("topic", topic, "output_format", output_format));  //使用create方法,把两个参数封装成一个Map传入prompTemplate

        return qwenChatClient.prompt(prompt).call().content(); 
    }

结果展示:

相关推荐
哈哈你是真的厉害几秒前
解构 AIGC 的“核动力”引擎:华为 CANN 如何撑起万亿参数的大模型时代
人工智能·aigc·cann
Ekehlaft2 分钟前
这款国产 AI,让 Python 小白也能玩转编程
开发语言·人工智能·python·ai·aipy
哈__3 分钟前
CANN多模型并发部署方案
人工智能·pytorch
予枫的编程笔记6 分钟前
【Linux入门篇】Linux运维必学:Vim核心操作详解,告别编辑器依赖
linux·人工智能·linux运维·vim操作教程·程序员工具·编辑器技巧·新手学vim
慢半拍iii6 分钟前
对比分析:ops-nn与传统深度学习框架算子的差异
人工智能·深度学习·ai·cann
心疼你的一切8 分钟前
解构CANN仓库:AIGC API从底层逻辑到实战落地,解锁国产化AI生成算力
数据仓库·人工智能·深度学习·aigc·cann
vx1_Biye_Design9 分钟前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design10 分钟前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
qq5_81151751512 分钟前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
hdsoft_huge15 分钟前
1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
vue.js·spring boot·后端