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

调用OpenAI生成图片时出现400错误,请求协助排查修复

修复Discord机器人调用OpenAI生成图片的400错误

核心问题排查与修复

1. API密钥不完整

你代码里的API密钥sk-aqe0eRo77gOnnSBR2n7明显是截断状态,OpenAI的API密钥以sk-开头,长度至少50个字符以上。去OpenAI平台复制完整的有效密钥替换掉这个截断的内容。

2. Prompt为空或违规

  • 先确认Discord slash command的text选项确实传了值,不能是空字符串或者undefined。调用OpenAI之前加个校验:
    if (!text || text.trim() === '') {
      return interaction.editReply('得给个有效的图片描述啊');
    }
    
  • 如果用户输入的内容违反OpenAI的内容政策(比如暴力、色情类内容),也会返回400错误,需要限制用户输入的合规性。

3. 未捕获具体错误信息

你现在的代码只在编辑回复时捕获错误,根本看不到OpenAI返回的具体错误原因(比如“无效密钥”“prompt为空”)。必须给openai.createImage加上错误捕获,才能精准定位问题。

修复后的完整代码

const { Configuration, OpenAIApi } = require('openai');
const { EmbedBuilder } = require('discord.js');

const configuration = new Configuration({
    apiKey: '替换成你的完整OpenAI API密钥'
});
const openai = new OpenAIApi(configuration);

async function handleImageGeneration(interaction) {
    try {
        let text = interaction.options.getString('text');

        // 校验输入是否有效
        if (!text || text.trim() === '') {
            return interaction.editReply('请提供有效的图片描述文本');
        }

        const response = await openai.createImage({
            prompt: text.trim(),
            n: 1,
            size: '1024x1024',
        });

        const imageUrl = response.data.data[0].url;
        const embed = new EmbedBuilder()
            .setTitle('生成的图片')
            .setImage(imageUrl);
            
        // Discord.js v14+需要用embeds数组形式传递
        await interaction.editReply({ embeds: [embed] });
    } catch (error) {
        // 打印详细错误到控制台,方便调试
        console.error('OpenAI请求出错:', error.response?.data || error.message);
        let errorMsg = '生成图片失败';
        // 如果OpenAI返回了具体错误信息,直接展示给用户
        if (error.response?.data?.error?.message) {
            errorMsg += `: ${error.response.data.error.message}`;
        }
        await interaction.editReply(errorMsg);
    }
}

额外提醒

  • 确保你用的是Discord.js v14及以上版本,EmbedBuilder和editReply的语法要对应上,v14之后必须用{ embeds: [embed] }这种格式。
  • 检查OpenAI账户有没有可用额度,余额不足也可能导致请求失败(有时候会返回400而不是402)。

内容的提问来源于stack exchange,提问作者Ansh Tyagi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:37:52