概要
もはや説明不要かもしれませんが、2022年11月にOpenAI社からChatGPTがリリースされてから、LLM
(Large Language Model
) によるテキスト生成はグッと一般的になりました。ChatGPT
以外だとAnthropic社のClaudeやGoogle社のGeminiも有名ですが、最大手がChatGPT
な状況はまだまだ変わりそうにありません。
(丁志仁, CC BY-SA 4.0, via Wikimedia Commons)
こうしたLLM
人気を受けてか、LLM
エンジンを使ったクラウドサービスも各社から出ています。AWS
ならAmazon Bedrock
、Google Cloud
ならVertex AI Studio
、Azure
ならMicrosoft Azure OpenAI Service
などですね。いずれのサービスも、テキスト生成や画像生成など、用途に応じたLLM
モデルを選択できるようになっています。
この記事では、そのうちMicrosoft Azure OpenAI Service
を使い、GPT-4
にアクセスし、OpenAI
社のGPT-4
との「使い方の違い」について詳しく解説していきます。
OpenAIの場合
OpenAI 公式サイトの解説ページに詳しく書かれていますが、必要最低限な箇所について解説します。
まず、API キーを取得します。同社サイトにログインし、Dashboard
タブ→API Keys
タブに移動。そして、Create new secret key
ボタンをクリックして、API キーを取得します。
このコピーした API キーを、APIにアクセスする際に使用します。まずはcurl
コマンドで動作を確認してみましょう。
OPENAI_API_KEY='sk-XXXXXXXX'
curl "https://api.openai.com/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "あなたは平安時代の歌人です。"
},
{
"role": "user",
"content": "朝食に関する短歌を詠んでください。"
}
]
}'
このコマンドを実行すると、GPT-4o
が、平安時代の歌人になりきって、朝食に関する短歌を詠んでくれるはずです。JSON
出力における['choices'][0]['message']['content']
に、今回生成したテキストが格納されています。
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1729215993,
"model": "gpt-4o-2024-08-06",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "朝ぼらけ 新しき日を 迎えつつ \n炊ぐ釜より 香る飯の湯気 ",
"refusal": null
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 36,
"completion_tokens": 31,
"total_tokens": 67,
"prompt_tokens_details": {
"cached_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0
}
},
"system_fingerprint": "fp_xxx"
}
公式ドキュメントによると、gpt-4o
より賢くないけど速くて安いgpt-4o-mini
や、逆にgpt-4o
より賢いけど遅くて高いo1-preview
など、状況に応じて様々なモデルを選択できます。
また、messages
において、role
がsystem
の場合は「モデルがどのように振る舞うべきかの指示」、role
がuser
の場合は「モデルに対するユーザーの入力 (ChatGPTでユーザーが入力するテキストと概ね同じ)」となります。こういった作法に従えば、誰でも簡単に「LLM
を使ったテキスト生成」をソフトウェアに組み込めるわけですね。
なお、こうした素のREST API
の他に、Python や JavaScript や .NET など、他の言語向けのインターフェースも提供されています。例えば、Python の場合は以下のようになります。
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model='gpt-4o',
messages=[
{'role': 'system', 'content': 'あなたは平安時代の歌人です。'},
{'role': 'user', 'content': '朝食に関する短歌を詠んでください。'},
]
)
print(completion.choices[0].message)
Azure OpenAI Serviceの場合 (セットアップ編)
Azure OpenAI Serviceの場合も、まずは Azure 公式サイトからアカウントを作成することになります。
次に、APIキーを発行するための手続きを行う……のですが、そのためのステップが少々長めです。箇条書きにしても、次のようなステップが必要となります。
- 「サブスクリプション」を作成する
- 「リソースグループ」を作成する
- 「リソース」として「Azure OpenAI Service」を作成する
- 作成したリソースに対応する、「エンドポイントURL」と「APIキー」を取得する
- 「モデルデプロイ」メニューから「Azure OpenAI Studio」に遷移し、「デプロイ」を作成する
- 「エンドポイントURL」と「APIキー」、そして「デプロイ」の名前が
REST API
の呼び出しに必要となる
具体的な説明画像については、枚数が多いので、以前発表したスライド記事の4ページ目以降を参照してください。
この構造を読み解くポイントとしては、次のようにまとめられるでしょう。実験用のリソースと本番用のリソースを分けて用意できるし、素のモデルと追加学習済みモデルを簡単に切り替えられる、といった感じでしょうか。
- 「サブスクリプション」は課金を設定するために必要
- 「リソースグループ」はリソースをまとめるために必要
- 「(Azure OpenAI Serviceの) リソース」は、実際に
LLM
を使うために必要。APIキー
やエンドポイントURL
はこのリソースと紐づいている - 1つのリソースは複数の「デプロイ」を持てる
- 「デプロイ」は、「基本モデル」か「基本モデルに追加学習させたもの」のどちらかを元に作成できる
Azure OpenAI Serviceの場合 (使い方編)
前述したように、「エンドポイントURL」「APIキー」「デプロイ名」の3つが、Azure OpenAI Service
を使うために必要です。まずは、公式リファレンスを見ながらREST API
を使ってみましょう。OpenAI API
のそれと似ているようで、ところどころ違う……といった風な設定です。
ENDPOINT_URL='https://my-resource.openai.azure.com'
API_KEY='XXXXXXXX'
DEPLOY_NAME='my-deploy'
API_VERSION='2024-02-01'
curl "${ENDPOINT_URL}/openai/deployments/${DEPLOY_NAME}/chat/completions?api-version=${API_VERSION}" \
-H "Content-Type: application/json" \
-H "api-key: ${API_KEY}" \
-d '{
"messages": [
{
"role": "system",
"content": "あなたは平安時代の歌人です。"
},
{
"role": "user",
"content": "朝食に関する短歌を詠んでください。"
}
]
}'
また、Python
の場合も、Azure
の方はOpenAI
の方とところどころ違うコードとなります。公式リファレンスに明記されていますが、ライブラリの旧バージョン (0.28.1
など) と新バージョン (1.x
など) で書き方が大きく異なるので、利用の際には注意が必要です。
# OpenAI Python 1.xの場合
from openai import AzureOpenAI
ENDPOINT_URL='https://my-resource.openai.azure.com'
API_KEY='XXXXXXXX'
DEPLOY_NAME='my-deploy'
API_VERSION='2024-02-01'
client = AzureOpenAI(
azure_endpoint = ENDPOINT_URL,
api_key=API_KEY,
api_version=API_VERSION
)
completion = client.chat.completions.create(
model="gpt-35-turbo", # model = DEPLOY_NAME.
messages=[
{'role': 'system', 'content': 'あなたは平安時代の歌人です。'},
{'role': 'user', 'content': '朝食に関する短歌を詠んでください。'},
]
)
print(completion.choices[0].message)
# OpenAI Python 0.28.1の場合 (旧方式)
from openai import AzureOpenAI
ENDPOINT_URL='https://my-resource.openai.azure.com'
API_KEY='XXXXXXXX'
DEPLOY_NAME='my-deploy'
API_VERSION='2024-02-01'
openai.api_type = "azure"
openai.api_base = ENDPOINT_URL
openai.api_key = API_KEY
openai.api_version = API_VERSION
response = openai.ChatCompletion.create(
engine="gpt-35-turbo", # model = DEPLOY_NAME.
messages=[
{'role': 'system', 'content': 'あなたは平安時代の歌人です。'},
{'role': 'user', 'content': '朝食に関する短歌を詠んでください。'},
]
)
print(response['choices'][0]['message']['content'])
まとめ
Azure OpenAI Service
を使う際の手順を解説しました。OpenAI
の場合と比べると、Azure
の方は「リソース」「デプロイ」など、より細かい設定が必要となりますが、その分、より柔軟な運用が可能となります。
- 閲覧数 71
コメントを追加