在 Spring AI 中,Prompt
和 PromptTemplate
是构建有效 AI 交互的核心工具,其作用及示例如下:
1. Prompt
的作用
- 封装输入:将用户问题、指令和上下文包装为结构化请求,作为
AiClient
的输入。 - 包含元数据:可附加角色信息(如
SystemMessage
设定 AI 行为)、历史对话等。 - 示例:
Prompt prompt = new Prompt("用一句话解释量子计算");
2. PromptTemplate
的作用
- 动态生成提示词:通过模板引擎将变量注入预定义模板,生成最终
Prompt
对象。 - 避免硬编码:解耦业务逻辑与提示文本,提升可维护性。
- 标准化格式:确保提示词结构清晰(如包含指令、示例、约束)。
3. 示例:动态生成提示词
场景
根据用户选择的“编程语言”和“功能描述”,生成代码实现提示。
步骤
-
定义模板(使用
{ }
占位符):String template = """ 你是一名资深{language}开发工程师。请根据以下功能描述,生成符合{language}最佳实践的代码: ##### 功能描述 ##### {description} ##### 要求 ##### 1. 添加详细注释 2. 使用高效实现 """;
-
创建
PromptTemplate
:PromptTemplate promptTemplate = new PromptTemplate(template);
-
注入变量,生成
Prompt
:Map<String, Object> variables = new HashMap<>(); variables.put("language", "Python"); // 动态传入语言 variables.put("description", "读取CSV文件并计算某列的平均值"); // 动态功能 Prompt dynamicPrompt = promptTemplate.create(variables);
-
调用 AI:
AiResponse response = aiClient.generate(dynamicPrompt);
生成的最终提示词
你是一名资深Python开发工程师。请根据以下功能描述,生成符合Python最佳实践的代码:
##### 功能描述 #####
读取CSV文件并计算某列的平均值
##### 要求 #####
1. 添加详细注释
2. 使用高效实现
✅ 关键考察点
概念 | 核心作用 | 生产价值 |
---|---|---|
Prompt | 封装 AI 输入(文本 + 元数据) | 统一请求格式,传递上下文 |
PromptTemplate | 动态生成提示词(变量替换) | 避免硬编码,支持个性化请求,提升复用性 |
协作关系 | PromptTemplate → 生成 Prompt → 输入 AiClient | 实现提示词与业务逻辑解耦 |
💡 进阶追问:
“若需在模板中添加安全约束(如‘禁止生成暴力内容’),如何设计确保所有生成的提示词都包含此规则?”
期望答案:在系统消息层固定约束(如创建包含SystemMessage
的Prompt
基类),或通过 AOP 统一追加安全指令。