zhou zhou
16 小时以前 80a6d9236ade191a5de0975abe4de5a6e7e63915
rsf-server/src/main/java/com/vincent/rsf/server/ai/service/impl/AiPromptRenderSupport.java
@@ -17,6 +17,10 @@
    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()
@@ -26,6 +30,11 @@
                .build();
    }
    /**
     * 只渲染用户消息模板。
     * 如果模板没有消费任何变量,则保留模板原文并把用户输入附加到末尾,
     * 这样可以显式暴露“模板未生效”的问题,而不是静默吞掉输入。
     */
    public String renderUserPrompt(String userPromptTemplate, String input, Map<String, Object> metadata) {
        if (!StringUtils.hasText(userPromptTemplate)) {
            return input;
@@ -38,6 +47,7 @@
    }
    private String renderTemplate(String template, String input, Map<String, Object> metadata) {
        /** 渲染任意模板片段;空模板保持原样返回。 */
        if (!StringUtils.hasText(template)) {
            return template;
        }
@@ -45,6 +55,10 @@
    }
    private String replaceTemplateVariables(String template, String input, Map<String, Object> metadata) {
        /**
         * 统一处理 `{{input}}`、`{input}` 以及 metadata 里的占位变量替换。
         * 这里使用朴素替换而不是脚本执行,目的是让模板行为稳定、可预期、易排查。
         */
        String rendered = template
                .replace("{{input}}", input)
                .replace("{input}", input);
@@ -60,6 +74,7 @@
    }
    private List<String> resolveVariables(String systemPrompt, String userPromptTemplate, Map<String, Object> metadata) {
        /** 收集当前 Prompt 中显式出现过的变量名,用于前端展示。 */
        LinkedHashSet<String> variables = new LinkedHashSet<>();
        collectVariables(variables, systemPrompt);
        collectVariables(variables, userPromptTemplate);
@@ -70,6 +85,7 @@
    }
    private void collectVariables(LinkedHashSet<String> variables, String template) {
        /** 扫描模板文本中的占位变量并按出现顺序去重。 */
        if (!StringUtils.hasText(template)) {
            return;
        }