🔱

【Las Vegasの】Azure AI Model Inference APIを試してみた【車窓から】

2024/12/02に公開

こちらの記事は、Azure PoC部 Advent Calendar 2024の2日目の記事となります。

はじめに、のまえに

この記事を書いている私は現在、ラスベガスにて12/2~12/6に開催される『AWS re:Invent 2024』に現地参加しています。

https://reinvent.awsevents.com/?trk=www.google.com

ラスベガスの空港にて

会場内:噂に聞いていた落書きボードにて

そんな中ではありますが、AWSに浸りきってしまう前に、掲題のテーマのAzure AI Model Infernece API (Ignite2024でGA発表)に関する記事を書いていきたいと思います!

はじめに

AI技術の進化に伴い、より高度で複雑なアプリケーションを迅速かつ効率的に構築するニーズが高まっています。その中で、2024年のMicrosoft Igniteで発表されたAzure AI Foundryは、開発者がAIアプリケーションを効率的に構築、展開、管理するための強力なプラットフォームとして注目を集めています。また、Azure AI Foundry SDKは、このプラットフォームの機能をコードベースで活用するためのツールチェーンです。

特に注目すべきは、Azure AI Foundry SDKの一部であるAzure AI Model Inference APIです。このAPIは、さまざまなAIモデルを統一されたインターフェースで利用可能にし、AIアプリケーションの開発を加速します。

本記事では、Azure AI Foundry SDKとAzure AI Model Inference APIの関係性を踏まえつつ、その具体的な利用方法や活用例を紹介します。

1. Azure AI Foundryとは

概要

Azure AI Foundryは、AIアプリケーションを効率的かつ安全に開発するための、統合されたエンタープライズ向けプラットフォームです。主な特徴は以下のとおりです:

  • 統合プラットフォーム: AIモデル、サービス、開発ツールを一つの環境で統合。
  • 多様なモデルカタログ: OpenAI、Meta、Mistralなどの大規模言語モデル(LLM)や一般的なAIモデルを活用可能。
  • インタラクティブなプレイグラウンド: モデルの評価や試行を行うためのリアルタイム環境を提供。
  • 評価とモニタリング: モデルやアプリケーションの品質を確保するための評価ツールやトレース機能。
  • 責任あるAI: Azure AI Content Safetyを活用した有害コンテンツの検出・フィルタリング。
  • スケーラブルなアーキテクチャ: プロジェクト単位でリソースを整理し、チームでのコラボレーションを容易に。

特に、AI開発を支える2つの主要コンポーネントであるAIハブAIプロジェクトが重要です。

AIハブとAIプロジェクト

AIハブ

AIハブは、Azure AI Foundryの中心的なリソースであり、以下の機能を提供します:

  • データとアーティファクトの管理: ストレージやモデルのエンドポイントを一元管理。
  • セキュリティとガバナンス: ロールベースアクセス制御(RBAC)や属性ベースアクセス制御(ABAC)による高いセキュリティ。
  • 計算リソース: インタラクティブ開発やモデルのファインチューニング、サーバーレス展開をサポート。

AIプロジェクト

AIプロジェクトは、ハブに属する子リソースであり、ハブ対プロジェクトは1対Nの関係です。特徴は以下のとおりです:

  • カスタムモデルの展開: オープンソースモデルやファインチューニング済みモデルを簡単に展開。
  • データの隔離: 各プロジェクトごとに独立したデータコンテナを提供。
  • 再利用可能なコンポーネント: データセット、モデル、インデックスを整理して活用。

モデルカタログとプレイグラウンド

Azure AI Foundryでは、モデルカタログを通じて多様なAIモデルを探索可能です。以下の特徴があります:

  • ベンチマーク情報: 各モデルのコスト、レイテンシー、スループットなどを比較。
  • プレイグラウンド: 実験的にモデルを試すためのインタラクティブ環境。

参考

