Azure Open AI の素人が自分のブログ記事を連携しようとしたら超絶苦労した件

839 Views

January 18, 24

スライド概要

Azure Open AI の素人が自分のブログ記事を連携しようとしたら超絶苦労したので、どんなことで苦労したかなどまとめました。

profile-image

SIerの人。Xamarin.iOS が好き。Azure と戯れるのが仕事。Visual Studio for Mac が Win版と同等になる日を切望。Microsoft MVP Developer Technologies 2017-

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Azure Open AI の素人が自分のブログ記 事を連携しようとしたら超絶苦労した件 Tomohiro Suzuki @hiro128_777 2024-1-18 C# Tokyo

2.

ご注意 追記:2024/02/18 本スライドは内容が最新ではありません。 本スライドの新バージョンが以下よりご覧いただけます。 より詳しい内容となっておりますので、以下をご覧いただけますと幸いです。 https://www.docswell.com/s/hiro128_777/KP9124-2024-02-17-204458 2

3.

自己紹介 鈴木友宏 M365、Azure、Power Platform、.NET などの Microsoft 製品を用いたシステムの構築 をしています。 C# Tokyo 運営メンバー Twitter:@hiro128_777 blog:https://hiro128.hatenablog.jp/ 3

4.

動機 Azure Open AI そろそろ 試さなきゃ! 4

5.

素晴らしい教材がありました!! https://github.com/microsoft/sample-app-aoai-chatGPT 上記サンプルがあまりにも神すぎて、このサンプルだけで、Azure Open AI の Add your data と組み合わせて独自ナレッジの連携を試せるのですが、逆に全自動すぎて何が行われてい るか理解できません(笑)。そこで、知見を増やすためにこのサンプルをカスタマイズして何か 作ってみて理解を深めることにしました 5

6.

実際試したら超絶苦労した… 6

7.

“構想した”システム構成と処理フロー PC はてなブログ ❶ Functions (C#) Blob コンテナ Event Grid システムトピック Functions (C#) AI Search Azure AI Studio チャット プレイグラウンド (動作確認用) NEW 記事投稿 Timer Triggerで 記事をクロールして HTML ❷新規記事があれば ❸ JSON Blob 項目が作成されると Blob Created イベントが 発行される HTML を取得し Blob に保存 HTML HTML ❹ チャンク(分割)して、 ベクトルインデックスを 登録 Index Index 追加した インデックスに 基づく回答 Index 7

8.

“実際に構築した”システム構成と処理フロー PC はてなブログ ❶ Functions (C#) Blob コンテナ Event Grid システムトピック Functions (Python) AI Search Azure AI Studio チャット プレイグラウンド (動作確認用) NEW 記事投稿 Timer Triggerで 記事をクロールして HTML ❷新規記事があれば ❸ JSON Blob 項目が作成されると Blob Created イベントが 発行される HTML を取得し Blob に保存 HTML C#だとチャンク関連の機能が弱く、 思ったように実装できなかった… 「sample-app-aoai-chatGPT」リポ ジトリの data_preparation.py の コードを改造して、関数作成。 HTML ❹ チャンク(分割)して、 ベクトルインデックスを 登録 Index Index 追加した インデックスに 基づく回答 Index 8

9.

どんな点で苦労したの • カジュアルにある程度調査して「まあ、このくらいならできるだろう」という軽いノリで構成を考えた。 • C# でやろうとしたが、色々壁にぶつかり、一部 Python を利用することになったが、これまで使っていない Python が全然わからないので Python アプリのカスタマイズに難儀した。 • Python での Functions のローカルデバッグに苦労した。 • Event Grid からのイベント受信をどうするか(ダミーイベントの json を Postman で localhost に送信 or ngrok で実際のイベントを開発環境で受信させる) • 関数でエラー発生時のイベント受信のリトライおよび関数の同時実行数を抑制しないと、Functions ランタ イムによってアプリのプロセスが複数走り、まともにデバッグできないが、設定変更のやり方がわからない。 (local.setting.json に設定値を記載。Azure 上の host.json と違い階層を「アンダースコア x 2(__)で表 現する」) • “AzureFunctionsJobHost__extensions__blobs__maxDegreeOfParallelism”: “1”, • "AzureFunctionsJobHost__extensions__blobs__poisonBlobThreshold": "1“ その結果、150時間も突っ込んだにもかかわらず、全部終わりませんでした… …が、かなり理解は進んだので、もう少しやればイメージ通りのアプリが構築出来そうです。 9

10.

今回学んだ知見 • AI 検索はアプリ開発者の視点では「データの準備」が最重要 • データを自動で収集する仕組み、適切にチャンク分割する仕組みを構築すれば、そのあとはツールが揃っているの で比較的楽 • チャンク分割を C# でできるようになれば、全部 C# で構築できる • VNet、Functions、Event Grid、Cosmos DB あたりはよく使うので、自由自在に使いこなせるようにしておくと集 中すべき領域に集中できる。 • 今回それができていなく大量の時間を浪費した。 • 現状では Python がよく使われているので、Python にも強くなっていると参考に出来る。 • Python による実装の解析には、GitHub Copilot Chat を活用すれば効率が良い。 10

11.

ご清聴ありがとうございました 11