1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure OpenAI On Your Dataを使ってみた

Last updated at Posted at 2024-11-08

初めに

こんにちは。すぎもんです:grinning:
Azure OpenAI On Your Dataは、企業や個人が所有する非公開データをChatGPTのような高度な言語モデルと組み合わせることができる機能です。この機能により、ユーザーは自社のドキュメントやデータを基にAIモデルの回答をカスタマイズし、より正確で関連性の高い情報を得ることができます。

本ブログでは、Azure OpenAI On Your Dataのセットアップ方法やAPI呼び出し方法について触れていきます。

この記事を通じて、読者の皆様がAzure OpenAI On Your Dataの潜在的な価値を理解し、自社のデータを活用した革新的なAIソリューションの構築に役立てていただければ幸いです

今回やること

image.png

image.png
チャットプレイグラウンドで質問した内容をBlobストレージにあるPDFファイルの内容から読み取り回答してもらう。

実施するのに必要な設定

1.Azure OpenAI
2.Blobストレージ
3.AI Search
4.インデックス
5. 実行してみる
6. コマンドで実行してみる

Azureの設定

1.Azure OpenAI

➀サービス登録

Open AIを作成します。
今回は下記を作成しました。

サービス名:GPT
image.png

Azureポータルから新規作成します。
※今回は「standard S0」を選びました。
image.png

作成したら
Azure OpenAI Studioを開きます

image.png

➁デプロイ

Azure OpenAI Studioで「デプロイ」のタブに移動します。
下記をデプロイしました。

デプロイ名:gpt-35
デプロイモデル:gpt-35-turbo-16k
デプロイしたモデルによっては適していない場合もあるのでご注意ください
image.png

デプロイは「Standard」があるモデルを選ぶことを推奨します。
*2024/9の段階ではgpt-4 を選択すると、Provisioned-Managed がデフォルトで選択されています。
選択したモデルによってAI searchに適していない場合やコストが高額になる場合があるのでご注意ください。

エンドポイント確認
デプロイしたモデルを押下すると
中が確認できるのでエンドポイント、APIキーを確認することが出来ます。
※APIキーは後程使います。

image.png

image.png

セットアップ
ここからセットアップ画面に沿って必要なものを設定していきます。

「チャット」タブに移動します。
「データを追加する」から
[データソースの追加]を開きます
image.png

ここからが、Azure OpenAI On Your Dataを使う上での設定になります
今回はBlobストレージにあるファイルを読み取ってくる設定をするので下記設定をします
➀:Azure Blob Storage(プレビュー)
➁~ の設定の詳細は次でご説明します
image.png

項目 説明
Blobストレージから読み取る指定をします 
読み取る対象のストレージとコンテナ名を指定します。
「4.AI Search」で設定したものを指定します。
インデックス名を新規で作成することが出来ます。
インデックスを読み取るタイミングを指定出来ます。

2.Blobストレージ

image.png

今回はBlobストレージにこちらのデータを格納します。
HULFT Square サービス仕様書.pdf
image.png

下記のBlobストレージ、コンテナーを作成しPDFファイルを格納します。
Blob Storage名 : 0001blobstorag
コンテナー名 : addyourdata

image.png

Azure OpenAI On Your Dataでは、以下のファイル形式がサポートされています
.txt (テキストファイル)
.md (Markdownファイル)
.html (HTMLファイル)
.docx (Microsoft Wordファイル)
.pptx (Microsoft Powerpointファイル)
.pdf (PDFファイル)

3.AI Search

「➂AI Search」に設定するためのリソースを作成します。ここは新しくポータル画面で作成が必要です。
image.png

➂AI SearchはAzureポータルから新規作成します。
今回は「standard」を選択しました。
image.png

今回は下記の名前で作成しました。
サービス名:Search
image.png

AI SearchのエンドポイントとAPIキーは後に使いますので控えておいてください。
image.png

4. インデックス

インデックスの設定をします。
今回は下記で設定します。
➃インデックス名:addyourdata
➄インデクサーのスケジュール:Once

image.png
※「➃インデックス名」はOn Your Data作成画面に名前を入れて保存すると「インデックス」の項目に自動で新規作成されます。

インデックスとは
インデックスは、ユーザーがアップロードしたデータを効率的に検索可能な形式に変換するための構造です。具体的には、以下のような機能があります:

image.png
image.png

インデクサーとは
インデックス作成にはインデクサーが使用されます。インデクサーは、指定されたデータソースから定期的に情報を取得し、変更があった場合にはインデックスを更新します。この機能により、最新の情報が常に反映されることが保証されます
ここでは下記が設定可能です。
Once ・・・1 回
Hourly ・・・1 時間ごと
Daily ・・・1 日ごと

他は下記のように設定しました。
検索の種類:キーワード
image.png

データ接続:APIキー
image.png

全体を確認して保存をかけたらデプロイ出来ます。
image.png

実際に試してみます

5. 実行してみる

画面で「HULFT Squareの稼働時間は?」と聞いてみます。

image.png

PDFファイルの内容が読み込めていることが確認できます。

image.png

コマンドで実行してみる

6. コマンドで実行してみる

APIでコマンドを使って実行してみます。

image.png

image.png

上記のサンプルコードは参考になりますが、そのままでは実行出来ません。
下記コードをお試しください。

Windows PowerShell
$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>は設定するエンドポイントが似ていますがバージョンや、パスが若干異なるのでご注意ください。
※バージョンの最新モデルは公式ページからも確認出来ます。

「AI Search」の中で読み取った全てのデータの中から検索したい情報だけを「Azure OpenAI On Your Data」が回答してくれます。
実行すると1レコード目は「AI Search」のデータを吐き出し、2レコード目に「Azure OpenAI On Your Data」が欲しい情報を回答してくれます。
image.png
※PDFの内容が長いので全体は移しませんが、「AI Search」がPDFの内容を読み取れていることが確認出来ます。

最後に

最後までお読みいただき、ありがとうございます。

今回ご紹介した方法を用いることで、社内データを扱う際にBlobストレージに蓄積されているRAGから取得するため、社内データがAIの学習データとして蓄積される危険を回避し、安全にデータを活用できるのではないでしょうか。

個人的には、デプロイモデルのコスト体系の理解や、APIで実行する場合のエンドポイントの仕組みに苦労しました。Azure OpenAIは日々バージョンアップしているため、未知の部分も多いと感じます。しかし、本記事が皆様のAIに対する関心を高める一助になれば幸いです。

このブログでは、今後も様々なトピックや接続検証など、皆さんの参考になる記事を投稿していきたいと思います。どうぞお楽しみに!

それでは、またお会いしましょう!:raised_hand:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?