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

调用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代码的错误与修复

  1. API端点错误:将API_URL修改为正确的https://api.openai.com/v1/completions。
  2. 手动拼接JSON的风险:直接拼接字符串会导致prompt含特殊字符(如引号)时JSON格式失效,建议用JSON序列化库(如Gson)构造请求体。
  3. 响应处理不严谨:未检查响应状态,应先判断请求是否成功再读取响应体,便于定位错误。

修复后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:25:41