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

Spring AI ChatClient五种Prompt使用方式详解(全网最通俗易懂)摘要:Spring AI 中 ChatClient 是调用大模型的核心工

Spring AI ChatClient五种Prompt使用方式详解(全网最通俗易懂)

摘要:Spring AI 中 ChatClient 是调用大模型的核心工具,而 Prompt 提示词是控制大模型输出效果的关键。很多新手分不清全局系统提示词、单次对话提示词、动态模板Prompt、伪系统Prompt、外部文件Prompt五种用法。本文基于实战测试代码,手把手拆解五种Prompt写法、区别、适用场景,看完彻底搞懂Spring AI Prompt编程。

标签:Spring AI、ChatClient、Prompt、AI大模型、Java实战

一、前言

在 Spring AI 开发中,ChatClient 封装了大模型的调用逻辑,无需手动拼接HTTP请求、无需适配不同模型的API。而 Prompt(提示词)是我们和大模型沟通的桥梁,合理使用不同的Prompt写法,可以实现:固定AI角色、动态修改提示词、解耦硬编码、统一角色配置等功能。

本文基于 SpringBoot + SpringAI 单元测试代码,详解五种主流Prompt使用方式,全部可直接运行,适合入门学习与项目落地。

二、五种Prompt实战用法详解

2.1 方式一:全局默认系统提示词(defaultSystem)

核心特点
  • 构建全局唯一的ChatClient实例

  • 系统提示词固定,所有对话都生效

  • 适合:固定AI角色、全局统一人设的场景

