python3を使用してopenaiのAPIを呼び出し、openaiのアクセスエラーとAPIConnectionErrorを解決します。
前提として、openai ライブラリをインストールし、キーを取得するために自分の chatgpt アカウントを登録する必要があります。その後、壁を越えたソフトウェアの恩恵を受けて、コンテキスト内で AI とのチャットを開始できるようになります。
pip install openai
1. openai を呼び出して完全な結果を直接返します。
import openai
openai.api_key = 'your key'
messages = [{
"role": "system", "content": '欢迎使用openai!' }]
model = 'gpt-3.5-turbo'
def generate(desc):
# 避免传入的messages内容过大,保持最新的5条数据
if len(messages) > 5:
messages[-5:]
messages.append({
"role": 'user',
"content": desc
})
try:
response = openai.ChatCompletion.create(
model=model,
messages=messages,
# 控制输出的多样性,0-1,其中0表示最保守的输出,1表示最多样化的输出。
temperature=0.5,
# 输出的最大长度(输入+输出的token不能大于模型的最大token),可以动态调整
max_tokens=1500,
# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性
frequency_penalty=0.2,
# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性
presence_penalty=0.15,
)
messages.append({
"role": response['choices'][0]['message']['role'],
"content": response['choices'][0]['message']['content']
})
print(f'收到的完成数据: {response['choices'][0]['message']}')
except Exception as err:
print(err)
return f'OpenAI API 异常: {
err}'
2、ストリーム処理 stream=True
tornado.websocket を通じて Web インターフェイスに表示すると、回答の説明がページ上にそのまま表示されます。それが効果です
import openai
openai.api_key = 'your key'
messages = [{
"role": "system", "content": '欢迎使用openai!' }]
model = 'gpt-3.5-turbo'
def streamhandle(desc):
# 避免传入的messages内容过大,保持最新的5条数据
if len(messages) > 5:
messages[-5:]
messages.append({
"role": 'user',
"content": desc
})
try:
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0.5,
max_tokens=1500,
frequency_penalty=0.2,
presence_penalty=0.15,
stream=True,
)
content = {
'role': '', 'content': ''}
for event in response:
if event['choices'][0]['finish_reason'] == 'stop':
print(f'收到的完成数据: {
content}')
break
for delta_k, delta_v in event['choices'][0]['delta'].items():
print(f'流响应数据: {
delta_k} = {
delta_v}')
content[delta_k] += delta_v
messages.append(content) # 直接在传入参数 messages 中追加消息
except Exception as err:
print(err)
openai の呼び出しプロセスにおけるエラーと解決策を記録します。
1. 接続タイムアウトまたはアクセスエラー
解決策: openai パッケージ
(xxxx\Python\Python38\site-packages\openai) にある api_requestor.py ファイルを変更します。
プロキシのポート設定は、ファイアウォール ソフトウェアによって提供されるポートと一致している必要があることに注意してください。
proxy={
'http': '127.0.0.1:7890', # 端口=翻墙软件提供的端口
'https': '127.0.0.1:7890',
}
if not hasattr(_thread_context, "session"):
_thread_context.session = _make_session()
try:
result = _thread_context.session.request(
method,
abs_url,
headers=headers,
data=data,
files=files,
stream=stream,
timeout=request_timeout if request_timeout else TIMEOUT_SECS,
proxies=proxy
)
上記の操作を完了し、再度 openai サービスを呼び出すと、次のエラーが発生する場合があります。
APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000144FDC24E48>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))
urllib3 パッケージのバージョンを 1.25 に制御することで、APIConnectionError エラーの問題を解決します。