初めに
こんにちは。すぎもんです
Azure OpenAI On Your Dataは、企業や個人が所有する非公開データをChatGPTのような高度な言語モデルと組み合わせることができる機能です。この機能により、ユーザーは自社のドキュメントやデータを基にAIモデルの回答をカスタマイズし、より正確で関連性の高い情報を得ることができます。
本ブログでは、Azure OpenAI On Your Dataのセットアップ方法やAPI呼び出し方法について触れていきます。
この記事を通じて、読者の皆様がAzure OpenAI On Your Dataの潜在的な価値を理解し、自社のデータを活用した革新的なAIソリューションの構築に役立てていただければ幸いです
今回やること
チャットプレイグラウンドで質問した内容をBlobストレージにあるPDFファイルの内容から読み取り回答してもらう。
実施するのに必要な設定
1.Azure OpenAI
2.Blobストレージ
3.AI Search
4.インデックス
5. 実行してみる
6. コマンドで実行してみる
Azureの設定
1.Azure OpenAI
➀サービス登録
Open AIを作成します。
今回は下記を作成しました。
作成したら
Azure OpenAI Studioを開きます
➁デプロイ
Azure OpenAI Studioで「デプロイ」のタブに移動します。
下記をデプロイしました。
デプロイ名:gpt-35
デプロイモデル:gpt-35-turbo-16k
デプロイしたモデルによっては適していない場合もあるのでご注意ください
セットアップ
ここからセットアップ画面に沿って必要なものを設定していきます。
「チャット」タブに移動します。
「データを追加する」から
[データソースの追加
]を開きます
ここからが、Azure OpenAI On Your Dataを使う上での設定になります
今回はBlobストレージにあるファイルを読み取ってくる設定をするので下記設定をします
➀:Azure Blob Storage(プレビュー)
➁~ の設定の詳細は次でご説明します
項目 | 説明 |
---|---|
➀ | Blobストレージから読み取る指定をします |
➁ | 読み取る対象のストレージとコンテナ名を指定します。 |
➂ | 「4.AI Search」で設定したものを指定します。 |
➃ | インデックス名を新規で作成することが出来ます。 |
➄ | インデックスを読み取るタイミングを指定出来ます。 |
2.Blobストレージ
今回はBlobストレージにこちらのデータを格納します。
HULFT Square サービス仕様書.pdf
下記のBlobストレージ、コンテナーを作成しPDFファイルを格納します。
Blob Storage名 : 0001blobstorag
コンテナー名 : addyourdata
Azure OpenAI On Your Dataでは、以下のファイル形式がサポートされています
.txt (テキストファイル)
.md (Markdownファイル)
.html (HTMLファイル)
.docx (Microsoft Wordファイル)
.pptx (Microsoft Powerpointファイル)
.pdf (PDFファイル)
3.AI Search
「➂AI Search」に設定するためのリソースを作成します。ここは新しくポータル画面で作成が必要です。
➂AI SearchはAzureポータルから新規作成します。
今回は「standard」を選択しました。
4. インデックス
インデックスの設定をします。
今回は下記で設定します。
➃インデックス名:addyourdata
➄インデクサーのスケジュール:Once
※「➃インデックス名」はOn Your Data作成画面に名前を入れて保存すると「インデックス」の項目に自動で新規作成されます。
インデクサーとは
インデックス作成にはインデクサーが使用されます。インデクサーは、指定されたデータソースから定期的に情報を取得し、変更があった場合にはインデックスを更新します。この機能により、最新の情報が常に反映されることが保証されます
ここでは下記が設定可能です。
Once ・・・1 回
Hourly ・・・1 時間ごと
Daily ・・・1 日ごと
実際に試してみます
5. 実行してみる
画面で「HULFT Squareの稼働時間は?」と聞いてみます。
PDFファイルの内容が読み込めていることが確認できます。
コマンドで実行してみる
6. コマンドで実行してみる
APIでコマンドを使って実行してみます。
上記のサンプルコードは参考になりますが、そのままでは実行出来ません。
下記コードをお試しください。
$uri = "<➀YOUR_RESOURCE_NAME>/openai/deployments/<➁YOUR_DEPLOYMENT_NAME>/extensions/chat/completions?api-version=2023-06-01-preview"
$headers = @{
"Content-Type: application/json" \
"api-key: <➂YOUR_API_KEY>" \
"chatgpt_url: <➃YOUR_RESOURCE_URL>" \
"chatgpt_key: <➄YOUR_API_KEY>" \
}
$body = @{
extensions = @() # 必要に応じて適切な拡張機能を追加
dataSources = @(
@{
type = "AzureCognitiveSearch"
parameters = @{
"endpoint": "'<➅YOUR_AZURE_COGNITIVE_SEARCH_ENDPOINT>'",
"key": "'<➆YOUR_AZURE_COGNITIVE_SEARCH_KEY>'",
"indexName": "'<➇YOUR_AZURE_COGNITIVE_SEARCH_INDEX_NAME>'"
}
}
)
messages = @(
@{
role = "user"
content = "HULFT Squareの稼働時間は?"
}
)
temperature = 0.7
top_p = 0.95
max_tokens = 800
stop = $null
stream = $false
}
$jsonBody = $body | ConvertTo-Json -Depth 10
$response = Invoke-RestMethod -Uri $uri -Method Post -Headers $headers -Body $jsonBody
# $responseを詳細に表示
$response | Format-List -Property *
# choicesキーから応答メッセージを抽出
$reply_message = $response.choices[0].messages | ForEach-Object { $_.content }
$reply_message
プレースホルダー | 項目 | 説明 |
---|---|---|
<➀YOUR_RESOURCE_NAME> | リソース名 | チャットプレイグラウンドで出したサンプルコードに沿って設定してください。 |
<➁YOUR_DEPLOYMENT_NAME> | デプロイメント名 | チャットプレイグラウンドで出したサンプルコードに沿って設定してください。 |
<➂YOUR_API_KEY> | APIキー(Content-Type) | 上記➀のAPIキーになります。 |
<➃YOUR_RESOURCE_URL> | リソースURL | 「1.Azure OpenAI」でデプロイした「gpt-35-turbo-16k」のエンドポイントを使用ください。 |
<➄YOUR_API_KEY> | APIキー(chatgpt_key) | 上記➃のキーになります。 |
<➅YOUR_AZURE_COGNITIVE_SEARCH_ENDPOINT> | Azure Cognitive Searchエンドポイント | 「3.AI Search」のエンドポイントになります。 |
<➆YOUR_AZURE_COGNITIVE_SEARCH_KEY> | Azure Cognitive Searchキー | 上記➅のキーになります。 |
<➇YOUR_AZURE_COGNITIVE_SEARCH_INDEX_NAME> | Azure Cognitive Searchインデックス名 | 「4. インデックス」で設定したインデックス名です。 |
<➀YOUR_RESOURCE_NAME>と<➃YOUR_RESOURCE_URL>は設定するエンドポイントが似ていますがバージョンや、パスが若干異なるのでご注意ください。
※バージョンの最新モデルは公式ページからも確認出来ます。
最後に
最後までお読みいただき、ありがとうございます。
今回ご紹介した方法を用いることで、社内データを扱う際にBlobストレージに蓄積されているRAGから取得するため、社内データがAIの学習データとして蓄積される危険を回避し、安全にデータを活用できるのではないでしょうか。
個人的には、デプロイモデルのコスト体系の理解や、APIで実行する場合のエンドポイントの仕組みに苦労しました。Azure OpenAIは日々バージョンアップしているため、未知の部分も多いと感じます。しかし、本記事が皆様のAIに対する関心を高める一助になれば幸いです。
このブログでは、今後も様々なトピックや接続検証など、皆さんの参考になる記事を投稿していきたいと思います。どうぞお楽しみに!
それでは、またお会いしましょう!