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
相关产品推荐
相关产品推荐

