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

news/2026/1/25 21:04:53/文章来源:https://www.cnblogs.com/yangykaifa/p/19530488

目录

一、是什么?

(一)角色一:System

二、角色二:User

三、角色三:Assistant

四、角色四:Tool

五、提示词模板:PromptTemplate


一、是什么?

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

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

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

(一)角色一:System

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

         示例:①chatModel调用:

@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调用:

/*** 与chatModel不同的是,chatClient使用的是链式调用* @param question  用户传入的提示词信息* @return*/@GetMapping("/prompttemplate/chat4")public Flux 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进行动态插入。

 @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传入prompTemplatereturn qwenChatClient.prompt(prompt).call().content();}

结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1215770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 核心语法精讲:注释、标识符、关键字与数据类型

注释 public class HelloWorld {public static void main(String[] args){//单行注释/*多行注释*/System.out.print("Hello,World!");//JavaDoc:文档注释 /** *//*** @deprecated Hello* @A* */} }标识符和…

2026 追番日记

一月 メダリスト 第2期 金牌得主 第二季 导演: 山本靖貴 脚本: 花田十輝 动画制作: ENGI ep.1 去回顾了下些花滑术语~来看小祈的金牌之路了 3F!我想起来了,我都想起来了( 美味表情(不是 还有芙莉莲的事情 我草这也…

详细介绍:Linux的目录结构

详细介绍:Linux的目录结构2026-01-25 21:01 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; …

Python核心语法-(一)Python解释器、Python注释 - 努力-

Python核心语法-(一)Python解释器、Python注释Python核心语法-,Python解释器、Python注释一、python 简介 1.1 python简介 python官网: https://www.python.org/downloads/Python的应⽤领域:1.2 Python解释器 Python解…

STM32 + FreeRTOS 长期可维护架构:写给那些不敢重构的工程师

文章目录 一、 为什么你现在就该为“三年后”焦虑?二、 架构健康的“残酷”判断标准三、 FreeRTOS 被“用坏”的三个根因1. 把 FreeRTOS 当成了“万能胶水”2. 误区:任务 (Task) 功能模块 (Feature)3. 上下文地狱:中断、回调、任务逻辑大乱炖…

人群仿真软件:SimWalk_(20).人群仿真在零售业中的应用

人群仿真在零售业中的应用 1. 零售业背景及需求 零售业是一个高度依赖顾客流量和行为预测的行业。通过人群仿真技术,零售商可以更好地理解顾客在店铺内的流动模式、购买行为和排队等候时间,进而优化店铺布局、提高顾客满意度和增加销售额。具体来说&am…

人群仿真软件:Vadere_(1).Vadere简介

Vadere简介 什么是Vadere Vadere是一款开源的人群仿真软件,专为研究和评估人群动态行为而设计。它提供了高度可配置的仿真环境,支持多种场景设置和人群行为模型。Vadere的主要特点包括: 多尺度仿真:Vadere可以在不同尺度上进行仿…

基于PromptX创建助手角色

基于PromptX创建助手角色 背景 最近才开始深入研究学习将LLM加入工作流中,可能对比其他人已经慢了很多了。在学习过程中,也许由于我很喜欢和AI对话,首先吸引我的是创建一个AI助手角色的思路,它利用不断对话和LLM的…

初识C语言14.动态内存管理 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

增量微调优化在线更新

💓 博客主页:借口的CSDN主页 ⏩ 文章专栏:《热点资讯》 智能优化:增量微调在线更新的效率革命与伦理挑战 目录 智能优化:增量微调在线更新的效率革命与伦理挑战 引言:动态AI的进化需求 现在时:成…

【Java 新手必看】比较运算符:从概念到实战,附可运行代码案例

比较运算符是 Java 中用于判断 “两个值 / 变量关系” 的核心运算符,也是实现程序逻辑判断(如 if/else)的基础。新手常混淆 “等于” 和 “赋值”、“等于” 和 “对象相等”,这篇笔记结合可直接运行的代码案例,从基础…

网络考试点下一步出错怎么办?试试这样做

场景:家中网络课学习完毕考试,遇到点下一步出错问题 解决方案:打开显示所有题号的面板,点击面板上的题号跳转 注:我这里题号面板是点击进度条打开的,各人根据实际情况找下

【保姆级教程】移动端部署本地知识库与大模型,小白也能轻松上手(建议收藏)

本文详细介绍了在移动端部署本地知识库与大模型的完整方案,包括轻量级模型选型(如Phi-2、TinyLlama)、推理引擎(llama.cpp、MLC LLM)和知识库构建方法(向量数据库或关键词匹配)。提供了Android部…

大模型学习宝典:收藏这份系统性技术框架,从零开始构建LLM

本文基于Stanford CS336课程,系统介绍大模型开发关键技术,涵盖BPE分词、网络结构设计、超参数选择、训练技巧、MoE架构、GPU优化、分布式训练及推理优化等核心内容。详细解析从LayerNorm到RMSNorm、RoPE位置编码、Flash Attention等实现方法,…

STM32F0实战:基于HAL库开发【2.1】

7.4.2 从待机模式唤醒 待机模式允许达到能耗最低,它基于Cortex-M0深度睡眠模式,电压调节器禁用,1.8V域关闭,PLL、HIS和HSE振荡器也关闭,SRAM和寄存器内容丢失。只有RTC寄存器、RTC备份寄存器和备用电路保持工作。可以使用HAL库中的HAL_PWR_EnterSTANDBYMode()函数进入待机…

大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值

大语言模型训练分为三步:预训练阶段通过互联网数据训练基础预测模型;监督微调阶段通过问答数据让模型学会回答问题;强化学习阶段让模型自行探索最佳解法,产生思维链。大模型本质是统计学预测器,通过预测下一个token生成…

MCP与A2A深度解析:AI系统集成与智能体协作的未来之路

MCP与A2A是AI系统集成的两大关键协议。MCP解决AI安全调用工具与数据的问题,提供资源、工具和提示模板三大能力;A2A则规范智能体间的协作,通过任务、消息和产物等组件实现高效接力。它们共同构成AI系统的分层规范,将开发范式从&quo…

【升级版本】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真…

【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真…