ホームページ > テクノロジー周辺機器 > AI > OpenAI構造化された出力を開始します

OpenAI構造化された出力を開始します

Lisa Kudrow
リリース: 2025-03-04 09:37:10
オリジナル
412 人が閲覧しました

Getting Started With OpenAI Structured Outputs

2024年8月、OpenaiはAPIで強力な新機能を発表しました。これは構造化された出力です。この機能を使用すると、名前が示すように、LLMSが指定した形式でのみ応答を生成するようにすることができます。この機能により、正確なデータフォーマットが必要なアプリケーションの構築が大幅に容易になります。 

このチュートリアルでは、OpenAI構造化された出力を開始する方法を学び、その新しい構文を理解し、その主要なアプリケーションを調査します。

決定論的応答、つまり、一貫したフォーマットの応答は、データ入力、情報検索、質問回答、マルチステップワークフローなど、多くのタスクにとって重要です。プロンプトが同じであっても、LLMSが非常に異なる形式で出力を生成する方法を経験した可能性があります。 たとえば、

GPT-4O:

を搭載したこの単純なclassify_sentiment関数を考えてみましょう

output:

最初の2つの応答は同じ単一ワード形式でしたが、最後の応答は文全体です。他の下流のアプリケーションが上記のコードの出力に依存している場合、単一単語の応答が予想されていたため、クラッシュしていたでしょう。
# List of hotel reviews
reviews = [
   "The room was clean and the staff was friendly.",
   "The location was terrible and the service was slow.",
   "The food was amazing but the room was too small.",
]
# Classify sentiment for each review and print the results
for review in reviews:
   sentiment = classify_sentiment(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この問題をいくつかの迅速なエンジニアリングで修正できますが、時間のかかる反復プロセスです。完璧なプロンプトがあっても、将来のリクエストで応答がフォーマットに適合することを100%確信することはできません。もちろん、構造化された出力を使用しない限り:

Review: The room was clean and the staff was friendly.
Sentiment: Positive
Review: The location was terrible and the service was slow.
Sentiment: Negative
Review: The food was amazing but the room was too small.
Sentiment: The sentiment of the review is neutral.
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
output:

新しい関数、classify_sentiment_with_structured_outputsを使用すると、応答はすべて同じ形式です。

言語モデルを厳格な形式で強制するこの機能は重要であり、他のオープンソースツールへの迅速なエンジニアリングまたは依存の数え切れないほどの時間を節約します。
def classify_sentiment_with_structured_outputs(review):
   """Sentiment classifier with Structured Outputs"""
   ...
# Classify sentiment for each review with Structured Outputs
for review in reviews:
   sentiment = classify_sentiment_with_structured_outputs(review)
   print(f"Review: {review}\nSentiment: {sentiment}\n")
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
OpenAI構造化された出力を始めましょう

このセクションでは、センチメントアナライザー関数の例を使用して、構造化された出力を分類します。

環境のセットアップ
Review: The room was clean and the staff was friendly.
Sentiment: {"sentiment":"positive"}
Review: The location was terrible and the service was slow.
Sentiment: {"sentiment":"negative"}
Review: The food was amazing but the room was too small.
Sentiment: {"sentiment":"neutral"}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

前提条件

開始する前に、次のことを確認してください

Python 3.7以降はシステムにインストールされています

Openai APIキー。 Openai Webサイトでサインアップすることでこれを入手できます。

OpenAI API

をセットアップします

1。 Openai Pythonパッケージをインストール:端末を開き、次のコマンドを実行して、Openai Pythonパッケージを最新バージョンにインストールまたは更新します。

2。 APIキーの設定:APIキーを環境変数として、またはコードで直接設定できます。環境変数として設定するには、実行してください:

3。インストールの確認:シンプルなPythonスクリプトを作成して、インストールを確認してください:
    # List of hotel reviews
    reviews = [
       "The room was clean and the staff was friendly.",
       "The location was terrible and the service was slow.",
       "The food was amazing but the room was too small.",
    ]
    # Classify sentiment for each review and print the results
    for review in reviews:
       sentiment = classify_sentiment(review)
       print(f"Review: {review}\nSentiment: {sentiment}\n")
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    スクリプトを実行して、すべてが正しくセットアップされるようにします。モデルの応答が端末に印刷されているのが表示されます。

    OpenAIパッケージに加えて、構造化された出力のJSONスキーマを定義および検証するためにPydantic Libraryが必要です。 PIPを使用してインストールします:

    Review: The room was clean and the staff was friendly.
    Sentiment: Positive
    Review: The location was terrible and the service was slow.
    Sentiment: Negative
    Review: The food was amazing but the room was too small.
    Sentiment: The sentiment of the review is neutral.
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    これらの手順では、環境がOpenaiの構造化された出力機能を使用するように設定されています。 pydanticを使用して出力スキーマを定義する

    構造化された出力を使用するには、Pydanticモデルを使用して予想される出力構造を定義する必要があります。 Pydanticは、Python用のデータ検証および設定管理ライブラリであり、Pythonタイプの注釈を使用してデータモデルを定義できます。これらのモデルを使用して、Openaiのモデルによって生成された出力の構造を実施できます。

    レビューセンチメント分類器の形式を指定するためのPydanticモデルの例を示します。

    この例では、

    def classify_sentiment_with_structured_outputs(review):
       """Sentiment classifier with Structured Outputs"""
       ...
    # Classify sentiment for each review with Structured Outputs
    for review in reviews:
       sentiment = classify_sentiment_with_structured_outputs(review)
       print(f"Review: {review}\nSentiment: {sentiment}\n")
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    sentimentResponseは、出力の予想される構造を定義するpydanticモデルです。

    モデルには単一のフィールド感情があり、「ポジティブ」、「ネガティブ」、または「ニュートラル」の3つのリテラル値のいずれかしか取ることができません。

      OpenAI APIリクエストの一部としてこのモデルを渡すと、出力は提供された単語の1つにすぎません。
    • どのように見てみましょう。
    • 解析ヘルパーを使用
    • OpenAIリクエストでPydanticスキーマを実施するために、私たちがしなければならないことは、Chat Completions APIのResponse_Formatパラメーターに渡すことだけです。大まかに、ここにそれがどのように見えるかがあります:

    気づいた場合、client.chat.completions.createを使用する代わりに、client.beta.chat.completions.parseメソッドを使用しています。 .Parse()は、構造化された出力用に特別に記述されたチャット完了APIの新しい方法です。

    さあ、レビューのセンチメント分類器を構造化された出力で書き換えて、すべてをまとめましょう。まず、必要な輸入を作成し、Pydanticモデル、システムプロンプト、およびプロンプトテンプレートを定義します。

    次に、.parse()ヘルパー方法を使用する新しい関数を書きます:

    関数の重要な線はresponse_format = sentimentResponseです。これは、実際に構造化された出力を有効にするものです。
    Review: The room was clean and the staff was friendly.
    Sentiment: {"sentiment":"positive"}
    Review: The location was terrible and the service was slow.
    Sentiment: {"sentiment":"negative"}
    Review: The food was amazing but the room was too small.
    Sentiment: {"sentiment":"neutral"}
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    レビューの1つでテストしましょう:

    ここで、結果はメッセージオブジェクトです:

    $ pip install -U openai
    ログイン後にコピー
    ログイン後にコピー
    応答を取得する.content属性とは別に、解析された情報をクラスとして返す.Parsed属性があります。

    ご覧のとおり、sentimentResponseクラスのインスタンスがあります。これは、.sentiment属性を使用して辞書の代わりに文字列としてセンチメントにアクセスできることを意味します。
    # List of hotel reviews
    reviews = [
       "The room was clean and the staff was friendly.",
       "The location was terrible and the service was slow.",
       "The food was amazing but the room was too small.",
    ]
    # Classify sentiment for each review and print the results
    for review in reviews:
       sentiment = classify_sentiment(review)
       print(f"Review: {review}\nSentiment: {sentiment}\n")
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    複雑なスキーマを定義するためのパイダンティックモデルのネスト

    場合によっては、ネストされたデータを含むより複雑な出力構造を定義する必要がある場合があります。 Pydanticを使用すると、互いにモデルをネストすることができ、さまざまなユースケースを処理できる複雑なスキーマを作成できます。これは、階層データを扱う場合、または複雑な出力の特定の構造を実施する必要がある場合に特に役立ちます。

    名前、連絡先の詳細、アドレスのリストなど、詳細なユーザー情報を抽出する必要がある例を考えてみましょう。各アドレスには、通り、都市、州、郵便番号のフィールドを含める必要があります。これには、正しいスキーマを構築するには複数のPydanticモデルが必要です。

    ステップ1:Pydanticモデルを定義します

    最初に、アドレスとユーザー情報のPydanticモデルを定義します。

    この例では、

    Review: The room was clean and the staff was friendly.
    Sentiment: Positive
    Review: The location was terrible and the service was slow.
    Sentiment: Negative
    Review: The food was amazing but the room was too small.
    Sentiment: The sentiment of the review is neutral.
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    アドレスは、アドレスの構造を定義するピダン心モデルです。

    userInfoは、ユーザーの名前、電子メール、電話番号のフィールドとともに、アドレスオブジェクトのリストを含むPydanticモデルです。

      ステップ2:API呼び出しでネストされたpydanticモデルを使用
    • 次に、これらのネストされたピダンティックモデルを使用して、OpenAI API呼び出しで出力構造を実施します。
    • サンプルテキストはまったく読めないもので、重要な情報の間にスペースがありません。モデルが成功するかどうかを見てみましょう。 JSONライブラリを使用して、応答を軽視します。

    ご覧のとおり、モデルは、提供されたスキーマに基づいて、単一のユーザーの情報と2つの別々のアドレスを正しくキャプチャしました。 要するに、Pydanticモデルをネストすることにより、階層データを処理する複雑なスキーマを定義し、複雑な出力の特定の構造を実施できます。 構造化された出力を使用した

    関数呼び出し

    新しい言語モデルの広範な機能の1つは、関数呼び出し(ツール呼び出しとも呼ばれます)です。この機能により、言語モデルをユーザー定義関数に接続し、効果的に(モデル)外部の世界へのアクセスを提供できます。
    def classify_sentiment_with_structured_outputs(review):
       """Sentiment classifier with Structured Outputs"""
       ...
    # Classify sentiment for each review with Structured Outputs
    for review in reviews:
       sentiment = classify_sentiment_with_structured_outputs(review)
       print(f"Review: {review}\nSentiment: {sentiment}\n")
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    いくつかの一般的な例は次のとおりです

    リアルタイムデータの取得(たとえば、天気、株価、スポーツスコア)
    Review: The room was clean and the staff was friendly.
    Sentiment: {"sentiment":"positive"}
    Review: The location was terrible and the service was slow.
    Sentiment: {"sentiment":"negative"}
    Review: The food was amazing but the room was too small.
    Sentiment: {"sentiment":"neutral"}
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    計算またはデータ分析の実行

    データベースまたはapisのクエリ

    画像またはその他のメディアを生成する

    言語間でテキストを翻訳します

    スマートホームデバイスまたはIoTシステムの制御

    カスタムビジネスロジックまたはワークフローの実行
    • ここで機能呼び出しがどのように機能するかについて詳しく説明することはありませんが、openai関数を呼び出すチュートリアルを読むことができます。

      知っておくべき重要なのは、構造化された出力を使用すると、OpenAIモデルで関数呼び出しを使用することが非常に簡単であることです。過去には、OpenAIモデルに渡す機能には、複雑なJSONスキーマを作成し、すべての関数パラメーターをタイプのヒントで概説する必要があります。例は次のとおりです。

      # List of hotel reviews
      reviews = [
         "The room was clean and the staff was friendly.",
         "The location was terrible and the service was slow.",
         "The food was amazing but the room was too small.",
      ]
      # Classify sentiment for each review and print the results
      for review in reviews:
         sentiment = classify_sentiment(review)
         print(f"Review: {review}\nSentiment: {sentiment}\n")
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      get_current_weather関数には2つのパラメーターがありますが、そのjsonスキーマは巨大になり、エラーが発生しなくなります。

      これは、Pydanticモデルを再度使用することにより、構造化された出力で解決されます:

      Review: The room was clean and the staff was friendly.
      Sentiment: Positive
      Review: The location was terrible and the service was slow.
      Sentiment: Negative
      Review: The food was amazing but the room was too small.
      Sentiment: The sentiment of the review is neutral.
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      最初に、関数自体とそのロジックを書きます。次に、予想される入力パラメーターを指定するPydanticモデルで再度定義します。

      次に、Pydanticモデルを互換性のあるJSONスキーマに変換するには、pydantic_function_tool:

      を呼び出します

      このツールをリクエストの一部として使用する方法は次のとおりです。
      def classify_sentiment_with_structured_outputs(review):
         """Sentiment classifier with Structured Outputs"""
         ...
      # Classify sentiment for each review with Structured Outputs
      for review in reviews:
         sentiment = classify_sentiment_with_structured_outputs(review)
         print(f"Review: {review}\nSentiment: {sentiment}\n")
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      互換性のあるJSON形式でPydanticモデルを渡し、Chat Completions APIのツールパラメーターに渡します。次に、クエリに応じて、モデルはツールを呼び出すかどうかを決定します。 上記の例でのクエリは「東京の天気は何ですか?」であるため、返されたメッセージオブジェクトのtool_callsに呼び出しが表示されます。

      覚えておいてください、モデルはget_weather関数を呼び出すのではなく、私たちが提供したpydanticスキーマに基づいてそれについての引数を生成します:
      Review: The room was clean and the staff was friendly.
      Sentiment: {"sentiment":"positive"}
      Review: The location was terrible and the service was slow.
      Sentiment: {"sentiment":"negative"}
      Review: The food was amazing but the room was too small.
      Sentiment: {"sentiment":"neutral"}
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      提供された引数で関数を呼び出すのは私たち次第です:

      モデルに関数の引数を生成して同時に呼び出す場合は、AIエージェントを探しています。 

      $ pip install -U openai
      ログイン後にコピー
      ログイン後にコピー
      興味がある場合は、別のLangchainエージェントのチュートリアルがあります。

      OpenAI構造化された出力を使用する場合のベストプラクティス

      $ export OPENAI_API_KEY='your-api-key'
      ログイン後にコピー
      構造化された出力を使用している間、留意すべきベストプラクティスと推奨事項がいくつかあります。このセクションでは、それらのいくつかの概要を説明します。

      Pydanticモデルを使用して出力スキーマを定義します。これは、予想される出力構造を定義するためのクリーンでタイプの安全な方法を提供するためです。

      スキーマをシンプルかつ具体的に保ち、最も正確な結果を得る。

      適切なデータ型(str、int、float、bool、list、dict)を使用して、データを正確に表現します。

      enumsにリテラルタイプを使用して、フィールドの特定の許可された値を定義します。

      モデルの拒否を処理します。 new .Parse()メソッドを使用する場合、メッセージオブジェクトには拒否を示す新しい.Refusal属性があります:
      1. output:
      2. 6。モデル出力の精度を改善するために、Pydanticモデルの各フィールドに明確で簡潔な説明を提供してください:
      3. これらのプラクティスは、アプリケーションで構造化された出力を最も効果的に使用するのに大いに役立ちます。

        結論

        このチュートリアルでは、新しいOpenAI API機能:構造化出力を開始する方法を学びました。この機能により、言語モデルが指定した形式で出力を生成する方法を確認しました。機能を呼び出す方法と組み合わせて使用​​する方法を学び、いくつかのベストプラクティスを調査して機能を最大限に活用しました。

        ここにあなたの理解を高めるためのいくつかの関連するソースがあります:

        OpenAI APIコースの操作

        • Openai Fundamentalsトラック
        • LangChainコースを使用したLLMアプリケーションの開発
        • langchain vs. llamaindex:詳細な比較
        • トップAI認定を獲得
        • ai.get認定を効果的かつ責任を持って使用できることを実証します。目的の出力構造。次に、応答形式を強制するためにOpenai APIに渡されます。出力。

        構造化された出力を使用することの利点は何ですか?

        利点には、一貫した応答形式、ポスト処理の必要性の低下、AIアプリケーションの信頼性の向上、既存のシステムを使用した統合の容易な統合が含まれます。 outputs?

    以上がOpenAI構造化された出力を開始しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート