7章 社内文書データの投入

  このページの動画解説をご視聴される場合は、こちらをご活用ください。

データの投入(data 配下の PDF を利用して Search Index を作成)

data/ にある PDF ファイルを Azure Blob Storage にアプロードし、そのデータを使って Azure Search のインデックスを作成します。

環境変数設定

# Azure リソースの作成時に作成されている [Storage account] リソースの名前を設定
$env:AZURE_STORAGE_ACCOUNT = "xxx" 
# 固定値
$env:AZURE_STORAGE_CONTAINER = "content" 
# Azure リソースの作成時に作成されている [Search service] リソースの名前を設定
$env:AZURE_SEARCH_SERVICE = "xxx" 
# 固定値
$env:AZURE_SEARCH_INDEX = "gptkbindex"
# Azure Portal から [Search Service] の Admin Key を取得し、設定
$env:AZURE_SEARCH_KEY = "xxx" 
# Azure リソースの作成時に作成されている [Document intelligence] リソースの名前を設定
$env:AZURE_FORMRECOGNIZER_SERVICE = "xxx" 
# Azure Portal から [Document intelligence] の Key を取得し、設定
$env:AZURE_FORMRECOGNIZER_KEY = "xxx" 

CosmosDB 権限付与スクリプトを実行

# So that the user can access Cosmos DB for script execution
az cosmosdb sql role assignment create --account-name $env:AZURE_COSMOSDB_ACCOUNT --resource-group $env:AZURE_COSMOSDB_RESOURCE_GROUP --scope / --principal-id $env:AZURE_PRINCIPAL_ID --role-definition-id $roleId

Run prepdocs.py

# ハンズオンルートフォルダに移動
cd ~/$ENV:WD/aoai-handson-src/

$pythonCmd = Get-Command python -ErrorAction SilentlyContinue
if (-not $pythonCmd) {
  # fallback to python3 if python not found
  $pythonCmd = Get-Command python3 -ErrorAction SilentlyContinue
}

# Creating python virtual environment "scripts/.venv"
Start-Process -FilePath ($pythonCmd).Source -ArgumentList "-m venv ./scripts/.venv" -Wait -NoNewWindow

$venvPythonPath = "./scripts/.venv/scripts/python.exe"
if (Test-Path -Path "/usr") {
  # fallback to Linux venv path
  $venvPythonPath = "./scripts/.venv/bin/python"
}

# Installing dependencies from "requirements.txt" into virtual environment
Start-Process -FilePath $venvPythonPath -ArgumentList "-m pip install -r ./scripts/requirements.txt" -Wait -NoNewWindow

# Running "prepdocs.py"
$cwd = (Get-Location)
Start-Process -FilePath $venvPythonPath -ArgumentList "./scripts/prepdocs.py $cwd/data/* --storageaccount $env:AZURE_STORAGE_ACCOUNT --container $env:AZURE_STORAGE_CONTAINER --searchservice $env:AZURE_SEARCH_SERVICE --searchkey $env:AZURE_SEARCH_KEY --index $env:AZURE_SEARCH_INDEX --formrecognizerservice $env:AZURE_FORMRECOGNIZER_SERVICE --formrecognizerkey $env:AZURE_FORMRECOGNIZER_KEY -v --managedidentitycredential" -Wait -NoNewWindow

データの投入し、Search Index を作成することで、社内文書検索の機能も使えるようになります。

ナレッジベース設計

Azure Search Index の作成・更新方法

本サンプルでは、data/ ディレクトリにあるデータを、scripts にあるスクリプトで Azure にアップロードし、Azure Search Index を作成する方法をとっています。Index の更新のしやすさや検索結果の改善をする場合、サンプルのスクリプトを部分的に修正するのではなく、要件を整理した上で更新用のアプリケーション構築の用意等についての検討を推奨します。

検索結果の「良さ」や「精度」改善するための設計

生成 AI は確率的な性質を持つため、同じ入力に対しても異なる出力が生成される可能性があります。このような性質は、生成 AI が多様な出力を生成できる利点でもありますが、一方で評価が難しくなる場合もあります。そのため、生成 AI の「良さ」や「精度」を一様に評価するのは困難であり、用途や目的に応じて評価基準が設定されることが多いです。

生成 AI の「良さ」や「精度」を一様に評価するのは困難ではありますが、以下の様なことを考慮すると、エンドユーザの検索結果に対する満足度を高めることができる可能性があります。

  • PDF ファイルの分割方法: 本サンプルでは与えられた PDF を機械的にページ単位で分割していますが。PDF ファイルの分割方法の改善することにより検索結果の良さを高めることができる可能性があります。
  • 画像・複雑な図表・PDF 以外のファイルフォーマットの扱い: 本サンプルは PDF ファイルの扱いを前提としており、画像や複雑な図表を検索結果で活用することはできません。画像・複雑な図表・PDF 以外のファイルフォーマットの扱いも重要なユースケースの場合、ナレッジベース設計を見直す必要がある可能性があります。
  • 各モデルの最大トークン数による制約: 本サンプルの文書検索の結果から返答を作成する過程において、最大トークン数の制約から文書の 1024 トークンのみを利用しています。この制約により、文書の内容を十分に活用できていない可能性があります。この制約を緩和することにより、検索結果の精度を高めることができる可能性があります。