先把当时的情况摆出来。生成医美项目介绍时接口返回 200,但 candidates 是空数组,promptFeedback.blockReason 显示 SAFETY,前端页面拿不到任何文本,只能显示加载失败。
原因不止一个,得分开看。提示词里出现了被判定为敏感的词组。也可能是没有配置 safetySettings,走的是默认较严阈值。
少数情况下是多模态输入里的图片被判定为不适宜内容。不容易想到的是,上游内容审核把整段提示改写过,语义已经偏了。
动手时先把 blockReason 和 safetyRatings 完整打出来
print(resp.prompt_feedback); print(resp.candidates[0].safety_ratings if resp.candidates else 'empty')
显式声明安全类别与阈值后再试
payload['safetySettings']=[{'category':'HARM_CATEGORY_HARASSMENT','threshold':'BLOCK_ONLY_HIGH'}]
接着把长提示拆句,二分定位触发片段
python bisect_prompt.py --file prompt.txt
末了对命中片段做中性改写并留档
python rewrite.py --rule medical_soft
别只看报错消失,验证要多做一步。返回体里 candidates 不为空,finishReason 是 STOP,能拿到完整文本而不是空数组,前端也不再白屏。
补一句。阈值放宽只对部分类别生效,涉及未成年人和自伤内容时即使设成最低档也会被拦,这时只能改写表达而不是继续调参数。这类问题最好一次改到位,反复小改反而容易把原因搅混。