| | |
| | | |
| | | private static final Pattern VARIABLE_PATTERN = Pattern.compile("\\{\\{?([a-zA-Z0-9_.-]+)}}?"); |
| | | |
| | | /** |
| | | * 同时渲染 System Prompt 和 User Prompt,并回传本次解析到的变量清单。 |
| | | * 该方法用于 Prompt 管理页的预览能力,帮助管理员在不真正调用模型的前提下验证模板结果。 |
| | | */ |
| | | public AiPromptPreviewDto render(String systemPrompt, String userPromptTemplate, String input, Map<String, Object> metadata) { |
| | | String finalInput = input == null ? "" : input; |
| | | return AiPromptPreviewDto.builder() |
| | |
| | | .build(); |
| | | } |
| | | |
| | | /** |
| | | * 只渲染用户消息模板。 |
| | | * 如果模板没有消费任何变量,则保留模板原文并把用户输入附加到末尾, |
| | | * 这样可以显式暴露“模板未生效”的问题,而不是静默吞掉输入。 |
| | | */ |
| | | public String renderUserPrompt(String userPromptTemplate, String input, Map<String, Object> metadata) { |
| | | if (!StringUtils.hasText(userPromptTemplate)) { |
| | | return input; |
| | |
| | | } |
| | | |
| | | private String renderTemplate(String template, String input, Map<String, Object> metadata) { |
| | | /** 渲染任意模板片段;空模板保持原样返回。 */ |
| | | if (!StringUtils.hasText(template)) { |
| | | return template; |
| | | } |
| | |
| | | } |
| | | |
| | | private String replaceTemplateVariables(String template, String input, Map<String, Object> metadata) { |
| | | /** |
| | | * 统一处理 `{{input}}`、`{input}` 以及 metadata 里的占位变量替换。 |
| | | * 这里使用朴素替换而不是脚本执行,目的是让模板行为稳定、可预期、易排查。 |
| | | */ |
| | | String rendered = template |
| | | .replace("{{input}}", input) |
| | | .replace("{input}", input); |
| | |
| | | } |
| | | |
| | | private List<String> resolveVariables(String systemPrompt, String userPromptTemplate, Map<String, Object> metadata) { |
| | | /** 收集当前 Prompt 中显式出现过的变量名,用于前端展示。 */ |
| | | LinkedHashSet<String> variables = new LinkedHashSet<>(); |
| | | collectVariables(variables, systemPrompt); |
| | | collectVariables(variables, userPromptTemplate); |
| | |
| | | } |
| | | |
| | | private void collectVariables(LinkedHashSet<String> variables, String template) { |
| | | /** 扫描模板文本中的占位变量并按出现顺序去重。 */ |
| | | if (!StringUtils.hasText(template)) { |
| | | return; |
| | | } |