「TypeError: ‘ChatCompletion’ object is not subscriptable」エラーの解決方法

ChatGPT

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を最大限に活用してみてください。

コメント

タイトルとURLをコピーしました