個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

C# だけで Azure OpenAI の RAG を試してみたい (1)検討したシステム構成と処理フロー

 

はじめに

最近 Azure OpenAI の RAG について色々調べていますが、サンプルアプリは Python が多いです。
自分は C# が大好きなので、C# でやってみたいな~と思いました。
 
とりあえず、参考になりそうなサンプルを探してたところ以下のようなものを発見しました。
 
github.com
 
上記サンプルは Python で作成されておりとても素晴らしいもので、このサンプルだけで Azure Open AI の Add your data と組み合わせて独自ナレッジの連携を試せるのですが、逆に全自動すぎて何が行われているか理解できませんでした(笑)。そこで、知見を増やすためにこのサンプルをカスタマイズして何か作ってみて理解を深めることにしました。
 

カスタマイズ方針

  • 言語は C# にする。(Python のサンプルが多いので C# のサンプルを作成したい)
  • ソースデータはファイルとしていつでも開けるように Blob にファイルとして保存する。
  • 各々の処理は関数アプリにして自動化する。
  • あまり複雑にしないで、シンプルに必要な要素を学べるサンプルにしたい。
  • 自分にとって役に立ち、運用できるサンプルにしたい。

 

検討したシステム構成と処理フロー

  1. はてなブログの記事を関数アプリで10分ごとにクロールし、Blob に html として保存します。
  2. Blob にアイテムが追加されると、Event Grid の Blob Trigger の関数アプリで AI Search にベクトルを含むドキュメントを登録する。

注意
  • 自分が利用できるようにはてなブログの記事をソースデータにしていますが、ソースデータはその他ブログでも社内のドキュメントでもなんでもかまいません。
  • 個人的な「遊び」で作ったものなのでセキュリティの対応は省いています。業務利用するなら閉域化などの対応をする必要があります。

 

ソースコードと各プロジェクトの解説

上記構成のサンプルアプリを作ったので興味ある方はソースコードを参照ください。
github.com

プロジェクト名 説明
AIClient Open AI, AI Search などのクライアントの Facade。
AzureAISearchIndexInitializer AI Search のインデックスを(既存インデックスが存在すればいったん削除し)作成するコンソールアプリ。
IndexCreator Blob 項目の追加、更新をトリガーにインデックスを作成・更新する関数アプリ。
TextChunkerSample TextChunker の挙動を確認するためのサンプルアプリ。
WebPageCrawler はてなブログの記事をクロールして Blob にアーカイブする関数アプリ。

 
次の記事
hiro128.hatenablog.jp