Android应用调用Theo Kanning的ChatGPT Java API时遇SocketTimeoutException如何解决
解决OpenAI Java API的SocketTimeoutException超时问题
问题描述
使用Theo Kanning开发的OpenAI Java API时,请求等待约10秒后触发java.net.SocketTimeoutException: timeout错误,尝试过的解决方案要么涉及未使用的OkHttp配置,要么提到项目中不存在的CONTEXT.XML文件,需要可行的超时延长方法。
解决方案
该API底层依赖OkHttp实现网络请求,默认超时时间为10秒。可以通过自定义OkHttpClient并设置超时参数,再传入OpenAiService来延长超时限制,具体步骤如下:
- 创建
OkHttpClient实例,通过newBuilder()设置连接超时、读取超时、写入超时时间(根据需求调整) - 使用包含自定义OkHttpClient的构造器初始化
OpenAiService
修改后的代码示例
// 线程执行部分保持不变 Thread thread = new Thread(new Runnable() { @Override public void run() { try { String response = queryGPT(); System.out.println(response); } catch (Exception e) { System.out.println("There was an error: "+e); } } }); thread.start();
String queryGPT() { String query = myQuery; // 自定义OkHttpClient,设置超时时间(单位:秒) OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build(); // 使用自定义客户端初始化OpenAiService OpenAiService service = new OpenAiService(myKey, client); CompletionRequest request = CompletionRequest.builder() .prompt(myQuery) .model("text-davinci-003") .temperature(0.5) .maxTokens(1500) .frequencyPenalty(0.0) .presencePenalty(0.0) .bestOf(1) .echo(false) .build(); List<CompletionChoice> response = service.createCompletion(request).getChoices(); return response.get(0).getText(); }
说明
- 超时时间可根据实际需求调整,比如请求复杂、返回内容较多时,可设置为60秒甚至更长
- 无需修改CONTEXT.XML或引入额外未使用的依赖,仅需利用API本身提供的构造器扩展能力
内容的提问来源于stack exchange,提问作者TYG
相关产品推荐
相关产品推荐

