gnails43 / jp-azureopenai-samples

MIT License
0 stars 0 forks source link

社内文書検索の手詰まりポイント #1

Open gnails43 opened 1 year ago

gnails43 commented 1 year ago

元手順 スクラッチでの開始


細かく手順の記載がないため、解説。 全てpwsh.exeでの実行。(最初にインストールした通常のWindows Powershellと違うPowerShell 7による実行)

1.az loginコマンドを実行する。(前に行ったazd loginとは異なるコマンドのため必要。飛ばさないように)

→ az login した後、正常であれば下記情報がシェル上に表示される image

→ 問題がある場合下記のエラーが表示されることがある。 image

以下、ChatGPT回答------ エラーメッセージには、既定のディレクトリ というテナントがMFA(多要素認証)を要求していることが示されています。このテナントにログインするには、以下のコマンドを使用します。

az login --tenant 942350ba-359b-49a6-b7c4-30a8f9243f9b


このコマンドで--tenantを指定することでログインが正常に完了する。

  1. az account set -s YOUR_SUBSCRIPTION_ID を実行する。 サブスクリプションIDは下記 image

3.az ad user show --id your_account@your_tenant -o tsv --query id を実行して、操作をするユーザの AAD アカウントのオブジェクトID を取得する。 → your_account@your_tenant は 下記のユーザープリンシパル名をセットする。 image

4.取得したオブジェクトID を環境変数AZURE_PRINCIPAL_IDにセットする。 環境変数設定は$Env:AZURE_PRINCIPAL_ID="Your Object ID"。

オブジェクトIDは3.のコマンド実行後に表示される文字列 image

環境変数設定のコマンド実行後、環境変数の設定がうまくいったか確認するには$Env:AZURE_PRINCIPAL_IDを実行すると良い。

5.デプロイするファイルが入っているフォルダをカレントディレクトリに指定してからazd up を実行。このときは下記のようにサブスクリプションの選択(1個しかない場合が多い)、リージョンの選択を行う。リージョンはOpenAI Serviceが使えるリージョンを選択するJapan Eastを選ぶ。 image

実行するとデプロイがはじまる image

その後「? Enter a value for the 'vmLoginPassword' infrastructure parameter:」とvmへのログインパスワードの入力を求められる(以前に設定しているパスワードを入力するということではなく、新しく設定するという意味での入力)。 入力すると今後も使うか確認されるのでy image

デプロイが継続される

-追記:下に書いてある色々を試した後に下記リンクをみて、大元の管理者ユーザーでデプロイしようとするとこのエラーが起きてしまうため、ユーザーを別に作る必要があることをしる。ユーザーをたてて、ユーザーアクセス管理者に指定、サブスクリプションへのIAM権限を与えて再度デプロイ手順を1から行うとうまくデプロイできた。 Azure-Samples/azure-search-openai-demo#4 (comment)

デプロイ後のエラー解消メモ 下記エラーが出る。 Azure Cognitive Searchのリソースは作れているがIndexの作成で失敗している。

-RDBに置き換えるとDBのセットアップはできているが、テーブル作成ができていないということ。

Ensuring search index gptkbindex exists Traceback (most recent call last): File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 305, in create_search_index() File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py", line 243, in create_search_index if args.index not in index_client.list_index_names(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 123, in next return next(self._page_iterator) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\core\paging.py", line 75, in next self._response = self._get_next(self.continuation_token) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts.venv\Lib\site-packages\azure\search\documents\indexes_generated\operations_indexes_operations.py", line 512, in get_next raise HttpResponseError(response=response, model=error) azure.core.exceptions.HttpResponseError: () Authorization failed. Code: Message: Authorization failed.

このエラーが出ていてもそのほかのサービスはデプロイできているため、アプリは立ち上がるが、社内文書検索をしようとすると下記エラーがでる。ここでnot foundになっているのが本来あるはずのindex(テーブル)

image

ストレージアカウントのアクセスキーをprepdocs.ps1でprepdocs.pyをたたいているときの引数に追加する。 image

CLIで $Env:AZURE_STORAGEKEY = "アクセスキー名" で環境変数を設定。

image image

ソース: Azure-Samples/azure-search-openai-demo#17 (comment) 英語版のリポジトリなので微妙にソースコードが違う&半年前なのでソースコードが今はかわっていることもあり、このソースで指摘しているように他の引数も設定する必要はなかった(すでに今のps1には設定されてた)

C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py:26: SyntaxWarning: invalid escape sequence '\d' epilog="Example: prepdocs.py '..\data*' --storageaccount myaccount --container mycontainer --searchservice mysearch --index myindex -v" C:\GitHub\jp-azureopenai-samples\5.internal-document-search\scripts\prepdocs.py:105: SyntaxWarning: invalid escape sequence '\d' blobs = filter(lambda b: re.match(f"{prefix}-\d+.pdf", b), blob_container.list_blob_names(name_starts_with=os.path.splitext(os.path.basename(prefix))[0]))

エスケープの警告も出てくるので、下記のようにバックスラッシュを重ねるように2か所修正

epilog="Example: prepdocs.py '..\data*' --storageaccount myaccount --container mycontainer --searchservice mysearch --index myindex -v"

275078296-9e6826f9-0935-48e0-b443-fea2e567478b 275079273-226d762d-4d93-4e2c-9f11-59ec09714161 275049400-afa97350-f4a4-4f81-af51-61e8be181559 275048800-6e64764d-0d0e-43cb-9da4-c477d3d8a2ab 275048465-3871c330-c5cb-4044-a9bd-c483b88d217c 275043193-6cb2302f-b786-4d46-9d57-7a11eb1cb4c8 275038160-fba91c1e-2335-4545-ba65-0e426154f665 275036318-eb2b7131-11a2-4526-9303-fb4a6e43440f 275036043-8b24ba67-63db-40ca-9766-3aba1be8ac48

gnails43 commented 1 year ago

https://techblog.cccmk.co.jp/entry/2023/09/04/091352

gnails43 commented 1 year ago

https://qiita.com/sakue_103/items/95087cb95f1936a8791b

文字数ごとの分割「

gnails43 commented 1 year ago

https://python.langchain.com/docs/use_cases/question_answering/

RAGの仕組み解説

gnails43 commented 1 year ago

https://qiita.com/takeo-furukubo/items/e5d43fa734e4338b895f

Elasticsearch RAG