https://learn.microsoft.com/en-us/azure/ai-studio/what-is-ai-studio
https://learn.microsoft.com/en-us/azure/ai-studio/concepts/architecture

2. Azure AI Foundry SDKとは?

Azure AI Foundry SDKは、Azure AI Foundryの機能をコードベースで利用可能にするツールチェーンで、以下の特徴を持っています:

主な特徴

  1. シームレスな統合
    OpenAIやMicrosoft、Metaなど、さまざまなプロバイダーのモデルを統一されたインターフェースで利用可能。

  2. カスタマイズ可能なプロジェクト環境
    プロジェクト単位でデータ、モデル、サービスを統合し、簡単にアクセス可能。

  3. トレーシングとデバッグ
    トレーシング機能を活用し、開発中のアプリケーションの挙動を可視化。

  4. 簡単なセットアップ
    コード内で必要な接続文字列を指定するだけで利用開始可能。

主なコンポーネント

機能 概要
Projects 複数のサービスを統合するプロジェクトクライアントを提供。
Model Inference 各種モデルを統一インターフェースで利用可能。
Prompt Templates 動的なプロンプト生成でモデル利用を最適化。
Agents 自動化タスクを支援するエージェント設計と運用を簡素化。
Evaluation モデル応答の品質と安全性をスケーラブルに評価。
Tracing アプリケーションのパフォーマンスや問題点を可視化するトレーシング機能を提供。

参考

https://learn.microsoft.com/en-us/azure/ai-studio/how-to/develop/sdk-overview?tabs=sync&pivots=programming-language-python

3. Azure AI Model Inference APIとは?

Azure AI Model Inference APIは、Azure AI Foundryの一部として提供される、さまざまなAIモデルを統一された方法で利用できるRESTfulなAPIサービスです。このAPIを使用することで、異なるモデルプロバイダーの提供するAIモデルを一貫性のあるインターフェースを通じて利用でき、開発者はコードの変更を最小限に抑えて複数のモデルを利用することが可能となり、アプリケーションにおけるモデル統合を容易に行うことができます。

Azure AI Model Inference APIの主なメリット

AIモデルは近年、大きな進化を遂げ、自然言語処理や画像認識など多岐にわたるタスクで高い性能を発揮しています。しかし、モデルごとに得意分野が異なるため、適切なタスクに適切なモデルを選択することが重要です。

Azure AI Model Inference APIの主なメリットは以下のとおりです:

  • 多様なモデルの統合利用:単一のAPIを通じて、複数のモデルプロバイダーのモデルにアクセス可能。
  • コードの再利用性向上:モデルごとの仕様に依存せず、統一されたインターフェースで利用可能。
  • タスク最適化:タスクに応じた適切なモデル選択により、性能や効率を最大化。
  • 運用の効率化:Microsoftが管理するインフラ上でモデルをホスティングし、APIベースで利用可能。

提供されるモデルと利用可能なプロバイダー

Azure AI Model Inference APIは、業界を代表する複数のプロバイダーによる多様なモデルをサポートしています。以下は主なプロバイダーとモデルの一覧です:

モデルプロバイダー モデル名
OpenAI o1シリーズ、GPT-4o, text-embedding-3シリーズなど
Meta AI Llama 3.1シリーズ、Llama 3.2シリーズなど
Mistral AI Mistral-Large, Mistral-Nemoなど
Cohere Cohere-command-r-plus, Cohere-embed-v3など
Microsoft Phi-3シリーズ、Phi-3.5シリーズなど
AI21 Labs Jamba 1.5シリーズなど

注記:最新のモデル情報は公式ドキュメントで確認してください。

料金体系とライセンス

  • 非Microsoftモデル:Azure Marketplace経由でのサブスクリプションが必要。モデル提供元のライセンス条項に従います。
  • Microsoftモデル:従量課金制で、トークンベースで課金。

