调用OpenAI API请求无效无响应,排查curl与Java代码问题
排查OpenAI API请求无效问题的修复方案
curl命令的错误与修复
- API路径错误:
/v1/text/generations是已废弃的旧端点,正确的文本补全端点为/v1/completions。 - 请求体格式错误:直接传递字符串不属于合法JSON结构,需构造包含
prompt和model字段的JSON对象。 - 缺少认证头:请求必须携带
Authorization头完成API密钥验证。
修复后的curl命令:
curl -XPOST -H "Content-type: application/json" -H "Authorization: Bearer YOUR_API_KEY" -d '{"prompt":"What is the Capital of France ?", "model":"text-davinci-002", "max_tokens":2048}' 'https://api.openai.com/v1/completions'
Java代码的错误与修复
- API端点错误:将
API_URL修改为正确的https://api.openai.com/v1/completions。 - 手动拼接JSON的风险:直接拼接字符串会导致prompt含特殊字符(如引号)时JSON格式失效,建议用JSON序列化库(如Gson)构造请求体。
- 响应处理不严谨:未检查响应状态,应先判断请求是否成功再读取响应体,便于定位错误。
修复后的Java代码示例(使用Gson):
import com.google.gson.Gson; import okhttp3.*; import java.io.IOException; public class OpenAI { private static final String API_URL = "https://api.openai.com/v1/completions"; private static final String API_KEY = "MY_API_KEY"; private static final Gson gson = new Gson(); static class CompletionRequest { String prompt; String model; int max_tokens; CompletionRequest(String prompt, String model, int maxTokens) { this.prompt = prompt; this.model = model; this.max_tokens = maxTokens; } } public static String generateText(String prompt) throws IOException { OkHttpClient client = new OkHttpClient(); CompletionRequest requestBody = new CompletionRequest(prompt, "text-davinci-002", 2048); String jsonBody = gson.toJson(requestBody); Request request = new Request.Builder() .url(API_URL) .addHeader("Authorization", "Bearer " + API_KEY) .addHeader("Content-Type", "application/json") .post(RequestBody.create(MediaType.parse("application/json"), jsonBody)) .build(); Response response = client.newCall(request).execute(); if (!response.isSuccessful()) { throw new IOException("Request failed with code: " + response.code() + ", message: " + response.body().string()); } return response.body().string(); } }
额外注意事项:
- 需将
MY_API_KEY替换为你的有效OpenAI API密钥。 text-davinci-002模型仍可使用,但OpenAI推荐使用更新的gpt-3.5-turbo-instruct模型,只需修改model参数即可,端点保持不变。
内容的提问来源于stack exchange,提问作者Amul Bhatia
相关产品推荐
相关产品推荐

