如何用Java调用DALL-E 3获取图片URL?代码报错模型不存在
解决调用DALL-E 3 API时模型不存在的问题
你的代码有几个核心错误,导致模型不存在的报错,逐一修正即可:
- API端点用错了:
/v1/completions是GPT等文本模型的接口,DALL-E生成图片必须用/v1/images/generations这个端点。 - 模型名称写错了:DALL-E 3的正确模型ID是
dall-e-3,不是dall-e-003。 - 参数不匹配:
max_tokens是文本生成模型的参数,DALL-E完全不需要这个,应该换成DALL-E专属参数,比如生成图片的数量n、尺寸size等。 - JSON拼接有隐患:直接用字符串拼接生成JSON,一旦prompt里有引号就会导致格式错误,实际项目里建议用Jackson或Gson这类库来构建请求体。
修正后的代码示例:
import okhttp3.*; import java.io.IOException; public class OpenAIDALL_EClient { private static final String OPENAI_API_KEY = "your_openai_api_key"; // 修正图片生成的API端点 private static final String OPENAI_API_ENDPOINT = "https://api.openai.com/v1/images/generations"; public static void main(String[] args) { String prompt = "generate a little robot"; String imageUrl = callOpenAIDALL_EAndReturnImage(prompt); System.out.println("Image URL: " + imageUrl); } private static String callOpenAIDALL_EAndReturnImage(String prompt) { OkHttpClient client = new OkHttpClient(); // 修正模型名,替换为DALL-E可用参数 String json = "{\"model\":\"dall-e-3\", \"prompt\":\"" + prompt + "\", \"n\":1, \"size\":\"1024x1024\"}"; RequestBody requestBody = RequestBody.create(json, MediaType.parse("application/json")); Request request = new Request.Builder() .url(OPENAI_API_ENDPOINT) .header("Content-Type", "application/json") .header("Authorization", "Bearer " + OPENAI_API_KEY) .post(requestBody) .build(); try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { String responseBody = response.body().string(); // 实际项目建议用JSON解析库提取图片URL,比如用org.json: // JSONObject responseObj = new JSONObject(responseBody); // return responseObj.getJSONArray("data").getJSONObject(0).getString("url"); return responseBody; } else { System.out.println("OpenAI API request failed with response: " + response.body().string()); } } catch (IOException e) { e.printStackTrace(); } return null; } }
如果要精准获取图片URL,记得引入JSON解析库,解析响应体里的data[0].url字段,上面代码里注释了用org.json库的示例。
内容的提问来源于stack exchange,提问作者jun wang
相关产品推荐
相关产品推荐