モデルの利用には、モデルプロバイダーが定めるライセンス条項への同意が必要です。詳細な料金情報は、モデルのデプロイ時に提供されます。

主な機能とAPIの能力

Azure AI Model Inference APIは、以下のような主要なモダリティ(機能)を提供します:

  • モデル情報の取得
    デプロイされたモデルに関する情報を取得。

  • テキスト埋め込み生成
    入力テキストを埋め込みベクトルに変換。

  • テキスト補完
    プロンプトとパラメータに基づき、続きの文章を生成。

  • チャット補完
    チャット形式の会話データを元にモデル応答を生成。

  • 画像埋め込み生成
    テキストおよび画像の埋め込みベクトルを生成。

エクストラパラメータのサポート

一部のモデルは、APIで指定されていない独自の追加パラメータをサポートしています。例えば、Mistral-Largeモデルではsafe_modeパラメータを使用可能です。このような追加パラメータは、model_extrasオプションを利用して指定できます。

from azure.ai.inference.models import SystemMessage, UserMessage

response = model.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many languages are in the world?"),
    ],
    model_extras={
        "safe_mode": True
    }
)

print(response.choices[0].message.content)

ヒントmodel_extrasは、自動的にextra-parameters: pass-throughを設定します。

Content Safety機能

Azure AI Model Inference APIは、Azure AI Content Safetyをサポートしており、有害なコンテンツを検出・フィルタリングします。コンテンツフィルタリング機能により、プロンプトおよび応答の安全性を確保します。

エラーハンドリングの例

有害コンテンツが検出された場合、エラーメッセージとともに応答が返されます。

from azure.ai.inference.models import AssistantMessage, UserMessage, SystemMessage
from azure.core.exceptions import HttpResponseError

try:
    response = model.complete(
        messages=[
            SystemMessage(content="You are an AI assistant."),
            UserMessage(content="Chopping tomatoes and cutting them into cubes."),
        ]
    )
    print(response.choices[0].message.content)

except HttpResponseError as ex:
    if ex.status_code == 400:
        response = json.loads(ex.response._content.decode('utf-8'))
        print(f"Error: {response['error']['message']}")
    else:
        raise ex

APIの利用開始方法

対応するエンドポイント

Azure AI Model Inference APIは、以下のエンドポイントタイプに対応しています:

  1. Serverless API Endpoints(サーバーレスエンドポイント)
  2. Managed Online Endpoints(マネージドエンドポイント)

これらのエンドポイントにデプロイされたモデルをAPI経由で呼び出し可能です。

初期設定とライブラリインストール

以下のコマンドでPythonライブラリをインストールします:

pip install azure-ai-inference

次に、以下のコードを使用してクライアントを作成します:

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

model = ChatCompletionsClient(
    endpoint=os.environ["AZUREAI_ENDPOINT_URL"],
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

また、EntraID認証を使用する場合:

from azure.identity import DefaultAzureCredential

model = ChatCompletionsClient(
    endpoint=os.environ["AZUREAI_ENDPOINT_URL"],
    credential=DefaultAzureCredential(),
)

参考

https://learn.microsoft.com/en-us/azure/ai-studio/reference/reference-model-inference-api?tabs=python
https://learn.microsoft.com/en-us/azure/ai-studio/ai-services/model-inference

4. 利用準備

少し順番は前後してしまいましたが、早速Azure AI Model Inference APIを利用してみましょう。

必要な環境と前提条件

  • Azureサブスクリプション:Azure AIサービスを利用するために必要。
  • Azure AI Servicesリソース:モデルをデプロイ・利用するためのリソースを作成。
  • Python 3.8以上:SDKを利用するために必要。
  • 必要な認証情報
    • エンドポイントURL:モデルのエンドポイント。
    • APIキーまたはGitHubトークン:サービスへの認証に必要。

パッケージのインストール

以下のコマンドで必要なパッケージをインストールします:

pip install azure-ai-inference azure-ai-projects azure-identity

アップデート:既存のパッケージを最新バージョンにアップデートする場合は、--upgradeオプションを使用します。

pip install --upgrade azure-ai-inference

プロジェクトクライアントのセットアップ

ステップ1:Azure CLIでのログイン

az login

ステップ2:プロジェクトクライアントの作成

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

project_connection_string = "your_connection_string"

project = AIProjectClient.from_connection_string(
    conn_str=project_connection_string,
    credential=DefaultAzureCredential()
)

ヒント:プロジェクト接続文字列はAzureポータルの「Overview」ページから取得できます。


5. 主要機能の活用

Azure OpenAIサービスの利用

コード例:GPT-4oを使用したチャット応答

# OpenAI SDKのインストール
pip install openai
# コード例
openai = project.inference.get_azure_openai_client(api_version="2024-06-01")

response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "You are a helpful writing assistant"},
        {"role": "user", "content": "Write me a poem about flowers"}
    ]
)