实战代码
@Test public void testPrompt() { //直接给ChatClient设置系统提示词 ChatClient client = chatClient.defaultSystem("你是一位热情、专业的导游,熟悉各种旅游目的地的风土人情和景点信息。你的任务是根据用户的需求,为他们规划一条合理且有趣的旅游路线。").build(); String c = client.prompt().user("你是谁").call().content(); System.out.println("c = " + c); }
运行结果说明

AI会固定以专业导游的身份回答问题,无论用户提问什么,都会优先遵循全局系统提示词的人设。

2.2 方式二:单次对话系统提示词(system)

核心特点
  • 不修改全局ChatClient配置,仅当前本次对话生效

  • 优先级高于全局默认提示词,灵活切换AI角色

  • 适合:不同接口、不同测试场景需要不同AI人设

实战代码
@Test public void testPrompt2() { //直接给当前对话设置设置系统提示词 ChatClient client = chatClient.build(); String c = client.prompt().system("你是一个导购").user("你是谁").call().content(); System.out.println("c = " + c); }
核心区别

defaultSystem不同:system()是临时生效,只对当前这一次prompt请求有效,不会污染其他对话。

2.3 方式三:系统提示词动态模板(param动态传参)

核心特点
  • 支持模板占位符 + 动态参数拼接系统提示词

  • 通过{变量名}定义模板,.param()动态赋值

  • 适合:人设风格可变、提示词动态配置场景

实战代码
//动态模板 @Test public void testPrompt3() { ChatClient client = chatClient.build(); String c = client.prompt().system(u->u.text("你是一个{voice}语气的陪玩").param("voice","高冷")).user("你是谁").call().content(); System.out.println("c = " + c); }
执行逻辑

模板渲染后真实系统提示词:你是一个高冷语气的陪玩,可通过修改param参数,随意切换高冷、温柔、活泼等语气。

2.4 方式四:伪系统提示词(User模板模拟系统人设)

核心特点
  • 无system层级提示词,将角色设定写入用户提问中

  • 同样支持动态模板param传参,双变量替换

  • 适用部分不支持独立system参数的老旧大模型接口

实战代码
@Test public void testPrompt4() { ChatClient client = chatClient.build(); String c = client.prompt().user(u->u.text("你是一个{voice}语气的老师,请回答{question}").param("voice","温柔").param("question","你是谁")).call().content(); System.out.println("c = " + c); }
场景说明

部分模型对system提示词支持不完善,可通过这种伪系统提示词的方式,把角色设定嵌入用户prompt,达到同样效果。

2.5 方式五:外部文件加载Prompt(解耦硬编码)

核心特点
  • 将Prompt提示词写入独立.st模板文件,彻底解耦代码

  • 支持统一管理大量、复杂的提示词,便于维护修改

  • 企业级项目最推荐的写法

步骤1:创建模板文件

resources目录下新建prompt.st文件,写入自定义系统提示词:

你是一名专业的Java技术博主,回答问题简洁、专业、通俗易懂。

步骤2:代码加载外部Prompt
//外部文件作为提示词 @Test public void testPrompt5(@Value("classpath:/prompt.st") Resource resource) { ChatClient client = chatClient.defaultSystem(resource).build(); String c = client.prompt().user("你是谁").call().content(); System.out.println("c = " + c); }

三、五种Prompt方式核心区别总结

Prompt方式

生效范围

是否支持动态参数

适用场景

defaultSystem 全局系统词

全局所有对话

固定AI全局人设

system 单次系统词

仅当前对话

临时切换AI角色

system + param 动态模板

仅当前对话

动态修改AI人设、语气

User伪系统Prompt

仅当前对话

兼容不支持system的模型

外部文件Prompt

全局

支持文件模板参数

企业项目、复杂提示词维护

四、核心知识点总结

  1. 优先级:单次system提示词 > 全局defaultSystem提示词

  2. 动态模板核心{key}占位符 +.param(key,value)赋值

  3. 最佳实践:简单场景用动态模板,复杂项目用外部文件加载Prompt,彻底解耦代码

  4. 伪系统Prompt是兼容方案,优先使用标准的system层级提示词

五、结语

以上五种Prompt写法覆盖了 Spring AI 开发中99%的业务场景,从基础固定人设、临时对话配置,到动态参数渲染、企业级文件解耦,层层递进。掌握这五种用法,即可熟练完成AI对话角色定制、提示词优化、动态问答等核心功能开发。

http://www.jsqmd.com/news/1067595/

相关文章:

  • i.MX53开发板实战:从硬件解析到嵌入式Linux应用开发
  • 3分钟掌握Video2X:AI视频无损放大到4K的完整实战指南
  • RAG学习-基于 LangChain 框架的 RAG 实现
  • 3分钟免费安装!VideoDownloadHelper视频下载神器终极指南
  • 怪物猎人世界智能辅助工具HunterPie:游戏数据实时监控与战斗效率提升指南
  • 四川LED显示屏维修源头厂家有哪些
  • ARM处理器与RTOS集成:i.MX平台AMX实时内核开发实践
  • AVR32时钟控制器(CLKCTRL)配置与中断管理实战详解
  • UiPath Studio 21.10.4 安装教程:新手从零搭建 RPA 机器人开发环境
  • wiliwili:让你的游戏机变身全能B站客户端,一键开启跨平台追番体验
  • 利用ATtiny3227 Curiosity Nano板载调试器编程外部MCU实战指南
  • SAM G51微控制器:Cortex-M4内核在物联网中的性能与功耗平衡实践
  • 低成本汽车LIN从机方案:基于68HC08QT/QY系列MCU的软硬件设计实践
  • ATF1508AS(L) CPLD深度解析:从宏单元架构到开发调试实战
  • GitHub周趋势2026W25 | Headroom 压缩 95% Token、NVIDIA 开源 AI Agent 安全扫描器、Apple macOS 原生 Linux 容器、…
  • 3步快速完成Honey Select 2完整汉化:免费终极补丁指南
  • 2010年-2024年上市公司参与数字技术标准制定情况
  • e6500处理器L2缓存分区与错误处理机制实战解析
  • 全网小说一键下载终极指南:novel-downloader让离线阅读更简单
  • QorIQ P1022嵌入式开发:从硬件架构到Linux BSP构建实战
  • ATtiny85 EEPROM数据丢失排查:低电压与时钟频率的致命影响
  • AVR32SD硬件联动:CCL连接AC与ADC实现纳秒级响应
  • ATF1508AS(L) CPLD开发全解析:从硬件架构到JTAG调试实战
  • 微电网光伏发电经逆变器带负载模型模型研究(Simulink仿真实现)
  • DSP56303主机接口与ESSI编程:异构系统通信与音频处理实战
  • FitGirl游戏启动器:一站式管理你的游戏收藏库
  • ViPER4Windows音频驱动修复工具:3步解决Windows 10/11音效兼容性问题终极指南
  • 九江一站式团建服务指南:吃喝玩乐全包含攻略
  • 哔咔漫画下载器:打造您的个人离线漫画图书馆
  • AVR单片机TCA/TCB定时器中断配置与调试实战指南