📝
AI Searchのインデックスを一括ダウンロード
やりたいこと
AI Searchでインデックスを作成して、想定通りのchunkができているのか気になったり、
既存システムの精度改善とかだと既存のインデックスの中身を確認したくなります。
Azure Portalからインデックスのjsonを一括ダウンロードできるのかなと思って、探したけど見つからなかったので、APIで叩くことにします。
タイトルと内容は違いますが、一括ダウンロードしたいけどできなかったから、API叩いてcsvにしたっていう話です。
使用するAPI
サンプルコード
AzureOpenAIにAI Searchのインデックスの中身を取得して、csvに保存するコードって聞いたら、
下記を出力してくれました。
import requests
import csv
# Azure Searchの設定
service_name = 'your-service-name'
api_key = 'your-api-key'
index_name = 'your-index-name'
api_version = '2021-04-30-Preview' # 使用するAPIのバージョン
# Search API URLの構築
url = f'https://{service_name}.search.windows.net/indexes/{index_name}/docs/search?api-version={api_version}'
# ヘッダーにAPIキーを設定
headers = {
'Content-Type': 'application/json',
'api-key': api_key
}
# 検索クエリの設定
# ここでは全ドキュメントを取得するために '*' を使用
payload = {
"search": "*",
"select": "field1,field2,field3", # 取得したいフィールド名を指定
"top": 1000 # 取得するドキュメントの最大数
}
# APIリクエストを送信
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status() # エラーがあれば例外を投げる
# 応答からドキュメントを取得
documents = response.json()
# CSVファイルに保存
csv_file = 'documents.csv'
with open(csv_file, mode='w', newline='') as file:
writer = csv.writer(file)
# CSVのヘッダー
writer.writerow(['field1', 'field2', 'field3'])
# 各ドキュメントの情報をCSVに書き込む
for doc in documents.get('value', []):
field1 = doc.get('field1')
field2 = doc.get('field2')
field3 = doc.get('field3')
writer.writerow([field1, field2, field3])
print(f'ドキュメントの一覧を {csv_file} に保存しました。')
- api_versionを2023-11-01に変更
- 下記のクエリキーをapi_keyに変更
- service_name、index_nameを変更
- 取得したいフィールドを変更
- topをドキュメント数の上限くらいに変更(1000が上限なので変更しなくてよい)
※ドキュメント数が1000を超える場合はskipを設定して回せば良い
クエリのパラメータについて
まとめ
Export機能が追加されるまでのメモでした。
Discussion