メインコンテンツへスキップ
見出し画像

OpenAI APIのJSON modeを使ってみる

    概要

    前回はGPT-4Vを使い、画像からプログラムを作ってみました。今回は引き続きOpenAI APIの新しいバージョンを利用していきましょう。今回は、出力を必ずJSONフォーマットにするJSONモードというのを使ってみます。

    これまでの課題

    GPTの汎用性を活かし、単なるチャットとしてではなく、プログラムのモジュールとして利用するという使い方が色々なところでされています。Agentの仕組みも次の行動を所定のフォーマットでテキストとして出力し、それをプログラム側で解析してAPIを呼んだり、文章を生成したり、終了するなどをしています。プログラムをテキストで解析する時に、フォーマットが固定されている必要がありますが、GPTが必ずしも同じフォーマットで出力してくれるとは限りませんでした。そこで、Function Callingを利用するのが最近の流れだったのですが、今回のアップデートでJSONで結果を出力してくれるというモードが追加されました。これはぜひ使わねば。

    サクッと使ってみよう

    とりあえず、マニュアルを読みつつサクッと試してみました。翻訳をするサンプルで、元の文章をoriginal、翻訳結果をtranslatedというキーで出力します。使い方としては、response_formatで、json_objectを指定してあげればOKです。さらに、システムメッセージ側でJSONを出力するように指定する必要がありました(ココでハマった、ちゃんとマニュアルは読もう)。

    import openai
    import json
    api_key = "<API-KEY>"
    
    response = openai.ChatCompletion.create(
      model="gpt-3.5-turbo-1106",
      messages=[
          {
            "role": "system",
            "content": "あなたは優秀なアシスタントです。JSONで結果を出力します。"
          },
          {
            "role": "user",
            "content": "以下を英語に翻訳してください。元のテキストをoriginal、変換後のテキストをtranslatedというキーとしてください。\n==\nこんにちは"
          }  
      ],
      response_format={ "type": "json_object" }
    )
    
    print(json.loads(response.choices[0]["message"]["content"]))

    結果

    以下のようになりました。ちゃんと出来ている、素晴らしい。

    {'original': 'こんにちは', 'translated': 'Hello'}


    あなたへのおすすめ