在调用ChatGpt的API接口时,由于需要科学上网,所以会遇到一些问题,按照调用API接口的目的,可分为两类:
一,调用API搭建对话机器人
报错:openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))
使用别人封装好的接口:
参数名类型长度必须备注apiKeyString64是OpenAI 的 ApiKeysessionIdString64是会话ID,关联上下文,推荐使用UUID作为sessionIdcontentString1000是发送的内容
代码示例如下,只需要将‘apikey’处值修改为自己的apikey即可。
二,调用API接口使用GPT3或者GPT4算法处理相关NLP任务
以概念抽取任务为例:
问题:openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))
解决方案:使用代理(proxy)来解决这个问题
代码示例如下:
这里需要使用你自己实际的代理地址和端口替换
your_proxy_address
和
your_proxy_port
。这样,你的请求将通过指定的代理服务器发送。
这种情况下,由于OpenAI库没有
api_client
属性,所以会报错ttributeError: module 'openai' has no attribute 'api_client',此时需要创建一个继承自
openai.api_resources.completion.Completion
的新类,并重写
_create
方法。在这个新的
_create
方法中,可以指定代理设置。代码如下:
同上,只需要将proxies中的代理地址和端口替换为自己的就可以了。如果这时候还是报错:openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/engines/text-davinci-002/completions (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)')))
那么问题大概就是urllib3的版本问题了,将urllib3的版本退回至1.25.11版本问题就解决。
运行结果如下:
参考链接:
OpenAI API代理 (openai-proxy.com)
解决OpenAI API 挂了 Dai Li 还是连接不上的问题 openai.error.APIConnectionError - 知乎 (zhihu.com)
版权归原作者 qq_43704127 所有, 如有侵权,请联系我们删除。