Azure AI Foundryで別のAzure AI Foudnryリソースのモデルを接続できます。その場合にPython SDKでどう呼び出すのか調べてみました。複数Azure AI Foudnryのリソースを使っているときに何かいいことないかと試してみましたが、特別便利なこともなかったです。
Steps
前提
Ubuntu 22.04.5で動かしています。
[tool.poetry.dependencies]
python = "^3.11"
openai = "^1.64.0"
jupyterlab = "^4.3.5"
azure-ai-projects = "^1.0.0b10"
azure-identity = "^1.21.0"
1. AI Foundry Project接続
Jpana East リージョンの AI Foundry ProjectからJpana East リージョンで使えないモデルをデプロイ。aif-ai-test-wusが別リソースのAI Foundryです。これで自動で接続が作られます(こんな方法とらなくても、直接接続してもいいはず)。
もう一度接続元のモデルデプロイを見ると別Azure AI Foundryリソースのモデルデプロイが確認できます(o1-mini以外は以前に作っていたモデルデプロイ)。
2. Python Script
2.1. Project Client 作成
SDKを使ってClient作成。ここまでは普通です。
from pprint import pprint
from openai import AzureOpenAI
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
project = AIProjectClient(
endpoint="https://<project>.services.ai.azure.com/api/projects/<project>",
credential=DefaultAzureCredential())
このまま呼び出そうとしてもエラーが起きました。
client = project.inference.get_azure_openai_client(api_version="2024-10-21")
response = client.chat.completions.create(
model="o1-mini",
messages=[
{"role": "user", "content": "あなたは誰?"},
],
)
print(response.choices[0].message.content)
NotFoundError: Error code: 404 -
{'error': {'code': 'DeploymentNotFound',
'message': 'The API deployment for this resource does not exist. If you created the deployment within the last 5 minutes, please wait a moment and try again.'}}
2.2. 接続リソース取得
リソース名から接続リソースを取得します。
project.connections.get("aif-ai-test-wus")
pprint(vars(conn))
'data': {'credentials': {'type': 'ApiKey'},
'id': '/subscriptions/<略>',
'isDefault': True,
'metadata': {'ApiType': 'Azure',
'Location': 'westus',
'ResourceId': '/subscriptions/<略>'},
'name': 'aif-ai-test-wus',
'target': 'https://リソース名.cognitiveservices.azure.com/',
'type': 'AIServices'}}
2.3. Client 取得
Auzre OpenAIのCleintを取得。ただエンドポイントに取得した接続リソースの情報conn.target
を使っているだけ。
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)
aoai_client = AzureOpenAI(
api_version="2024-10-21",
azure_endpoint=conn.target,
azure_ad_token_provider=token_provider,
)
2.4. Chat Completion API呼出
当然ですが呼び出せます。
response = aoai_client.chat.completions.create(
messages=[
{
"role": "user",
"content": "I am going to Paris, what should I see?",
}
],
model="o1-mini"
)
print(response.choices[0].message.content)