系列篇章💥
No. | 文章 |
---|---|
1 | 大模型之Spring AI实战系列(一):基础认知篇 - 开启智能应用开发之旅 |
2 | 大模型之Spring AI实战系列(二):Spring Boot + OpenAI 打造聊天应用全攻略 |
3 | 大模型之Spring AI实战系列(三):Spring Boot + OpenAI 实现聊天应用上下文记忆功能 |
4 | 大模型之Spring AI实战系列(四):Spring Boot + OpenAI 使用OpenAI Embedding实现文本向量化 |
5 | 大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统 |
前言
在上一篇文章中,我们学习了如何使用 Spring AI 集成 OpenAI 的 Embedding API 实现文本向量化,并探讨了其在语义搜索、RAG 系统等场景中的应用。本文将继续深入 Spring AI 的能力栈,聚焦于系统提示词(System Prompt)的设计与实现。
我们将基于 spring-ai-openai-systemPrompt
示例项目,详细介绍如何通过设定 AI 的人格、语气和行为模式,打造一个风格统一、形象鲜明的智能对话系统。该项目不仅展示了如何构建具有“人设”的聊天机器人,还提供了完整的上下文管理机制,为后续开发更复杂的交互式 AI 应用打下坚实基础。
一、开发环境准备
(一)Java 版本要求
本项目采用Java 17进行编译和运行,请务必确保你的开发环境已成功安装JDK 17。你可以在命令行中输入以下命令进行检查:
java -version
输出应类似如下内容:
openjdk version "17.0.8" 2023-07-18
OpenJDK Runtime Environment (build 17.0.8+7)
OpenJDK 64-Bit Server VM (build 17.0.8+7, mixed mode, sharing)
(二)Maven 构建工具
确保你已安装 Maven 并配置好环境变量:
mvn -v
输出应类似如下内容:
Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39)
Maven home: D:\Program Files (x86)\apache-maven-3.8.8
Java version: 17.0.12, vendor: Oracle Corporation, runtime: D:\Program Files\jdk-17.0.12
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
(三)OpenAI API 密钥
你需要注册 OpenAI 官网 获取 API Key(国内可以直接使用中转地址),并设置为环境变量:
export OPENAI_API_KEY="your_openai_api_key"
export OPENAI_API_URL="https://api.openai.com/v1"
注意:出于安全考虑,不建议将密钥硬编码在代码中,推荐使用环境变量或配置中心进行管理。
二、POM依赖引入
(一)Spring AI与OpenAI集成依赖包
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-openai</artifactId>
</dependency>
此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。
(二)SpringAI相关依赖包版本管理
版本管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
部分通过引入spring-ai-bom,实现了对SpringAI相关依赖包版本的统一管理。这样,在项目中使用Spring AI相关依赖时,无需在每个依赖声明中单独指定版本号,只需遵循spring-ai-bom中定义的版本即可,极大地简化了依赖管理工作,同时确保了项目中依赖版本的一致性和稳定性。
三、配置文件详解
在配置文件 application.yml 中,对 OpenAI 相关参数进行配置:
server:
port: 8884
spring:
ai:
openai:
base-url: ${OPENAI_API_URL}
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-3.5-turbo
temperature: 0.7
- base-url 和 api-key:从环境变量注入,增强配置的安全性,避免密钥在代码中硬编码带来的风险。
- model:指定默认使用的模型版本为 gpt-3.5-turbo。
- temperature:控制输出的随机性,取值范围通常在 0 到 1 之间,数值越高,生成的回复越随机。
四、核心代码详解
(一)Application启动类
这是 Spring Boot 的启动类,非常简洁:
@SpringBootApplication
public class SpringAiApplication {
public static void main(String[] args) {
SpringApplication.run(SpringAiApplication.class, args);
}
}
Spring Boot会自动扫描并加载所有的Controller、Service等Bean,为项目的启动和运行奠定基础。它通过@SpringBootApplication注解开启了Spring Boot的自动配置功能,使得项目能够快速搭建起一个完整的Spring应用环境。
(二)带角色设定的聊天控制器
该类使用 OpenAiChatModel
接口来实现带有系统提示的角色化聊天功能。
@RestController
@RequestMapping("/system")
public class SystemPromptController {
// 提示词,定义了AI的角色和回复风格
private final String systemPrompt = "...";
// 历史消息列表
private List<Message> historyMessage = new ArrayList<>(List.of(new SystemMessage(systemPrompt)));
// 聊天模型
private final OpenAiChatModel chatModel;
@Autowired
public SystemPromptController(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
}
// 方法实现省略...
}
(三)带角色设定的聊天接口 /prompt
@GetMapping("/prompt")
public AssistantMessage prompt(@RequestParam String prompt) {
historyMessage.add(new UserMessage(prompt));
if (historyMessage.size() > maxLen) {
historyMessage = historyMessage.subList(historyMessage.size() - maxLen - 1, historyMessage.size());
historyMessage.add(0, new SystemMessage(systemPrompt)); // 保留系统提示
}
ChatResponse chatResponse = chatModel.call(new Prompt(historyMessage));
AssistantMessage assistantMessage = chatResponse.getResult().getOutput();
historyMessage.add(assistantMessage);
return assistantMessage;
}
- 将用户输入作为
UserMessage
添加到历史记录中。 - 如果历史记录超过最大长度,则截取最近的记录,并确保始终保留
SystemMessage
。 - 使用
Prompt
构造器将整个历史记录封装后发送给 OpenAI。 - 获取 AI 回复后,将其作为
AssistantMessage
加入历史记录。 - 返回值为
AssistantMessage
,包含完整的回复内容。
五、部署与测试
(一)启动应用
可以直接基于IntelliJ IDEA启动并运行Spring Boot应用程序,也可以进入项目根目录,执行 mvn clean package 进行打包,之后采用 java -jar xxx.jar 命令进行部署运行。运行成功后,应用将在 http://localhost:8884 启动。
(二)测试接口
你可以使用 Postman、curl 或浏览器访问以下接口:
- 发起提问:
GET /system/prompt?prompt=今天心情不好怎么办?
观察是否能正确返回符合“幽默段子手”人设的回复,例如:
{"content":"别担心,人生就像一局王者荣耀,有时候顺风,有时候逆风,但只要坚持到最后,总能翻盘!"}
六、系统提示词设计与作用
(一)什么是系统提示词?
系统提示词(System Prompt)是指在每次对话开始时,预先设定的一段文本,用于指导 AI 的行为、语气、知识范围等。它决定了 AI 的“性格”、“态度”和“表达方式”。
例如,在本项目中,我们设定了一位幽默段子手的人设:
private final String systemPrompt = "你现在是一个幽默段子手...即使面对批评,你都要保持幽默感...";
这样,无论用户问什么问题,AI 都会以搞笑段子的形式作答,从而形成一致的风格。
(二)系统提示词的作用
作用 | 描述 |
---|---|
人格设定 | 让 AI 具备特定的性格特征,如幽默、严肃、专业等 |
语气控制 | 控制 AI 的说话风格,如正式、亲切、轻松等 |
行为引导 | 指导 AI 在面对不同问题时的回应方式,避免跑题或偏离预期 |
知识边界 | 设定 AI 的回答范围,防止提供错误或不合适的信息 |
七、多轮对话与上下文维护
为了保证 AI 的回复连贯性,我们在每次请求中都维护了一个历史消息列表 [historyMessage],其中第一个元素始终是 SystemMessage
,其余为 UserMessage
和 AssistantMessage
。
当历史记录超过预设的最大长度(默认 1000 条)时,会进行裁剪,同时确保系统提示词不会丢失。
这种设计可以有效提升 AI 对话的逻辑性和一致性,适用于客服机器人、虚拟助手、情感陪伴等需要长期互动的场景。
八、应用场景与进阶思路
(一)构建个性化 AI 角色
你可以根据业务需求自定义 AI 的人设,比如:
- 职场导师:提供职业发展建议;
- 情感陪伴:模拟朋友或恋人;
- 知识讲解员:用通俗语言解释复杂概念;
- 客服代表:标准化回复 + 情绪安抚。
只需修改 [systemPrompt]内容即可快速切换角色。
(二)多角色动态切换
如果你希望同一个聊天界面支持多个角色切换(例如用户可选择“客服”或“搞笑助手”),可以通过参数传递不同的 [systemPrompt],并在服务端动态构造 Prompt
。
(三)结合 Function Calling 实现插件化功能
Spring AI 支持结合 FunctionCalling
功能,让 AI 根据用户意图调用外部 API 或业务逻辑。例如:
- 用户说:“帮我查一下天气”,AI 自动调用天气查询插件;
- 用户说:“讲个笑话”,AI 切换为段子模式;
- 用户说:“我心情不好”,AI 切换为情感陪伴模式。
(四)引入模板引擎优化提示词生成
对于复杂的提示词构造,可以引入模板引擎(如 Thymeleaf、Freemarker、Handlebars)动态生成 [systemPrompt],使其更具灵活性和扩展性。
例如:
String systemPrompt = templateEngine.process("roleTemplate", context);
结语
通过本文的实践,我们掌握了如何在 Spring AI 中使用 OpenAiChatModel
和 SystemMessage
构建带角色设定的智能对话系统,理解了系统提示词对 AI 行为的重要影响,并探索了其在个性化 AI、多角色切换、插件集成等场景下的应用潜力。在下一篇文章中,我们将继续深入 Spring AI 的能力,介绍如何使用 PromptTemplate
构建动态提示词。
若您对本文介绍的技术内容感兴趣,希望进一步探索和实践,欢迎关注我,通过私信的方式与我联系,获取完整的项目代码,
开启您的 Spring AI 开发之旅。
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑
😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)
📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。
💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!