OpenAI のテキスト生成モデルを使用する場合、デフォルトではモデルの出力は非確定性です。これは、同じプロンプトを入力しても、リクエストごとに出力が異なる可能性があることを意味します。しかし、特定のシナリオでは、結果の再現性を確保するために確定性のある出力を希望する場合があります。OpenAI はこれを実現するための2つの重要なツールを提供しています:seed
パラメータと system_fingerprint
レスポンスフィールドです。
本記事では、seed
と system_fingerprint
を使用して OpenAI API の出力を制御し、確定性を確保する方法について詳しく説明します。
1. 確定性出力とは?
確定性出力とは、同じ入力条件下でモデルが毎回同じ出力を生成することを指します。これは、実験、テスト、デバッグなど、再現性が必要なタスクにおいて非常に重要です。
デフォルトでは、OpenAI のモデル出力は非確定性です。これは、モデルがテキストを生成する際に一定のランダム性を導入するためです。しかし、seed
パラメータを設定することで、このランダム性を制御し、確定性のある出力を得ることができます。
2. seed
パラメータを使用して確定性出力を実現する
seed
は、モデルがテキストを生成する際のランダム性を制御するための整数パラメータです。同じ seed
値を設定することで、同じ入力条件下でモデルの出力を一貫させることができます。
seed
パラメータの使用方法:
-
seed
パラメータを任意の整数(例:seed=42
)に設定します。 - 確定性のある出力を必要とするリクエストで、同じ
seed
値を使用します。 - 他のパラメータ(
prompt
やtemperature
など)が各リクエストで完全に同じであることを確認します。
サンプルコード:
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "春についての短い文章を書いてください。"}],
seed=42 # seed パラメータを設定
)
print(response.choices[0].message.content)
注意点:
-
seed
値が同じで他のパラメータも一致する場合、モデルの出力は一貫します。 - OpenAI がモデル設定に必要な変更を加えた場合、出力の確定性に影響を与える可能性があります。この場合、
system_fingerprint
フィールドを使用してこれらの変更を検出できます。
3. system_fingerprint
を使用してモデル設定の変更を追跡する
system_fingerprint
は、OpenAI API のレスポンスに含まれるフィールドで、モデル設定の現在の状態を識別するために使用されます。OpenAI がモデルを更新または変更した場合、system_fingerprint
の値が変わる可能性があります。
system_fingerprint
の使用方法:
- API レスポンスで
system_fingerprint
フィールドを確認します。 -
system_fingerprint
の値が変わった場合、モデル設定が更新されたことを意味し、出力の確定性に影響を与える可能性があります。 - 完全な確定性出力が必要な場合は、同じ
system_fingerprint
値の下でテストとデプロイを行うようにしてください。
サンプルコード:
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "春についての短い文章を書いてください。"}],
seed=42
)
print("出力内容:", response.choices[0].message.content)
print("system_fingerprint:", response.system_fingerprint)
注意点:
-
system_fingerprint
の変更は、通常、OpenAI によるモデルの最適化や更新が原因です。 -
system_fingerprint
の変更により出力が一貫しなくなった場合は、seed
や他のパラメータを調整して再び確定性を確保してください。
4. まとめ
seed
パラメータと system_fingerprint
フィールドを組み合わせて使用することで、OpenAI API の出力を効果的に制御し、確定性を確保することができます。以下は重要なポイントのまとめです:
-
seed
パラメータ:固定の整数値を設定することで、モデルがテキストを生成する際のランダム性を制御し、確定性出力を実現します。 -
system_fingerprint
フィールド:モデル設定の変更を検出し、出力が一貫しない原因を理解するのに役立ちます。
実際のアプリケーションでは、再現性が必要なタスクでは常に seed
パラメータを使用し、定期的に system_fingerprint
をチェックしてモデル設定の一貫性を確保することをお勧めします。
本記事が、OpenAI API の確定性出力機能を理解し、使用する上でお役に立てば幸いです!ご質問やご意見がありましたら、コメント欄でお気軽にご相談ください。
参考資料: