Azure OpenAI Service(以下Azure OpenAI)は、2023年1月に一般提供が開始されたMicrosoft版のOpenAIサービスだ。GPT-3やChatGPT(GPT-3.5 Turbo)などの大規模言語モデル(LLM)をAzureプラットフォーム上で利用できる。少々、利用申請に戸惑ったが、それらを含め使用感をレポートする。
Azure上で大規模言語モデルを利用可能
Azure OpenAIは、OpenAIが提供するLLMを、Azure上で利用可能にするサービスだ。
すでにOpenAIのAPIサービスを利用して各種サービス開発や自社システムへの組み込みを試している企業も少なくないが、同様のサービスをMicrosoftのクラウドプラットフォーム上で利用できるようになっている。
現状利用可能な機能は「Azure OpenAI Service とは」のページにまとめられている。主なモデルを挙げると、以下の通りだ。
- GPT-4シリーズ(プレビュー)
- GPT-3ベースシリーズ
- ChatGPT(gpt-35-turbo)(プレビュー)
- Codexシリーズ
- 埋め込みシリーズ
なお、GPT-4シリーズは、利用するためにリクエストが必要になる。また、各モデルのトレーニングデータや最大要求トークン数などの詳細については以下に記載されている。
▼GPT-4シリーズのモデルの詳細
Azure OpenAI Service モデル:モデルの概要テーブルとリージョンの可用性:GPT-4モデル
こうしたサービスをAzure上で提供することで、REST APIを使った開発や自社システムへの組み込みが可能になっている。
本家OpenAIのサービスと何が違うのかというと、主にセキュリティや管理機能となる。具体的には以下のような点が挙げられる。
- Azureと同じポータルで管理できる
- 操作環境として「Azure OpenAI Studio」を提供
- 認証やアクセス制御(IAM)、監視などにAzureの機能を利用できる
- Azure上のVMなどのAzureのリソースからのアクセスに限定できる
すでにAzureを業務に利用している企業では、本サービスを利用するメリットが大きいだろう。
料金に関しては、変動する可能性があるので、以下のページで最新の情報を参照してほしい。記事執筆時点では、利用頻度が高そうな、GPT-3シリーズの高品質モデル(速度よりも出力の質を優先するモデル)の最新版「text-davinci-003」では、1000トークンあたり0.02ドルとなっており、OpenAIと同額だ。ほかのモデルの料金もOpenAIのAPIと同じなので、サービスレベルでのコスト差はないと考えていいだろう。
▼Azure OpenAIの料金
Azure OpenAI Service の価格
▼参考:OpenAIの料金
OpenAI Pricing
利用には申請が必要
すでに一般提供が開始されているAzure OpenAIだが、実際に利用するには申請が必要となる。
その理由については、「高い需要、今後の製品の機能強化、Microsoft の責任ある AI へのコミットメントを考慮し、現在、アクセスは制限されています」とされており、現状は、利用者も利用方法も不透明な部分が多いため、まずは申請ベースにして利用状況を把握したいためだろう。
筆者も申請したのだが、この手続きにすっかり手間取ってしまい、実際に利用できるようになるまでに時間を要してしまった。
申請自体は、以下のフォームに必要事項を入力して送信するだけとなっており、項目も組織の情報(Webページや電話番号、業種など)やAzure OpenAIの用途の選択など、簡単なものだが、審査時にドメインの情報と組織の情報がチェックされるようになっており、情報に正確性が欠けると追加の書類の提出が求められたり、申請が却下されたりしてしまう。
▼申請フォーム
Request Access to Azure OpenAI Service
筆者の場合、ドメインの管理者のメールアドレスと申請フォームに入力したメールアドレスが異なる点が問題とされ、その確認や追加書類の提出(ドメインの所有情報など)が必要になって、時間がかかってしまった。
基本的にやり取りは英語となるが、必要な情報や手続きなどは指示してくれるので、根気強く情報を修正したり、書類などを用意したりすれば、小規模な法人でも利用が許可されるはずだ。
デプロイが必要
利用が許可されると、Azureのポータルからサービスを利用可能になる。Azureのほかのサービスと同様に、リソースグループやリージョンを選択して作成すればいい。
ただし、リージョンに関しては、現状は、「East US」「South Central US」「West Europe」「France Central」のみが選択可能となっており、日本のリージョンでは利用できない点に注意が必要だ。
また、ネットワークの設定でアクセスを制限することが可能だ。標準ではインターネット上のすべてのネットワークからのアクセスを許可するが、Azure上の特定の仮想ネットワークを選択してアクセスを制限したり、特定の送信元IPアドレスからのアクセスのみを受け付ける設定に変更したりできる。
上記、基本的な設定のみでリースの作成は可能だが、そのままではまだAPIは利用できない。APIを利用するには、モデルを選択したデプロイが必要となる。
Azureのポータルからもデプロイは可能だが、以降の操作は「Azure OpenAI Studio」を利用した方がわかりやすい。
たとえば、「デプロイ」から「新しいデプロイの作成」を選択し、デプロイ名(APIアクセス時に指定する必要あり)とモデル名(text-davinci-003)、モデルバージョンを指定することで、モデルを作成できる。ただし、現状は、1モデルあたり1デプロイとなっており、同じモデルを複数デプロイすることはできない。
デプロイが完了すると、Azure OpenAI Studioのプレイグラウンドやチャット(どちらを使えるかはモデル次第)で動作を確認できる。
画面上で簡単に温度(OpenAIのTemperature)を変化させたり、プロンプトの例を参照したりできるので、動作のチェックは簡単だ。
また、「コードの表示」から、実行用のコードを表示することもできる。APIに必要なエンドポイントのURLやキーも一緒に表示されるので、開発に役立つだろう。
簡単なAPIを実行してみる
せっかくなので、APIを利用して簡単なリクエストをする例を紹介する。企業で使う場合、社内文書などの資料を対象として情報を検索したいケースが考えられるので、今回はPDFファイルを読み込んで、その内容について質問できるようにしてみた。
具体的には、読み込んだPDFをページごとに分割して、まずは質問の内容に近いページを抽出。LangChainを利用して、与えられたコンテキストからのみ回答するようにプロンプトのテンプレートを構成し、抽出したPDFのテキストをコンテキストとして設定。その内容に対して答えてもらうような構成となっている。
用途としては、特定の報告書や契約書などの内容について質問する例を想定している。なお、実行するには、それなりにローカルの環境を整備する必要があるが、今回は長くなるので省略する(今回はWindowsのローカルのPython環境でVisual Studio Codeを使って実行)。
### ドキュメントを読み込む
import os
import openai
from langchain.llms import AzureOpenAI
from langchain.prompts import PromptTemplate
from langchain.document_loaders import PagedPDFSplitter
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddingsopenai.api_type = "azure"
openai.api_base = "https://リソース名.openai.azure.com/"
openai.api_version = "2022-12-01"
### 環境変数OPENAI_API_KEYにAzureのキーを登録しておく
openai.api_key = os.getenv("OPENAI_API_KEY")
### PDF読み取り
### 事前にpip install pypdf必要
loader = PagedPDFSplitter("d:\\temp\\pdf.pdf")
pages = loader.load_and_split()
### faissでキーワードに似た情報が含まれるページを探させる
### 事前にpip install faiss-cpu必要
key_word = "清水が光ファイバーを導入した理由"
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings(deployment="EM2",chunk_size=1))
docs = faiss_index.similarity_search(key_word)
### テンプレート作成
template = """事前知識ではなく以下のコンテキストを活用して質問に回答してください。
コンテキスト:
'''{pdfdata}'''
質問:
{item}について教えてください。
回答:"""
prompt = PromptTemplate(
input_variables=["pdfdata","item"],
template=template,
)
### テンプレートにitemを指定してプロンプト作成
### docs[0]が関連性の高いページのテキスト、key_wordが検索ワード
print(prompt.format(pdfdata=docs[0:2],item=key_word))
### GPTのパラメーター設定
llm=AzureOpenAI(
deployment_name="DA3"
)
### GPTにリクエスト
### docs[0:2]が関連性の高い複数ページのテキスト、key_wordが検索ワード
print(llm(prompt.format(pdfdata=docs[0:2],item=key_word)))
実行すると、アクセスと解析にしばらく時間をかけたのち、回答がコンソールに出力される。今回はPDFファイルが1つだが、これを増やせるようになれば、社内文書に対して、自然言語での問い合わせが可能になりそうだ。
学習リソースも活用できる
以上、Azure OpenAIを実際に試してみたが、Microsoft 365やAzureなどでMicrosoftのクラウドサービスを活用している企業は、本サービスを利用する価値が高そうだ。
学習のためのリソースも用意されており、以下のリンクからMicrosoft Learnを使って概要を学んだり、GitHubで公開されているサンプルを活用して使い方を学んだりすることもできる。
▼学習用リソース
Microsoft Learn Azure OpenAI Service の概要(Microsoft Learn)
Azure OpenAIサンプル(GitHub)
BingAIもそうだが、本家OpenAIのサービスをより実用的にしたものとなっているので、一度、体験してみることをおすすめする。