支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Spring AI 提示词(prompts)

发布日期:2025-06-23 08:48:11 浏览次数: 1535
作者:SpringAI

微信搜一搜,关注“SpringAI”

推荐语

Spring AI 提示词(prompts)详解:掌握模型调用的核心配置技巧,提升AI交互效率。

核心内容:
1. Spring AI中Prompt类的结构与功能解析
2. 四种Message角色的划分与应用场景
3. ChatOptions参数配置对模型输出的影响机制

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

 

Spring AI Prompts

prompt是指向模型提供的输入文本或指令,用于引导模型生成特定类型的响应。

在Spring AI中,prompt 并不只是输入文本,还包括了模型掉调用的可选参数ChatOptions

Spring AI提供了ChatModel、ChatClient两种调用模型的方式,这两种方式配置prompt的方式略有不同。

本节将介绍ChatModel、ChatClient两种方式配置prompt,以及promptTemplate的使用。

Prompt Class

Spring AI通过Prompt类,来存储输入文本List<message>,和模型可选参数ChatOptions

public class Prompt implements ModelRequest<List<Message>> {

    private final List<Message> messages;

    private ChatOptions chatOptions;
}

message

Message按照角色划分又分为四种:

  • • System Role:指导AI的行为和响应风格,设置AI解释和回复输入的参数或规则。
  • • User Role:用户的输入——用户对AI提出的问题、命令或陈述。
  • • Assistant Role:AI对用户输入的回应。
  • • Tool/Function role:工具/函数执行后,将信息反馈给模型。

Assistant会在ChatMemory中讲解,主要用来实现模型记忆功能,因为所有模型都是无状态的,因此记忆本质就是将用户与模型的历史对话记录传给模型。

Tool/Function在Tool Calling中讲解,同ChatMemory搭配使用,回复模型的调用Tool请求。SpringAI中会判断模型是否调用工具,如果是则执行工具,并将历史对话和工具调用结果全部放入Prompt的List<Message>中,然后递归请求模型,以此来实现模型的反复工具调用。

ChatOptions

ChatOptions 提供可选的模型配置参数,下面列出默认可选参数。

// 模型名称
private String model;
// 频率惩罚系数,用户降低模型重复生成某些词或短语的频率。值越大,模型越倾向于避免重复
private Double frequencyPenalty;
// 限制模型生成的文本(token)长度。
private Integer maxTokens;
// 存在惩罚系数,用于惩罚模型生成已经出现过的词或短语。值越大,模型越倾向于生成新的内容。
private Double presencePenalty;
//停止序列列表。指定一系列字符串,当模型生成这些字符串中的任何一个时,生成过程将停止。用于控制生成文本的结束位置。
private List<String> stopSequences;
// 温度参数。控制模型生成文本的随机性。值越高,生成的文本越随机;值越低,生成的文本越确定和集中。
private Double temperature;
// Top-K采样参数。在生成下一个词时,从概率最高的K个候选词中随机选择。值越小,生成的文本越集中;值越大,生成的文本越多样。
private Integer topK;
Top-P(核采样)参数,在生成下一个词时,从累积概率最高的P%的候选词中随机选择。例如,topP=0.9表示选择累积概率达到90%的候选词。值越小,生成的文本越集中;值越大,生成的文本越多样。
private Double topP

除了默认可选参数外,每个大模型可能会提供额外的参数,这里就不再列出了,讲到具体模型时,我们会详细介绍。

准备

搭建SpringBoot项目、添加SpringAI依赖、配置Open AI参数,请大家直接看Spring AI入门这篇。

因为众所周知的原因,我们不能直接访问国外网站。如果有需要Open AI 代理地址,请关注公众号,点击菜单apikey 免费获取!

ChatClient调用

ChatClient是Spring AI与模型交互的最高级API,调用prompt()方法获取request配置类,我们可以使用流式调用传入system、user、options、tools等信息。

