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 | 全局 | 支持文件模板参数 | 企业项目、复杂提示词维护 |
四、核心知识点总结
优先级:单次system提示词 > 全局defaultSystem提示词
动态模板核心:
{key}占位符 +.param(key,value)赋值最佳实践:简单场景用动态模板,复杂项目用外部文件加载Prompt,彻底解耦代码
伪系统Prompt是兼容方案,优先使用标准的system层级提示词
五、结语
以上五种Prompt写法覆盖了 Spring AI 开发中99%的业务场景,从基础固定人设、临时对话配置,到动态参数渲染、企业级文件解耦,层层递进。掌握这五种用法,即可熟练完成AI对话角色定制、提示词优化、动态问答等核心功能开发。
