使用Retrofit调用OpenAI API无法获取REST结果求助
调用OpenAI API持续报错,求问题排查方案
我搜索许久未找到有效解决方案,调用OpenAI API时持续报错,报错提示为Invalid model: text-davinci-003。相关代码如下:
RetrofitInstance
class RetrofitInstance { companion object{ private lateinit var RETROFIT: Retrofit private var client = OkHttpClient.Builder().apply { addInterceptor(ChatGPTInterceptor()) }.build() fun getRetrofitInstance(pathUrl: String): Retrofit{ if(!::RETROFIT.isInitialized){ RETROFIT = Retrofit.Builder() .baseUrl(pathUrl) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build() } return RETROFIT } } }
ChatGPTInterceptor
class ChatGPTInterceptor: Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val proceed = chain.request() .newBuilder() .addHeader("content-type", "application/json") .addHeader("X-RapidAPI-Key", "Key-Censored") .addHeader("X-RapidAPI-Host", "openai80.p.rapidapi.com") .build() return chain.proceed(proceed) } }
MainActivity
val sendMessageModel = SendMessageModel("user", binding.inputText.text.toString()) val realSendMessageModel = RealSendMessageModel("text-davinci-003", arrayListOf(sendMessageModel)) val retrofitInstance = RetrofitInstance.getRetrofitInstance("https://openai80.p.rapidapi.com/") val endpoint = retrofitInstance.create(ChatGPTEndpoint::class.java) val callback = endpoint.getRetrofitAnswer(realSendMessageModel) callback.enqueue(object: Callback<AnswerModel>{ override fun onResponse(call: Call<AnswerModel>, response: Response<AnswerModel>) { val s = response } override fun onFailure(call: Call<AnswerModel>, t: Throwable) { val s = t } })
ChatGPTEndpoint
interface ChatGPTEndpoint { @POST("chat/completions") fun getRetrofitAnswer(@Body message: RealSendMessageModel): Call<AnswerModel> }
排查及修复方案
- 模型与接口不匹配:
chat/completions接口仅支持GPT-3.5/4系列聊天模型(如gpt-3.5-turbo),text-davinci-003是文本补全模型,对应completions接口。要么将接口路径改为completions,要么把模型参数换成gpt-3.5-turbo。 - Retrofit单例逻辑错误:当前单例实现会导致第一次初始化后,后续传入不同baseUrl也会复用旧实例,可能引发地址错误。建议去掉初始化判断,每次调用创建新实例,或者按baseUrl缓存不同实例。
- 错误信息捕获不全:当前
onResponse未处理非成功响应,建议添加错误体打印,获取详细报错信息:override fun onResponse(call: Call<AnswerModel>, response: Response<AnswerModel>) { if (response.isSuccessful) { // 处理成功结果 } else { val errorMsg = response.errorBody()?.string() ?: "未知错误" Log.e("API_ERROR", errorMsg) } } - 验证RapidAPI配置:确认
X-RapidAPI-Key有效,且订阅权限覆盖目标接口,同时检查后台是否有请求超限等限制。
内容的提问来源于stack exchange,提问作者Antony Lajes
相关产品推荐
相关产品推荐

