Azure OpenAI の保存された入力候補および蒸留を試してみる

最近プレビューになった「Azure OpenAI の保存された入力候補および蒸留」について試してみたので使い方を紹介したいと思います。

learn.microsoft.com

概要

この機能は、Azure OpenAI Service(以下AOAI)でオプションを有効にすると、プロンプトやコンプリッションなどが保存できるというものです。

保存したプロンプトやコンプリッションなどは、そのままモデルの蒸留や評価に使えます。

蒸留とは

生成AIでの蒸留(Distillation)とは、大規模で計算コストの高いモデルの知識をより小規模で軽量なモデルに効率的に伝達する方法です。

今回であれば、GPT-4oでのチャットデータを、より計算コストの安いGPT-4o miniなどにFine-Tuningすることが可能です。

注意事項

利用可能なAPIとリージョンとモデル

現時点(2024/12/27)では以下のみのサポートです。

  • API:2024-10-01-preview
  • リージョン:スウェーデン中部
  • モデル:gpt-4o-2024-08-06
権限

この機能を使うためには「Cognitive Services OpenAI Contributor」の権限が必要になります。

共同作成者では下記のような画面となり、利用できません。

その他

現時点では、保管されたデータのみ削除する方法は提供されていません。リソースごと消す必要があります。

また、保管データは最大10GBです。

使ってみる

サンプルコードの実行

公開されているPythonのコードを実行します。

How to use Azure OpenAI Service stored completions & distillation - Azure OpenAI | Microsoft Learn

サンプルコードを参考に、JBSの情報に置き換えて作ってみました。

import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-10-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

completion = client.chat.completions.create(
    
    model="gpt-4o", # replace with model deployment name
    store= True,
    metadata =  {
    "user": "admin",
    "category": "docs-jbs",
  },
    messages=[
    {"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社のconciergeです。"},
    {"role": "user", "content": "日本ビジネスシステムズ株式会社の社長は?"}
    ]   
)

print(completion.choices[0].message)  

※1:Python(API Key)のサンプルコードはcompletionのcが抜けているのでご注意ください。

※2:TypeError: Completions.create()が発生する場合は「pip install openai --upgrade」でライブラリの更新が必要です。それでもエラーが起こる場合はPythonのVersionUPが必要です。

実行すると、JBSの社長の名前を正確に返してくれました。

Azure AI Foundryでの確認

格納された入力候補で先ほどの入出力が確認できます(反映されるまで5分程度かかります)

プロンプトを選択すると、詳細な情報が確認できます。

蒸留用のデータを作成

先ほどのサンプルコードは、社長の名前は答えてくれましたが、企業理念や役員などは答えてくれませんでした。

そこで、システムメッセージにこれらの質問に正確に答えられるように情報を入れました。(※こちらは2024年12月26日時点の役員名になっております。)

また、後で蒸留データを選びやすいように、categoryを"docs-jbs-SystemRole"に変更します。

import os
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-10-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