print(response.choices[0].message.content)

ポイント:OpenAI SDKを使用している場合でも、Azure OpenAIサービスをシームレスに利用できます。

Azure AI Model Inference APIとの連携

コード例:Model Inference APIでの応答生成

from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

client = ChatCompletionsClient(
    endpoint="https://<resource-name>.<azure-region>.models.ai.azure.com",
    credential=AzureKeyCredential("<your-api-key>")
)

response = client.complete(
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the capital of France?"}
    ]
)

print(response.choices[0].message.content)

注記:エンドポイントURLとAPIキーはAzureポータルから取得します。

Prompt Templatesの活用

Prompt Templatesを使用することで、プロンプトを動的に生成し、モデルの応答を最適化できます。

コード例:動的プロンプトテンプレートの作成

from azure.ai.inference.prompts import PromptTemplate

# テンプレートの作成
prompt_template = PromptTemplate.from_string(prompt_template="""
    system:
    You are a helpful assistant.
    User's first name: {{first_name}}, last name: {{last_name}}.

    user:
    Write me a poem about flowers.
""")

# メッセージの生成
messages = prompt_template.create_messages(first_name="Jane", last_name="Doe")
print(messages)

出力結果

[
    {'role': 'system', 'content': "You are a helpful assistant.\nUser's first name: Jane, last name: Doe."},
    {'role': 'user', 'content': 'Write me a poem about flowers.'}
]

ポイント:テンプレートに変数を埋め込むことで、より柔軟なプロンプトを作成できます。

モデル応答の評価と安全性

Azure AI Evaluation SDKを活用して、モデル応答の品質を評価できます。

コード例:Violence Evaluatorの利用

pip install azure-ai-evaluation
from azure.ai.evaluation import ViolenceEvaluator
from azure.identity import DefaultAzureCredential

violence_eval = ViolenceEvaluator(
    azure_ai_project=project.scope,
    credential=DefaultAzureCredential()
)

score = violence_eval(query="What is the capital of France?", response="Paris")
print(f"Violence score: {score}")

注意:Evaluatorの利用には特定のリージョン設定が必要です。

トレーシングでアプリケーションを可視化

トレーシング機能を有効にすることで、アプリケーションの動作を詳細に監視できます。

ステップ1:Application Insightsの設定

  • Azureポータルのプロジェクト「Tracing」ページから設定。

ステップ2:必要なパッケージのインストール

pip install azure-monitor-opentelemetry

ステップ3:トレーシングの有効化

project.telemetry.enable()

application_insights_connection_string = project.telemetry.get_connection_string()
if application_insights_connection_string:
    configure_azure_monitor(connection_string=application_insights_connection_string)

参考

https://learn.microsoft.com/en-us/azure/ai-studio/ai-services/concepts/endpoints?tabs=python

6. モデルの追加と構成

モデルの追加手順

  1. Azure AI Foundryポータルにアクセス:モデルカタログを確認。
  2. モデルの選択:利用したいモデル(例:Phi-3.5-MoE-Instruct)を選択し、詳細を確認。
  3. ライセンス条項の同意:必要に応じてモデルプロバイダーのライセンス条項に同意。
  4. デプロイ設定のカスタマイズ:必要に応じてデプロイ名や設定を変更。
  5. デプロイの実行:設定を確認し、「Deploy」をクリック。
  6. 利用準備完了:デプロイが完了すると、モデルが利用可能になります。

モデルのカスタマイズと設定

デプロイ時に以下の設定をカスタマイズできます:

  • コンテンツフィルタリング:不適切なコンテンツの出力を制御。
  • レートリミット:リクエストのスループットを調整。
  • デプロイ名:用途に応じた名前を設定。

注意:モデルによって利用可能な設定が異なる場合があります。

参考

https://learn.microsoft.com/en-us/azure/ai-studio/ai-services/how-to/create-model-deployments?tabs=python

7. エンドポイントの活用

Azure AI InferenceエンドポイントとAzure OpenAI Inferenceエンドポイントは、それぞれのモデル利用に特化したエンドポイントですが、以下の点で異なります。

エンドポイントの違い

項目 Azure AI Inferenceエンドポイント Azure OpenAI Inferenceエンドポイント
統一性 単一のエンドポイントで複数のモデルを利用可能。デプロイメント名を指定するだけでモデルを切り替えられる。 各デプロイメントごとに個別のURLが割り当てられ、モデルの利用にはそれぞれのエンドポイントを指定する必要がある。
認証 同一の認証情報で複数モデルを利用可能。 各デプロイメントに個別の認証情報が必要。
利用例 OpenAI、Meta、Microsoftなど、多様なモデルプロバイダーのモデルに対応。 主にOpenAIのモデルに特化し、追加機能(アシスタント、スレッド、ファイル、バッチ推論など)をサポート。
URL形式 https://<resource-name>.services.ai.azure.com/models https://<resource-name>.openai.azure.com/openai/deployments/<model-deployment-name>
ルーティング デプロイメント名を指定することでリクエストを特定のモデルにルーティング可能。 モデルごとに専用のURLがあり、ルーティング機能は提供されない。

Azure AI Inferenceエンドポイントの利用

Azure AI Inferenceエンドポイントは、デプロイしたモデルを統一的に利用するためのエンドポイントです。

エンドポイントの取得

  1. Azureポータルの「Overview」ページからエンドポイントURLとキーを取得。
  2. デプロイメント名を確認し、リクエストで指定。

コード例:エンドポイントを使用したモデル呼び出し

以下は、デプロイしたモデルを使用するコード例です。

import os
from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential
from azure.ai.inference.models import SystemMessage, UserMessage
from dotenv import load_dotenv

# 環境変数の読み込み
load_dotenv()

client = ChatCompletionsClient(
    endpoint=os.environ["AZUREAI_ENDPOINT_URL"],
    credential=AzureKeyCredential(os.environ["AZUREAI_ENDPOINT_KEY"]),
)

# モデル名をPhi-3-5-MoE-instructに設定
response = client.complete(
    messages=[
        SystemMessage(content="あなたは役に立つアシスタントです。"),
        UserMessage(content="リーマン予想を1段落で説明してください"),
    ],
    model="Phi-3-5-MoE-instruct",
)

print(response.choices[0].message.content)

モデル名を変更するだけで他のモデルにも対応可能です。

# モデル名をgpt-4o-miniに変更
response = client.complete(
    messages=[
        SystemMessage(content="あなたは役に立つアシスタントです。"),
        UserMessage(content="リーマン予想を1段落で説明してください"),
    ],
    model="gpt-4o-mini",
)

print(response.choices[0].message.content)

Azure OpenAI Inferenceエンドポイントの利用

