Java枚举类适合封装固定结构化的大模型Prompt模板,提供类型安全、插值逻辑封装与可维护性;每个枚举项代表一类语义明确的Prompt,内置模板字符串和apply(Map)方法支持占位符替换,并可扩展条件片段与多级组合,且与LLM客户端解耦。

Java枚举类非常适合封装固定但结构化的大模型 Prompt 模板,既能保证类型安全、避免硬编码字符串,又能通过方法封装插值逻辑,实现清晰、可维护、易复用的模板管理。
用枚举统一管理 Prompt 模板
每个枚举常量代表一类语义明确的 Prompt(如“代码生成”“摘要提取”“问答增强”),内部直接定义原始模板字符串,并提供标准化的构建入口。相比静态常量或配置文件,枚举天然具备单例性、不可变性和可枚举性,便于 IDE 提示和编译期校验。
- 模板字符串建议使用三重双引号(Java 15+)或 StringBuilder 拼接,保持可读性
- 避免在枚举中直接拼接业务参数——只存原始模板,插值交给专用方法
- 可为每个枚举项添加描述字段(如 description),用于日志或调试
设计通用插值方法:支持占位符与类型安全替换
在枚举中定义 apply(Map<String, Object> params) 方法,统一处理 {key} 或 ${key} 类型占位符。不依赖正则反复匹配,而是遍历参数 Map 逐个替换,兼顾性能与可控性。
- 推荐使用
String.replace("{" + key + "}", value.toString()),简单可靠,避免正则转义问题 - 对 null 值做默认处理(如替换为空字符串或抛出 IllegalArgumentException)
- 支持嵌套对象:若 value 是 POJO,可调用
Objects.toString(value)或自定义 toString 逻辑
扩展支持条件片段与多级模板组合
复杂 Prompt 往往含可选段落(如“是否附带示例”“是否启用思维链”)。可在枚举中定义辅助方法,如 withExamples(List<String> examples),返回新构建的 Prompt 字符串,而非修改原模板。
立即学习“Java免费学习笔记(深入)”;
- 用
StringBuilder拼接主模板 + 条件块,比字符串拼接更高效 - 将常用片段(如 system role、few-shot 示例块)也声明为独立枚举项,通过组合调用复用
- 避免在枚举中引入外部依赖(如 JSON 库),保持轻量;JSON 序列化逻辑应由调用方处理
集成到实际调用链:与 LLM Client 解耦协作
枚举只负责模板生成,不感知 HTTP 请求或模型厂商。典型用法是:构造参数 Map → 调用枚举的 apply() → 将结果传给统一的 RequestBuilder 或 Client 封装类。
- 参数 Map 的 key 名需与模板中占位符严格一致,建议用常量类或 record 定义契约
- 可配合 Builder 模式封装参数组装过程(如
PromptParams.builder().topic("Java").level("advanced").build()) - 单元测试重点覆盖:空参数、缺失 key、特殊字符(如换行、单双引号)、超长文本截断等边界场景


















