0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PythonでGPT-4o-miniをサクッと使ってみた [Azure OpenAI]

Posted at

個人開発でLLMを使うことになったので、すこし触ってみました。ハマりポイントがいくつかあったので、それも含めて使い方をまとめていきます。

Azure OpenAIやGPT-4o-miniに関する説明は、ここでは省略させていただきます。

1. リソースの作成

Azure Portalから「Azure OpenAI」を選択して新しいリソースを作ります。(このとき「Azure AI Service」という似た名前のサービスも表示されたり、別のページでは表記揺れ(?)で「Azure OpenAI Service」と呼ばれたりしていたので少しややこしかった)

2024-10-21_11h34_14.png

設定項目は

  • インスタンスの詳細
    • リージョン:East US(リージョンによっては使えないモデルがあったりするので、調べておいたほうが良い
    • 名前:(好きな名前を)
    • 価格レベル:Standart S0(これしか無い)
  • ネットワーク
    • 「インターネットを含むすべてのネットワークがこのリソースにアクセスできます。」を選択

2. モデルのデプロイと必要情報の収集

リソースの管理画面から「Azure OpenAI Studioに移動する」をクリックして、管理画面を開きます。続いて、

  1. 「共有リソース」から「デプロイ」をクリック
  2. 「モデルのデプロイ」→「基本モデルをデプロイする」をクリック
  3. 使いたい言語モデル(今回はgpt-4o-mini)を選ぶ
  4. デプロイ設定を入力する
    1. デプロイ名:今回はgpt-4o-mini-testとします。あとで必要なのでメモしておく。
    2. デプロイの種類:グローバル標準
    3. モデルバージョン:2024-07-18(既定)
    4. 1分あたりのトークン数レート制限:10K
    5. コンテンツフィルター:DefaultV2

2024-10-21_13h36_29.png

次に、Pythonからアクセスするために必要な情報を集めます。

  • APIキー:******************************
    • 「エンドポイント」の「キー」を使います
  • APIバージョン:2024-08-01-preview
    • 「エンドポイント」の「ターゲットURL」に含まれる?api_version=の部分を使います。モデルバージョンとは異なるようです
  • Azureエンドポイント:https://{リソース名}.openai.azure.com/
    • 「エンドポイント」の「ターゲットURL」からドメイン名の部分を使います。それ以降のURLを含めると404エラーが出るようです
    • リソース名がエンドポイントURLに含まれるわけだから、この名前はランダムな文字列を含むほうが良かったりする…?
  • デプロイ名:gpt-4o-mini-test
    • 「配置情報」の「名前」を使います

2024-10-21_13h43_44.png

3. Pythonコードの作成

必要なライブラリをインストールして、

python -m pip install openai==1.52.0

最低限のコードを書きます。
APIキーなどを直書きするのは良くないので、そこは要修正です。

from openai import AzureOpenAI

client = AzureOpenAI(
    api_version="APIバージョン",
    api_key="APIキー",
    azure_endpoint="https://{リソース名}.openai.azure.com/",
)

response = client.chat.completions.create(
    model="デプロイ名",
    messages=[
        {"role": "user", "content": "Microsoft Azureについて教えてください。"},
    ],
)

# レスポンス
print(response.choices[0].message.content)

print("---------------------------------------------------------")
print(f"処理時間: {time.time() - started_time:.2f} sec")

# 使用トークン数
print(f"プロンプトトークン数: {response.usage.prompt_tokens}")
print(f"完了トークン数: {response.usage.completion_tokens}")
print(f"合計トークン数: {response.usage.total_tokens}")

# 各応答に割り当てられる一意の識別子
print(f"ID: {response.id}")

# 使用されたGPTモデルの名称
print(f"モデル: {response.model}")

# 作成時刻(UNIXタイムスタンプ)
print(f"作成時刻: {response.created}")

# 応答生成が終了した理由(例:'stop'は正常終了)
print(f"終了理由: {response.choices[0].finish_reason}")

# コンテンツフィルター結果(hate, self_harm, sexual, violence)
for category, result in response.choices[0].content_filter_results.items():
    print(f"コンテンツフィルター {category}{result}")

# プロンプトフィルター結果(hate, self_harm, sexual, violence)
for result in response.prompt_filter_results:
    print(f"プロンプトフィルター結果: {result}")

4. 実行結果

しばらく待つと、以下のテキストが生成されました。

  • 実行時間:4.8秒ほど
  • 入力文字数:27文字
  • プロンプトトークン数:14
  • 出力文字数:1,219文字
  • 完了トークン数:705

ブラウザ版のChatGPT(無課金)が32秒、Claude 3 Haiku(課金)が6秒ほどで回答してくれたので、それなりに早いと判断できるのかなと思います。

生成されたテキスト ↓

Microsoft Azure(アジュール)は、Microsoftが提供するクラウドコンピューティングプラットフォームで、さまざまなクラウドサービス
を提供しています。企業や開発者がアプリケーションを構築、デプロイ、管理するための環境を提供し、オンプレミスのインフラストラク
チャに依存せずにスケーラブルで柔軟なリソースを利用できます。

### 主な機能とサービス

1. **コンピューティングサービス**:
   - **Azure Virtual Machines**: 任意のOS上でサーバーを仮想的に展開。
   - **Azure App Service**: WebアプリケーションやRESTful APIのホスティング。

2. **ストレージ**:
   - **Azure Blob Storage**: オブジェクトストレージサービス。
   - **Azure File Storage**: ファイル共有用のクラウドストレージ。

3. **データベース**:
   - **Azure SQL Database**: 完全マネージド型のデータベースサービス。
   - **Cosmos DB**: グローバル分散型のマルチモデルデータベース。

4. **ネットワーク**:
   - **Azure Virtual Network**: プライベートネットワークを構築。
   - **Azure CDN(Content Delivery Network)**: コンテンツ配信の最適化。

5. **AIと機械学習**:
   - **Azure Machine Learning**: 機械学習モデルの構築とデプロイをサポート。
   - **Cognitive Services**: 会話、視覚、感情分析などのAI機能を提供。

6. **IoT(モノのインターネット)**:
   - **Azure IoT Hub**: IoTデバイスの管理とデータ収集。

7. **セキュリティとアイデンティティ管理**:
   - **Azure Active Directory**: シングルサインオンおよび多要素認証を提供。
   - **Azure Security Center**: セキュリティの評価と改善を支援。

### 利点

- **スケーラビリティ**: ビジネスの成長に合わせてリソースを拡張可能。
- **コスト効率**: 使用したリソースに応じて料金が発生する従量課金制。
- **信頼性**: 多くのデータセンターが世界中にあり、高い可用性を提供。
- **柔軟性**: 多様なプログラミング言語やフレームワークに対応。

### 用途

- アプリケーション開発とホスティング
- データ分析
- 時間のかかるバッチ処理
- ゲーム開発
- 存在するインフラの拡張や移行

このように、Azureは多くのサービスと機能を提供しており、企業や個人が迅速にMTT (Minimum Time to Market) を達成できる環境を整え 
ています。

見慣れたマークダウン記法で生成してくれました。

まとめ

Azure OpenAIのGPT-4o-miniを使ってみました。Pythonから呼び出せるのは便利でいいですね。GPT-4o-miniがずば抜けて安いので、とりあえずこれを選んでおけば良さそう。

今回は特にやりませんでしたが、運用段階ではAPIキーを環境変数に保存するなどの対策が必要になります。ネットワークのアクセス制限やトークンのレート制限もやっておきたいところ。また、レスポンスから消費トークン数が分かるので、アプリケーション側で上手く把握すれば使いすぎを抑えられそうです。

追記

実行用のコードは「プレイグラウンド」の「チャット」から「コードの表示」をクリックすると最低限のものを用意してくれています。わざわざ書かなくても良かったっぽい。

参考にした記事など

“Azure OpenAI”で始めるPythonプログラミング【LLMことはじめ Vol.1】

Azure OpenAI Service の価格|Microsoft Azure

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?