🤖

【Azure OpenAI】Json形式で出力する方法

2024/08/31に公開2

やること

Azure OpenAIでレスポンスを必ずJsonでもらいたい場面がありました。
Json modeというものがあるみたいなので、それを試してみる。

参考資料

https://learn.microsoft.com/ja-jp/azure/ai-services/openai/how-to/json-mode?tabs=python

前提

  • python 3.9.6
  • open 1.43.0

Json mode がサポートされているモデル

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-Preview)
  • gpt-4 (0125-Preview)

サンプルコードを動かしてみる

main.py
import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-03-01-preview"
)

response = client.chat.completions.create(
  model="gpt-4-0125-Preview", # Model = should match the deployment name you chose for your 0125-Preview model deployment
  response_format={ "type": "json_object" },
  messages=[
    {"role": "system", "content": "You are a helpful assistant designed to output JSON."},
    {"role": "user", "content": "Who won the world series in 2020?"}
  ]
)
print(response.choices[0].message.content)

出力結果

システムプロンプトを変えてみる

システムプロンプトから「Jsonフォーマットで書いて」を消して実行してみる。

main.py
import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-03-01-preview"
)

response = client.chat.completions.create(
  model="gpt-4-0125-Preview", # Model = should match the deployment name you chose for your 0125-Preview model deployment
  response_format={ "type": "json_object" },
  messages=[
    {"role": "system", "content": "You are a helpful assistant "},
    {"role": "user", "content": "Who won the world series in 2020?"}
  ]
)
print(response.choices[0].message.content)

Docsより引用。以下の2つが必要

まとめ

今更ながらJson modeを試してみました。
System promptとtypeの設定でJson形式で出力できるのは便利だなーと。
ただ、サポートモデルにgpt-4o/minがないので対応してほしいなー。

ヘッドウォータース

Discussion

kodani takushikodani takushi

GPT-4oもドキュメントにJSONモード可能が追加されていて対応してそうだったので試しました。使えるようになってます。How to use json modeのページ2024/09/02時点で最終更新が2024/08/29になってるのに全然モデル部分が更新されてない……(日本語だけかと思ったら英語も更新されてませんでした)
https://learn.microsoft.com/ja-jp/azure/ai-services/openai/concepts/models#gpt-4-and-gpt-4-turbo-models
https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/json-mode?tabs=python