PythonでOpenAIのChatGPT APIを使用している際に、TypeError: 'ChatCompletion' object is not subscriptable
というエラーに直面することがあります。
このエラーは、APIの返り値に対してリストや辞書のように添字([]
)を使おうとしたときに発生します。
この記事では、このエラーの原因と具体的な解決方法を解説します。
方法

ここからは、エラーの原因と対処方法を詳しくみていきます。
1. エラーの原因
エラーメッセージ TypeError: 'ChatCompletion' object is not subscriptable
は、openai.chat.completions.create()
の返り値を、リストや辞書のように扱おうとした際に発生します。
この返り値は辞書のように見えますが、実際にはサブスクライブできない([]
でアクセスできない)オブジェクトです。
具体的には、choices
にアクセスする部分で間違いが起きています。
choices
は返り値の中に存在するリストであり、その中から生成されたテキストを取得する必要があります。
2. 正しい返り値へのアクセス方法
エラーを修正するためには、openai.chat.completions.create()の返り値に正しくアクセスする必要があります。
以下に、誤ったコードとその修正方法を示します。
誤ったコード:
response = openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello, how are you?"}
]
)
# ここでエラーが発生
print(response['choices'][0]['message']['content'])
修正後のコード:
openai.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello, how are you?"}
]
)
# 正しい方法でresponseオブジェクトからデータを取得
print(response.choices[0].message.content)
3. 修正後のコードの解説
- response.choices:
choices
は、APIから返される応答のリストです。このリストには複数の候補が含まれる場合がありますが、通常は最初のものを取得します。 - choices[0]: 最初の選択肢にアクセスします。
- message.content: ユーザーに返されるテキスト内容がここに含まれています。
5. まとめ
TypeError: 'ChatCompletion' object is not subscriptable
というエラーは、返り値への誤ったアクセスが原因です。
正しいアクセス方法を理解し、適切にデータを取得することで、このエラーを回避できます。
PythonでのエラーハンドリングやAPIの利用においては、適切な構文を使用することで、より効率的にコードを運用できるでしょう。
正しいデータ取得の方法を覚えて、エラーを避けつつChatGPT APIを最大限に活用してみてください。
コメント