Azure OpenAIモデルは、Azure OpenAI APIを介して追加機能と共に利用できます。

エンドポイントの取得

  1. Azureポータルの「Overview」ページから各デプロイメントごとのエンドポイントURLを確認。
  2. 必要に応じてURLを変更して異なるモデルを利用。

コード例:Azure OpenAIエンドポイントを使用したモデル呼び出し

以下は、Azure OpenAIエンドポイントを利用したモデル呼び出しの例です。

openai = project.inference.get_azure_openai_client(api_version="2024-06-01")

response = openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "あなたは役に立つライティングアシスタントです"},
        {"role": "user", "content": "花についての詩を書いてください"},
    ],
)

print(response.choices[0].message.content)

注意: Azure OpenAIエンドポイントでは、デプロイメントごとに個別のURLが必要です。

エンドポイント利用のポイント

  • 統一性の活用: Azure AI Inferenceエンドポイントでは、モデルを簡単に切り替え可能で、運用コストの削減に役立ちます。
  • 追加機能の利用: Azure OpenAI Inferenceエンドポイントは、OpenAI特有の機能を活用したい場合に便利です。
  • 柔軟な構成: 必要に応じてモデルごとにデプロイメントを複数作成し、用途に応じた構成を提供。

参考

https://learn.microsoft.com/en-us/azure/ai-studio/ai-services/concepts/endpoints?tabs=python

8. 実践例:Promptyを用いたチャット応答

サンプルプログラムの解説

ここでは、Prompty形式のテンプレートを使用して、ホテルのAIアシスタントがゲストの問い合わせに応答するサンプルコードを紹介します。(以下の参考に本サンプルコードの引用元を記載)

サンプルコード

def sample_chat_completions_from_input_prompty():
    import os
    from azure.ai.inference import ChatCompletionsClient
    from azure.ai.inference.prompts import PromptTemplate
    from azure.core.credentials import AzureKeyCredential

    try:
        endpoint = os.environ["AZURE_AI_CHAT_ENDPOINT"]
        key = os.environ["AZURE_AI_CHAT_KEY"]
    except KeyError:
        print("Missing environment variable 'AZURE_AI_CHAT_ENDPOINT' or 'AZURE_AI_CHAT_KEY'")
        print("Set them before running this sample.")
        exit()

    path = "./sample1.prompty"
    prompt_template = PromptTemplate.from_prompty(file_path=path)

    input_text = "When I arrive, can I still have breakfast?"
    rules = [
        {"rule": "The check-in time is 3pm"},
        {"rule": "The check-out time is 11am"},
        {"rule": "Breakfast is served from 7am to 10am"},
    ]
    chat_history = [
        {"role": "user", "content": "I'll arrive at 2pm. What's the check-in and check-out time?"},
        {"role": "assistant", "content": "The check-in time is 3 PM, and the check-out time is 11 AM."},
    ]
    messages = prompt_template.create_messages(input=input_text, rules=rules, chat_history=chat_history)

    client = ChatCompletionsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

    response = client.complete(
        messages=messages,
        model=prompt_template.model_name,
        **prompt_template.parameters,
    )

    print(response.choices[0].message.content)

if __name__ == "__main__":
    sample_chat_completions_from_input_prompty()

sample.promptyファイルの内容と解説

sample.promptyファイルは、Prompty形式で記述されたプロンプトテンプレートです。このテンプレートを使用して、AIアシスタントがゲストの問い合わせに適切に応答します。(今、ラスベガスの某ホテルに泊まってるので、思いついた例です。)

sample.promptyの内容

---
name: Basic Prompt
description: A basic prompt that uses the GPT-3 chat API to answer questions
authors:
  - author_1
  - author_2
model:
  api: chat
  configuration:
    azure_deployment: gpt-4o-mini
  parameters:
    temperature: 1
    frequency_penalty: 0.5
    presence_penalty: 0.5
