【AI应用开发捷径之路】第五课:您应该知道的提示词的正确使用方法,如何在SpringAI中正确使用提示词
原创 小数先生
一、什么是提示词
在生成式人工智能中,创建提示对于开发人员来说是一项至关重要的任务。这些提示的质量和结构会显著影响人工智能输出的有效性。投入时间和精力设计周到的提示可以显著提升人工智能的成果。
例如,一项重要的研究表明,以“深呼吸,一步一步解决这个问题”作为提示开头,可以显著提高解决问题的效率。这凸显了精心选择的语言对生成式人工智能系统性能的影响。
public enum MessageType {
USER("user"),// 用户提示词(显式)
ASSISTANT("assistant"),// AI回复
SYSTEM("system")// 系统提示词 (隐式)
TOOL("too1”);// 工具
}
SYSTEM系统角色:引导AI的行为和响应方式,设置AI如何解释和回复输入的参数或规则。这类似于在发起对话之前向AI提供指令。
USER用户角色:代表用户的输入–他们向AI提出的问题、命令或语句。这个角色至关重要,因为它构成了AI响应的基础。
ASSISTANT助手角色:AI对用户输入的响应。它不仅仅是一个答案或反应,对于维持对话的流畅性至关重要。通过追踪 A1之前的响应(其“助手角色”消息),系统可以确保交互的连贯性以及与上下文的相关性。助手消息也可能包含功能工具调用请求信息。它就像 A1中的一项特殊功能,在需要执行特定功能(例如计算、获取数据或其他不仅仅是对话的任务)时使用。
TOOL工具/功能角色:工具/功能角色专注于响应工具调用助手消息返回附加信息。
二、提示词的使用技巧
1、简单技巧
文本摘要:将大量文本缩减为简洁的摘要,捕捉关键点和主要思想,同时省略不太重要的细节。
问答:专注于根据用户提出的问题,从提供的文本中获取具体答案。它旨在精准定位并提取相关信息以响应查
询。
文本分类:系统地将文本分类到预定义的类别或组中,分析文本并根据其内容将其分配到最合适的类别。
对话:创建交互式对话,让人工智能可以与用户进行来回交流,模拟自然的对话流程
代码生成:根据特定的用户要求或描述生成功能代码片段,将自然语言指令转换为可执行代码。
2、高级技术
零样本、少样本学习:使模型能够利用特定问题类型的极少或没有先前的示例做出准确的预测或响应,并使用学习到的概括来理解和执行新任务。
思路链:将多个AI响应连接起来,创建连贯且符合语境的对话。它帮助AI保持讨论的线索,确保相关性和连续I性
ReAct(推理+行动):在这种方法中,人工智能首先分析输入(推理),然后确定最合适的行动或响应方案。它将理解与决策结合在一起。
3、核心技术点
1.指令明确
a.避免情绪化内容
i.“求求你好好说啊~!”“你这样我不会啊~”
b.不要让大模型去猜去臆想你的想法,描述足够清楚
i.补充必要背景信息:身份、场景、用途、已有内容等,避免 A1“脑补” 出错。
ii .避免“或许、可能、你懂的”等模糊修饰语
c.把大模型当一个小学生,你描述的任务越清楚他执行越具体
模糊:写一篇文章
清晰:写一篇 800 字的高考作文,主题“坚持与创新”结构分引言、三个论点(每个配历
史案例)、结论,语言风格正式书面。
2.格式清晰(结构化)
可以通关markdown格式,确定一级标题、二级标题、列表 这样更利于模型理解。后续维也更加清晰
公式:「角色设定」+「具体任务(技能)」+「限制条件(约束)」+「示例参考」

三、提示词在SpringAi中的应用
1、系统提示词的使用
package com.example.base;
import cn.myeasyai.FaceApplication;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = FaceApplication.class)
public class TestPrompt {
@Autowired
DeepSeekChatModel deepSeekChatModel;
@Test
public void testSystemPrompt() {
ChatClient.Builder builder = ChatClient.builder(deepSeekChatModel);
ChatClient build = builder
.defaultSystem("你是一个翻译小助手,你需要将用户输入的文字翻译成英文。") //这里则是全局, 所有对话都会使用这个提示词
.build();
ChatClient.CallResponseSpec content = build.prompt()
.user("你好")
// .system("你是一个翻译小助手,你需要将用户输入的文字翻译成英文。") //这里是为当前对话设置提示词
.call();
System.out.println(content.content());
}
}

2、提示词动态传参
package com.example.base;
import cn.myeasyai.FaceApplication;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = FaceApplication.class)
public class TestPrompt {
@Autowired
DeepSeekChatModel deepSeekChatModel;
/**
* 测试自动参数
*/
@Test
public void testSystemPromptAutoParam() {
ChatClient.Builder builder = ChatClient.builder(deepSeekChatModel);
ChatClient build = builder
.defaultSystem("你是一个翻译小助手,你需要将用户:{name} 输入的文字翻译成:{language}。") //这里则是全局, 所有对话都会使用这个提示词
.build();
ChatClient.CallResponseSpec content = build.prompt()
.system(promptSystemSpec -> promptSystemSpec.param("name", "张三").param("language", "法语"))
.user("你好")
.call();
System.out.println(content.content());
}
}

3、加载外部文件提示词
生成一个prompt.st文件
##你是一个翻译小助手
你需要将用户:{name} 输入的文字翻译成:{language}

package com.example.base;
import cn.myeasyai.FaceApplication;
import org.junit.jupiter.api.Test;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.io.Resource;
@SpringBootTest(classes = FaceApplication.class)
public class TestPrompt {
@Autowired
DeepSeekChatModel deepSeekChatModel;
@Test
public void testSystemPromptOutFile(
@Value("classpath:/files/prompt.st")
Resource resource
) {
ChatClient.Builder builder = ChatClient.builder(deepSeekChatModel);
ChatClient build = builder
.defaultSystem(resource) //这里则是全局, 所有对话都会使用这个提示词
.build();
ChatClient.CallResponseSpec content = build.prompt()
.system(promptSystemSpec -> promptSystemSpec.param("name", "张三").param("language", "日语"))
.user("你好")
.call();
System.out.println(content.content());
}
}