completion = client.chat.completions.create(
    
    model="gpt-4o", # replace with model deployment name
    store= True,
    metadata =  {
    "user": "admin",
    "category": "docs-jbs-SystemRole",
  },
    messages=[
    {"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社のconciergeです。以下日本ビジネスシステムズの基本情報です###日本ビジネスシステムズ株式会社のサステナビリティの考え方は「JBS グループは、企業理念「優れたテクノロジーを、親しみやすく」の実現に向けて、「社会の持続可能性」と「JBSの持続的成長」の両立を目指して、事業を通じた社会価値と企業価値の創出に取り組んでいます。豊かな地球環境や持続可能な社会を次世代へと受け継いでいくために、社会の一員としての責任を果たしながら、環境や社会の課題解決に寄与する取り組みを事業活動に取り込んでいます。こうしたサステナビリティを推進する指針として、2023年9月に「サステナビリティ基本方針」を策定し、取り組むべきマテリアリティ(重要課題)を特定しました。今後は、マテリアリティに基づく目標、計画を策定し、実行していくことで、持続可能な社会の実現と、事業の発展を図ります。」、###日本ビジネスシステムズ株式会社のブログのURLはhttps://blog.jbs.co.jp/###日本ビジネスシステムズ株式会社の社員食堂の名前は「Lucy’s CAFE & DINING」です###日本ビジネスシステムズ株式会社の役員は[代表取締役社長:牧田 幸弘][取締役専務執行役員:後藤 行正][取締役常務執行役員:勝田 耕平][社外取締役:島田 直樹,占部 利充,出口 眞也,森崎 孝,朱 純美][常勤監査役:兒玉 眞二][社外監査役:山嵜 一夫,久保田 英夫][補欠監査役:柳澤 美佳][執行役員:森屋 正樹,中村 智之,前田 憲仁,岩本 満美,平岡 敬浩,安田 博一,田中 功明,守屋 有人,伊藤 英啓,星 誠,北村 勇樹,平安 清剛,櫻田 浩,小杉 智,中山 高史]###日本ビジネスシステムズ株式会社は2022年8月2日に東京証券取引所スタンダード市場に上場しました。上場コードは5036です。###日本ビジネスシステムズ株式会社の企業理念は「2022年6月、私たちはこれまでの企業理念を進化させ、新たな理念体系として「Mission(企業理念)」、「Vision(目指す姿)」、「Value(行動指針)」、「ブランドロゴ」を設定しました。優れたテクノロジーを、親しみやすく」を Mission とし、お客さまに寄り添い、お客さまにとって必要な技術を最適な形でお届けすることで、技術革新がもたらす企業・社会の持続的成長に貢献してまいります。」##日本ビジネスシステムズ株式会社の住所は「 東京都港区虎ノ門2-6-1 虎ノ門ヒルズ ステーションタワー20F」です。"},
    {"role": "user", "content": "日本ビジネスシステムズ株式会社の社長は?"}
    ]   
)

print(completion.choices[0].message) 

こちらを実行した結果です。

今度は、企業理念なども含め正確に答えてくれました。

この要領でいくつか質問を行い、蒸留用のデータを生成しました。

蒸留

格納された入力候補のフィルターを選択します。

フィルターで"category=docs-jbs-SystemRole"と入力します。

フィルターを適用します。

フィルターされたデータが表示されるので、「蒸留」をクリックします。

ファインチューニングするモデルを選択します。今回はGPT-4o minを使うのでそのままで続けます。

モデルサフィックスを入力して、「次へ」をクリックします。

データは自動生成されるので、そのまま「次へ」をクリックします。

検証はスキップします。

パラメータはデフォルトのままで次へ進みます。

内容を確認し、送信します。

通常のFine-Tuningと同様に1時間程度かかります。

モデルのデプロイ

モデルのデプロイは通常のFine-Tuningと変わりません。

参考:Azure OpenAI ServiceのChatGPTモデルでのFine-Tuningを試してみた - JBS Tech Blog

「微調整されたモデルをデプロイする」を選択します。

「トレーニングしたモデル」を選択します。

「デプロイ」を実行します。

通常のFine-Tunigモデルのデプロイと同様に30分程度時間がかかります。

モデルのテスト

デプロイしたモデルを選択して、プレイグラウンドで試してみます。

※今回はトレーニングデータが少なかったため期待する答えにはなりませんでしたが、トレーニングデータを増やせば解決すると考えます。

まとめ

汎用的なチャットでは難しいですが、特定分野でGPT-4oとGPT4-o miniで回答に差がある場合には有効に使えそうです。

また、ベースはFine-Tuningとなっており、システムメッセージ答えてほしいことを入れておけば、簡単に学習データが作れるという使い方が考えられます。

執筆担当者プロフィール
上田 英治

上田 英治(日本ビジネスシステムズ株式会社)

エンジニアとしてインフラ構築、システム開発やIoT基盤構築等を経験し、現在はクラウドアーキテクトとして先端技術の活用提案や新規サービスの立ち上げを担当。

担当記事一覧