@RequestMapping("/chat")
@RestController
publicclass ChatController {

    privatefinal ChatClient chatClient;

    public ChatController(ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/ai")
    String generation (String userInput) {
        // 定义模型参数
        DefaultChatOptions chatOptions newDefaultChatOptions();
        chatOptions.setModel("o4-mini");
        chatOptions.setTemperature(0.7);
        // 通过chatClient传入system指令和user请求,并将我们定义的模型参数传入
        return this.chatClient.prompt()
                .system("你的名字叫SpringAI,你是Java语言AI框架,你可以提供关于Java开发AI的能力。")
                .user(userInput)
                .options(chatOptions)
                .call()
                .content();
    }
}
浏览器访问http://localhost:8080/chat/ai?userInput=你叫什么名字?,直观的看到,通过System传入的指令已经生效。

ChatModel调用

ChatModel 类是 Spring AI 框架中用于与聊天模型交互的底层核心接口,通过简化的 API 设计和模块化的结构,方便开发者快速集成和使用各种 AI 聊天功能。

由于我们使用的是OpenAI,这里使用OpenAiChatModel来演示。

@RequestMapping("/model")
@RestController
publicclassModelController {

    @RequestMapping("ai")
    public String ai(String userInput) {
        // 定义模型参数
        OpenAiChatOptions chatOptions new OpenAiChatOptions();
        chatOptions.setModel("o4-mini");
        chatOptions.setTemperature(0.7);

        // 定义prompt
        SystemMessage systemMessage = SystemMessage.builder().text("你的名字叫SpringAI,你是Java语言AI框架,你可以提供关于Java开发AI的能力。").build();
        UserMessage userMessage = UserMessage.builder().text(userInput).build();
        Prompt prompt new Prompt(systemMessage, userMessage);

        // 自定义chatModel,必须传入自定义请求参数,定义OpenAiApi
        OpenAiApi openAiApi = OpenAiApi.builder()
                .apiKey(System.getenv("API_KEY"))
                .baseUrl(System.getenv("BASE_URL"))
                .build();

        // 调用模型
        return OpenAiChatModel.builder()
                .openAiApi(openAiApi)
                .defaultOptions(chatOptions)
                .build()
                .call(prompt)
                .getResults().get(0).getOutput().getText();
    }
}
浏览器访问http://localhost:8080/model/ai?userInput=你叫什么名字?

PromptTemplate

Spring AI 中用于提示模板化的关键组件是 PromptTemplate 类,该类旨在创建结构化的提示,然后将其发送到 AI 模型进行处理.

这个类使用TemplateRenderer API来渲染模板。Spring AI默认使用StringTemplate引擎的StTemplatRenderer实现,通过{}语法标识模板变量,我们也可以自定义配置分隔符。

下面使用自定义StringTemplate渲染器,并使用'<'和'>'作为分隔符的示例:

@RestController
@RequestMapping("/template")
publicclass PromptTemplateController {
    privatefinal ChatClient chatClient;

    public PromptTemplateController (ChatClient.Builder chatClientBuilder) {
        this.chatClient = chatClientBuilder.build();
    }

    @GetMapping("/ai")
    String generation(String userInput) {
        // 通过模板创建prompt
        PromptTemplate promptTemplate = PromptTemplate.builder()
                .renderer(StTemplateRenderer.builder().startDelimiterToken('<').endDelimiterToken('>').build())
                .template("""
            告诉我<name>的5首歌曲
            """
)
                .build();
        String prompt= promptTemplate.render(Map.of("name", userInput));

        // 通过chatClient传入system指令和user请求,并将我们定义的模型参数传入
        return this.chatClient.prompt(prompt)
                .call()
                .content();
    }
}
浏览器访问:http://localhost:8080/template/ai?userInput=周传雄

最后

在生成式人工智能中,提示词的编写是研发人员的一项关键任务。 高质量结构的提示词对人大模型输出效果有显著影响。 我门应该投入时间和精力在提示词设计上,这是值得的。

 

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询