You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring AI中使用StringTemplate构建Prompt时抛出STException: null异常求助

Spring AI中使用StringTemplate构建Prompt时抛出STException: null异常求助

嗨,我看你在Spring AI里用PromptTemplate构建提示词的时候碰到了STException: null的问题,我之前也遇到过类似情况,给你几个排查和解决的方向:

先贴出你提供的代码片段方便分析:

private TransactionRecord validateTransactionWithOpenAI(TransactionRecord transaction) {
    // Construct the prompt for OpenAI
    // Create a PromptTemplate with placeholders
    PromptTemplate promptTemplate = new PromptTemplate("""
                Given the following transaction details, check if the values are correct especially the category and business name based on the context data:
                Transaction: {transaction}
                {format}
            """);

    Prompt prompt = promptTemplate.create(Map.of(
            "transaction", transaction.toString(),
            "format", transactionRecordConverter.getFormat()
    ));

    log.debug("Prompt: {} \n {}", prompt.getContents(), prompt.getInstructions());
    String response = openAiClient.prompt(prompt).call().content();
    // ... 后续代码
}

可能的原因及解决办法:

  • 占位符对应的值为null:
    StringTemplate默认不允许用null值填充占位符,如果你代码里的transactionRecordConverter.getFormat()返回了null,或者transaction本身是null导致transaction.toString()抛出异常(这种情况可能间接引发STException),就会触发这个报错。
    解决方式是提前对参数做非空校验,或者给默认值兜底:

    Prompt prompt = promptTemplate.create(Map.of(
            "transaction", transaction != null ? transaction.toString() : "无交易信息",
            "format", Optional.ofNullable(transactionRecordConverter.getFormat()).orElse("")
    ));
    
  • 模板字符串的语法问题:
    检查你的多行模板字符串有没有语法错误,比如占位符的拼写是否和Map里的key完全一致,有没有多余的特殊字符或者换行导致解析失败。可以先简化模板做测试,比如用一行简单的模板验证是否能正常运行,再逐步还原成原来的模板内容,定位问题点。

  • 版本兼容性问题:
    部分旧版本的Spring AI在处理PromptTemplate的null值或者多行字符串时可能存在bug,你可以尝试升级到Spring AI的最新稳定版本,看看问题是否消失。

备注:内容来源于stack exchange,提问作者Jackie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 11:23:16