SpringAI——提示词(Prompt)、提示词模板(PromptTemplate)

Prompt 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。

最开始Prompt只是单纯的文本文字,后面可以包含占位符,可以识别消息的角色。

比如包含占位符的Prompt,也就是我们讲的消息模板(PromptTemplate),可以通过消息模板动态创建Prompt.

复制代码
@RestController
@RequestMapping("/ai/v1")
public class PromptController {
    @Autowired
    private ChatModel chatModel;
    @RequestMapping("/prompt/chat")
    public String chat(String role,String input) {
        PromptTemplate promptTemplate = new PromptTemplate("现在你作为一个${role},请根据你的专业知识回答我的问题," +
                "如果不是你的专业领域的请拒绝回答,直接说不知道,不要做任何解释," +
                "好的,接下来请回答我的问题:${input}");
        Prompt prompt = promptTemplate.create(Map.of("role", role, "input", input));
        return chatModel.call(prompt).getResult().getOutput().getContent();
    }
}

识别消息的角色:

Prompt 中的主要角色(Role)包括:

  • 系统角色(System Role):指导 AI 的行为和响应方式,设置 AI 如何解释和回复输入的参数或规则。这类似于在发起对话之前向 AI 提供说明。
  • 用户角色(User Role):代表用户的输入 - 他们向 AI 提出的问题、命令或陈述。这个角色至关重要,因为它构成了 AI 响应的基础。
  • 助手角色(Assistant Role):AI 对用户输入的响应。这不仅仅是一个答案或反应,它对于保持对话的流畅性至关重要。通过跟踪 AI 之前的响应(其"助手角色"消息),系统可确保连贯且上下文相关的交互。助手消息也可能包含功能工具调用请求信息。它就像 AI 中的一个特殊功能,在需要执行特定功能(例如计算、获取数据或不仅仅是说话)时使用。
  • 工具/功能角色(Tool/Function Role):工具/功能角色专注于响应工具调用助手消息返回附加信息。

Prompt 类充当有组织的一系列 Message 对象和请求 ChatOptions 的容器。每条消息在提示中都体现了独特的角色,其内容和意图各不相同。这些角色可以包含各种元素,从用户查询到 AI 生成的响应再到相关背景信息。这种安排可以实现与 AI 模型的复杂而详细的交互,因为提示是由多条消息构成的,每条消息都被分配了在对话中扮演的特定角色。

比如下面的Demo:

复制代码
@RequestMapping("/prompt/chat1")
    public String chat1(String input){
        UserMessage userMessage = new UserMessage(input);
        SystemMessage systemMessage = new SystemMessage("你是一个助手,请回答我的问题");
        Prompt prompt = new Prompt(systemMessage, userMessage);
        return chatModel.call(prompt).getResult().getOutput().getContent();
    }

SystemMessage,UserMessage都代表了不同角色的Message,Prompt可以区分不同的角色消息

Message又有一个消息类型

MessageType是一个枚举类

相关推荐
weixin_449290016 小时前
Dify 三模式安全配置清单
ai
二哈赛车手7 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
Yolanda947 小时前
【人工智能】《从零搭建AI问答助手项目(九):Prompt优化》
人工智能·prompt
栗子~~7 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8297 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
Agent手记9 小时前
异常考勤智能预警与处理与流程优化方案 | 基于企业级Agent的超自动化实战教程
运维·人工智能·ai·自动化
未若君雅裁9 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记10 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI10 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务