大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统

06-01 1302阅读

系列篇章💥

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 构建带角色设定的智能对话系统

目录

  • 系列篇章💥
  • 前言
  • 一、开发环境准备
    • (一)Java 版本要求
    • (二)Maven 构建工具
    • (三)OpenAI API 密钥
    • 二、POM依赖引入
      • (一)Spring AI与OpenAI集成依赖包
      • (二)SpringAI相关依赖包版本管理
      • 三、配置文件详解
      • 四、核心代码详解
        • (一)Application启动类
        • (二)带角色设定的聊天控制器
        • (三)带角色设定的聊天接口 `/prompt`
        • 五、部署与测试
          • (一)启动应用
          • (二)测试接口
          • 六、系统提示词设计与作用
            • (一)什么是系统提示词?
            • (二)系统提示词的作用
            • 七、多轮对话与上下文维护
            • 八、应用场景与进阶思路
              • (一)构建个性化 AI 角色
              • (二)多角色动态切换
              • (三)结合 Function Calling 实现插件化功能
              • (四)引入模板引擎优化提示词生成
              • 结语

                前言

                在上一篇文章中,我们学习了如何使用 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集成依赖包

                 
                     org.springframework.ai
                     spring-ai-starter-model-openai
                 
                

                此依赖包用于实现Spring AI与OpenAI的集成,为后续与OpenAI API进行交互提供了必要的支持。

                (二)SpringAI相关依赖包版本管理

                版本管理

                 
                    
                        
                            org.springframework.ai
                            spring-ai-bom
                            1.0.0-SNAPSHOT
                            pom
                            import
                        
                    
                
                

                部分通过引入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 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 开发之旅。


                          大模型之Spring AI实战系列(五):Spring Boot + OpenAI 构建带角色设定的智能对话系统

                          🎯🔖更多专栏系列文章:AI大模型提示工程完全指南、AI大模型探索之路(零基础入门)、AI大模型预训练微调进阶、AI大模型开源精选实践、AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

                          😎 作者介绍:资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索(CSDN博客之星|AIGC领域优质创作者)

                          📖专属社群:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,回复‘入群’ 即刻上车,获取邀请链接。

                          💘领取三大专属福利:1️⃣免费赠送AI+编程📚500本,2️⃣AI技术教程副业资料1套,3️⃣DeepSeek资料教程1套🔥(限前500人)

                          如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我们,一起携手同行AI的探索之旅,开启智能时代的大门!

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码