---
system:
You are an AI assistant in a hotel. You help guests with their requests and provide information about the hotel and its services.

# context
{{#rules}}
{{rule}}
{{/rules}}

{{#chat_history}}
{{role}}:
{{content}}
{{/chat_history}}

user:
{{input}}

Please figure out the best possible answer to the last user query from the conversation above.

テンプレートの解説

  • ヘッダー部分:プロンプトのメタデータを定義します。

    • name:プロンプトの名前。
    • description:プロンプトの説明。
    • authors:作成者。
    • model:使用するモデルとその設定。
      • api:APIの種類(chat)。
      • configuration:モデルのデプロイ名。
      • parameters:モデルのパラメータ(temperatureなど)。
  • プロンプト本文

    • systemメッセージ:AIアシスタントの役割と目的を定義。
    • コンテキストrulesセクションでホテルのルールを挿入。
    • チャット履歴chat_historyセクションで過去の会話を挿入。
    • ユーザー入力{{input}}で最新のユーザーからの問い合わせを挿入。
    • タスク指示:最後にAIが行うべきタスクを明示。

コードの詳細とポイント

環境変数の設定

endpoint = os.environ["AZURE_AI_CHAT_ENDPOINT"]
key = os.environ["AZURE_AI_CHAT_KEY"]
  • AZURE_AI_CHAT_ENDPOINTAZURE_AI_CHAT_KEYは、エンドポイントURLとAPIキーを環境変数として設定します。

Promptyテンプレートの読み込み

prompt_template = PromptTemplate.from_prompty(file_path=path)
  • from_promptyメソッドを使用して、Prompty形式のテンプレートファイルを読み込みます。

動的なメッセージの生成

messages = prompt_template.create_messages(input=input_text, rules=rules, chat_history=chat_history)
  • ユーザーからの入力、ルール、チャット履歴を使用して、メッセージを動的に生成します。

クライアントの初期化とAPI呼び出し

client = ChatCompletionsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

response = client.complete(
    messages=messages,
    model=prompt_template.model_name,
    **prompt_template.parameters,
)
  • ChatCompletionsClientを初期化し、completeメソッドで応答を取得します。
  • prompt_template.model_nameprompt_template.parametersを使用して、モデル名とパラメータを設定します。

結果の出力

print(response.choices[0].message.content)
  • モデルからの応答をコンソールに出力します。

ポイント

  • Prompty形式を使用することで、テンプレートを再利用しやすくなり、プロンプトの管理が容易になります。
  • 環境変数を使用して、セキュリティを確保しながら認証情報を管理します。
  • 動的なコンテンツ挿入:ルールやチャット履歴をテンプレートに動的に挿入し、よりコンテキストに沿った応答を生成できます。

参考

https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/ai/azure-ai-inference/samples/sample_chat_completions_from_input_prompty.py
https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/ai/azure-ai-inference/samples/sample1.prompty

9. Azure AI Inferenceクライアントライブラリの詳細

次に、参考程度に、Azure AI Inferenceクライアントライブラリにも触れてみたいと思います。基本的には、これまでのAzure AI Model Inference APIのPython SDKというだけではあるので、利用方法は大きくは変わらないです。

クライアントの認証と作成

Azure AI Inferenceクライアントライブラリを使用して、サービスへの認証とクライアントの作成を行います。

APIキーを使用した認証

from azure.ai.inference import ChatCompletionsClient
from azure.core.credentials import AzureKeyCredential

client = ChatCompletionsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential("<your-api-key>")
)

EntraIDを使用した認証

from azure.ai.inference import ChatCompletionsClient
from azure.identity import DefaultAzureCredential

client = ChatCompletionsClient(
    endpoint=endpoint,
    credential=DefaultAzureCredential()
)

注意:Azure AD認証を使用する場合は、azure-identityパッケージが必要です。

主要な概念と機能

  • クライアントの種類ChatCompletionsClientEmbeddingsClientがあります。
  • 同期・非同期のサポート:同期・非同期の両方のクライアントが利用可能。
  • モデル情報の取得get_model_infoメソッドでモデル情報を取得できます。

サンプルコードと活用例

チャット応答の例

from azure.ai.inference import ChatCompletionsClient
from azure.ai.inference.models import SystemMessage, UserMessage
from azure.core.credentials import AzureKeyCredential

client = ChatCompletionsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="How many feet are in a mile?"),
    ]
)

