Azure OpenAI Service On Your Data を試してみる(2)

NTTデータ先端技術株式会社の原田です。

Microsoft Ignite 2023 Opening keynote の感想 を書き終わりセッション見ていこうと言うところで、対象の絞り込みに Azure OpenAI Service を使ってみようと思いつきました。
やりたいことは On Your Data でセッション資料を食べさせたモデルを構築してチャットしてみると言うものです。

前回の記事は[こちら](https://qiita.com/koutaro_harada/items/720be7799f90ea002986)。

掲載しているスクリプトやコマンドの実行については自己責任でお願いします。

## はじめに
はじめにお詫びから。
前回セッション資料を登録しましたが文字数が少なく良いサンプルになりませんでしたので、改めてキャプションファイルを上げなおしています。
このため冒頭でキャプションファイルの取り扱いのセクションが入ります、冗長な記載になり申し訳ありません。

## キャプションファイルのダウンロード
キャプションファイルのダウンロードリンクは前回の PowerShell スクリプトを使用して、

```
.\Get-EventSession.ps1 -Event Ignite2023 -InfoOnly | Select sessionCode,captionFileLink | Export-Csv -Path "セッション情報ファイル格納先" -NoTypeInformation
```

のコマンドで取得できるセッション情報の captionFileLink に入っています。
Powershell を起動してセッション情報ファイルと同じフォルダにカレントフォルダを移動して、

```
$SESSION_FILE = "セッション情報ファイル"
$DOWNLOAD_FOLDER = "キャプションファイルダウンロード先フォルダ"

Set-Location (Split-Path $MyInvocation.MyCommand.Path -parent)
New-Item -Path $DOWNLOAD_FOLDER -Type directory

$session = Get-Content $SESSION_FILE
foreach ($row in $session) {
    $cols = $row.split(",")
    if ($cols[1].Length -gt 2){
        $uri = $cols[1].Replace('"','')
        $filename = $cols[0].Replace('"','') + ".docx"
        $outfile = Join-Path -Path $DOWNLOAD_FOLDER -ChildPath $filename
        #Write-Host $uri
        Write-Host $outfile
        Invoke-WebRequest -Uri $uri -OutFile $outfile
    }
}
```

でダウンロードしてください。

## データソースの追加
ひとまず Keynote のキャプションファイル (KEYxxx) を Blob に上げてデータソースの追加を実行したところ、なぜかこの日は OpenAI Studio の機嫌が悪いのかどうしてもエラーとなってしまいました。
代わりに REST API で実行することができましたので参考情報を掲載いたします。

https://learn.microsoft.com/en-us/azure/ai-services/openai/reference#start-an-ingestion-job

こちらを実行したのち OpenAI Studio で Azure AI Search をデータソースとして選択する手順で上手くいきました。
![cc4913c1b6157cd05593_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/310a26d3-31aa-a592-fc5a-de23154fda4d.png)
困ったときは REST API ですね。

## Copilot Stack についての情報はありますか？
それではお試しに「Do you have any information about Copilot Stack?」と言う質問に対するデータソース追加前後の回答を見比べてみましょう。
![cc4913c1b6157cd05593_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/4d86a96d-ff98-fe51-c24f-bb578ad1378e.png)
こうかは　ばつぐんです凄く饒舌になりました。

## Azure Stack についての情報はありますか？
さて本番です「Do you have any information about Azure Stack?」と質問を投げかけてみます。
![cc4913c1b6157cd05593_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/e2c743fb-f2c6-ee7e-deab-a959ca05ffe2.png)
なんと Keynote では Azure Stack についての言及はなかったようです。

それでは手元にあるファイル計 241 個をアップロードして再チャレンジ。
![cc4913c1b6157cd05593_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620633/257b6dbb-d218-c47f-e102-6e4d4ee06a9a.png)
出ました、どうも製品紹介のようで期待した内容とは若干ずれてますがまあ良しとしましょう。

## Curl サンプルコード
On Youd Data で質問する際のサンプルコードはこんな感じになります。

```
api_base = "Azure OpenAI Service のエンドポイント"
api_key = "Azure OpenAI Service のキー"
deployment_id = "Azure OpenAI Service モデル名"
search_endpoint = "Azure AI Serach の URL"
search_key = "Azure AI Serach のキー (管理者キーではなくても良いかも)"
search_index = "Azure AI Serach のインデックス名"

curl -i -X POST $api_base/openai/deployments/$deployment_id/extensions/chat/completions?api-version=2023-08-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $api_key" \
  -d \
  '
  {
  "dataSources": [
    {
      "type": "AzureCognitiveSearch",
      "parameters": {
        "endpoint": "'$search_endpoint'",
        "key": "'$search_key'",
        "indexName": "'$search_index'"
      }
    }
  ],
  "messages": [{"role":"system","content":"You are an AI assistant that helps people find information."}],
}
```

Logic Apps でラップするのも難しくなさそうです。

## おわりに
OpenAI Service のご機嫌の影響で少し遠回りもありましたが、無事 On Your Data を試してみることができました。
期待した情報を得ることはかないませんでしたが (もともとなかったんでしょう)、学習としては十分面白かったです。
まだセキュリティやクォータ周りで確認したいことはありますが、このお題は一旦ここまでにしたいと思います。