当前位置: 首页 > news >正文

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

目录

一、是什么?

(一)角色一: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.jsqmd.com/news/299555/

相关文章:

  • Java 核心语法精讲:注释、标识符、关键字与数据类型
  • 2026 追番日记
  • 文明
  • 详细介绍:Linux的目录结构
  • Python核心语法-(一)Python解释器、Python注释 - 努力-
  • STM32 + FreeRTOS 长期可维护架构:写给那些不敢重构的工程师
  • 人群仿真软件:SimWalk_(20).人群仿真在零售业中的应用
  • 人群仿真软件:Vadere_(1).Vadere简介
  • 基于PromptX创建助手角色
  • 初识C语言14.动态内存管理 - 实践
  • 增量微调优化在线更新
  • 【Java 新手必看】比较运算符:从概念到实战,附可运行代码案例
  • 网络考试点下一步出错怎么办?试试这样做
  • 【保姆级教程】移动端部署本地知识库与大模型,小白也能轻松上手(建议收藏)
  • 大模型学习宝典:收藏这份系统性技术框架,从零开始构建LLM
  • STM32F0实战:基于HAL库开发【2.1】
  • 大语言模型训练原理解析:ChatGPT背后的技术原理与应用价值
  • MCP与A2A深度解析:AI系统集成与智能体协作的未来之路
  • 【升级版本】基于多目标粒子群算法的微电网优化调度【风光、储能、柴油、燃气、电网交互】附Matlab代码
  • 【实时无功-有功控制器的动态性能】【带有电流控制的两级电压源变流器(VSC)】采用αβ阿尔法-贝塔转换进行电流反馈的实时无功功率控制器附Simulink仿真
  • 【2026最新】大模型面试全攻略:23家科技公司面试经验+高频考点总结,助你轻松上岸
  • 【使用Copulas对金融时间序列进行波动率估计与预测,涵盖GARCH、EWMA和EqWMA等模型】基于件风险价值(CVaR)、极值理论(EVT)、风险因子及蒙特卡洛模拟进行市场风险管理附Matlab
  • 个人AI产业定义、产业架构与发展趋势白皮书|附60页PDF文件下载
  • 企业AI开发与技术实践白皮书2025|附36页PDF文件下载
  • 【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应附Matlab代码
  • 【柔性作业车间调度问题FJSP】基于鹅优化算法(GOOSE Algorithm,GOOSE)求解柔性作业车间调度问题(FJSP)研究附Matlab代码
  • 如何保证服务高可靠? - 实践
  • P1462 通往奥格瑞玛的道路
  • Codeforces Round 1073 Div.1 写题记录(编号 2190)
  • 动态系统思维:告别僵化内耗的破局指南