見出し画像

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'}


いいなと思ったら応援しよう!