print(response.choices[0].message.content)

ストリーミング応答の例

response = client.complete(
    stream=True,
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="Give me 5 reasons to exercise daily."),
    ],
)

for update in response:
    print(update.choices[0].delta.content or "", end="", flush=True)

追加パラメータの使用

response = client.complete(
    messages=[
        SystemMessage(content="You are a helpful assistant."),
        UserMessage(content="Explain quantum computing in simple terms."),
    ],
    model_extras={"key1": "value1", "key2": "value2"},
)

テキスト埋め込みの例

from azure.ai.inference import EmbeddingsClient

client = EmbeddingsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

response = client.embed(input=["first phrase", "second phrase", "third phrase"])

for item in response.data:
    print(f"Index {item.index}: Embedding length = {len(item.embedding)}")

参考

https://learn.microsoft.com/en-us/python/api/overview/azure/ai-inference-readme?view=azure-python-preview

10. 関係性のまとめ

色々と用語がここまで出てきており、それぞれの概念の違いがこんがらがってきたと思います。以下の表は、Azure AI Foundry SDKAzure AI Model Inference API、およびAzure AI Inferenceクライアントライブラリの関係性を整理したものです。

項目 Azure AI Foundry SDK Azure AI Model Inference API Azure AI Inferenceクライアントライブラリ
概要 Azure AIエコシステム全体を統合的に活用するための包括的な開発ツールチェーン。 基盤モデルの共通機能を提供し、さまざまなモデルから一貫した方法で予測を取得するためのAPI。 Azure AI Model Inference APIを操作するためのPython向けSDK。
主な機能 モデル、データ、プロンプト、エージェント、評価などの一元管理と利用。 Azure AI Foundryでデプロイされた異なるモデルと統一的に対話可能。 Pythonコード内でモデル推論を容易に実行するための高水準インターフェースを提供。
役割 AIアプリケーション開発の統合的なプラットフォームを提供。 基盤モデルの推論機能を統一的に提供。 Python開発者がModel Inference APIを簡単に利用できるよう支援。
相互関係 内部でAzure AI Model Inference APIやInferenceクライアントライブラリを活用して、統合的なAI開発環境を提供。 Foundry SDKやInferenceクライアントライブラリによって利用される基盤的なAPI。 Foundry SDKの一部として、または単独でModel Inference APIを操作するために使用。

このように、これらのコンポーネントは連携して機能し、開発者がAzure AIエコシステムを効果的に活用できるよう支援しています。

11. まとめと次のステップ

Azure AI Foundry SDKとAzure AI Model Inference APIは、AIアプリケーション開発の新たな可能性を提供します。本記事では、これらのツールを最大限に活用するための詳細な解説と、実践的なサンプルコードを紹介しました。特に、Prompty形式を使用したテンプレートの活用方法や、APIリファレンスの内容を取り入れた具体的な例を通じて、理解を深めていただけたと思います。

【免責事項】
本記事の情報は執筆時点(2024年12月2日)のものです。本記事は、公開されている情報に基づいて作成されていますが、誤りが含まれている可能性もあります。内容の正確性については、読者ご自身の責任で判断をお願いいたします。AI技術は急速に進化しており、製品の仕様、価格、可用性などが予告なく変更される可能性があります。また、本記事の内容は一般的な情報提供を目的としており、専門的なアドバイスとしては意図していません。適切な専門家にご相談ください。

Discussion