はじめに
以下の記事で SharePoint Online のファイルを連携したあとのユースケースの一つとして Agent Bricks を使用して Q&A チャットボットを作成してみます。
Agent Bricks とは
Agent Bricksは、一般的なAIユースケース向けに、ドメイン固有の高品質なAIエージェントシステムを構築および最適化するためのシンプルなノーコードアプローチを提供します。Agent Bricksは、AIエージェントシステムの実装を効率化し、ユーザーが問題、データ、メトリクスに集中できるようにします。
出典:https://learn.microsoft.com/en-us/azure/databricks/generative-ai/agent-bricks/
セットアップ
機能の有効化を行います。前提条件がまだ色々あるので、注意です。今回の記事では westus 環境を使っています。
サーバーレスでサポートされるワークスペースには、次のものが含まれます。
- ワークスペースで Unity Catalog が有効になっている。
- パートナーが提供する AI 支援機能がワークスペースで有効になっています。
- サポートされているリージョンのいずれかのワークスペース: または .eastuswestus
- Mosaic AI モデルサービングへのアクセス。
- スキーマを使用した Unity Catalog の基盤モデルへのアクセス。system.ai
- 予算が 0 以外のサーバーレス予算ポリシーへのアクセス。
- 入力データを使用する準備ができている必要があります。次のいずれかを選択できます。
- Unity Catalog のボリュームまたはボリューム ディレクトリ内のファイル。サポートされているファイルタイプは、txt、pdf、md、ppt/pptx、doc/docx です。
- ベクトル検索インデックス。
出典:https://learn.microsoft.com/en-us/azure/databricks/generative-ai/agent-bricks/knowledge-assistant#requirements
ソースは web 上で公開されている Delta Lake: The Definitive Guide を使用します。
SharePoint に配置して、
前記事のパイプラインでファイルが連携されていることを確認します。
1. ナレッジソースを配置する
チャットボットが参照するナレッジを Volume に配置します。Lakeflow Connect の SharePoint 取込はバイナリ文字列となっているので、これを AI 処理のためのファイルとして書き出します
-
Volume を作成しておきます。
-
ノートブックで対象のフォルダの pdf のレコードのみを抽出
pysparkdf = spark.sql(""" WITH base AS ( SELECT file_id, file_metadata.name, source_metadata.drive_id, source_metadata.file_folder_path, content, REPLACE( source_metadata.file_folder_path, CONCAT('/drives/', source_metadata.drive_id, '/root:/') ) AS path FROM bronze_prod.sharepoint.documents WHERE source_metadata.mime_type = 'application/pdf' ) SELECT name AS file_name, content FROM base WHERE path LIKE 'databricks_knowledge%' """) df.printSchema()
-
ダウンストリームRAGの使用例を参考にして Volume に配置します。
pysparkfrom pyspark.sql.functions import udf, struct # copy to volume_path and get file path def copy_to_disk(blob, filename) -> str: volume_path = "/Volumes/bronze_prod/sharepoint/databricks_knowledge_sources/" fname = volume_path + filename with open(fname, "wb") as f: f.write(blob.inline_content) return fname read_blob_as_file = udf(copy_to_disk) # Chain your UDF with the file access UDF for the file path. df = df.withColumn("text_content", read_blob_as_file("content", "file_name")).collect()
-
処理が完了すると、ファイルが Volume に配置されます。
ナレッジソースとして直接 Agent Bricks のソースにするためにファイルに書き出していますが、Vector Index 化する際には一時的でもよく、永続的なファイル化は必須ではないかと思います。
Unity Catalog ファイルまたはベクター検索インデックスのいずれかを提供することを選択できます。
UC ファイルの場合、txt、pdf、md、ppt/pptx、doc/docx のファイル タイプがサポートされています。Databricks では、32 MB 未満のファイルを使用することをお勧めします。:
2. Agent を構築する
Agent Bricks: Knowledge Assistantを使用して、ドキュメント上に高品質のチャットボットを作成します に従って進めていきます。
-
Vector Store などを保存する対象のスキーマと、ナレッジソースとなる Volume パスを選択します。
-
最後に回答に関してのガイドラインを定めます。
最低限の設定としては以上です!
Agent の作成が開始すると、ナレッジソースなどの処理が開始されます。
完了後の画面は以下。
3. Agent に質問する
-
少し待機すると Agent の回答が得られます。出典もしっかり載っています。
表示された回答については AI 審査が入ります。
出典が得られなかったり、エージェントに関係ない質問をするとここでインジケータが表示されます。
また、質問内容の提案をもらうことも可能です。
4. Agent の品質を向上させる
Agent の回答について、専門家によるフィードバックを得ることで品質を改善していくことが可能です。
-
品質向上のセクションでレビューの必要な質問を追加します。
-
レビュー画面で、Agent による回答を確認し、この質問に対する回答時の注意事項とフィードバックを記入します。
-
フィードバックを統合して、 Agent に反映します。
-
ちょっとわかりにくいですが、回答にストリーミングワークロードの記述が反映されました。
所感
Agent Bricks は簡単に Gen AI アプリを構築し、改善サイクルを開始できる仕組みが組み込まれていることがわかりました。
今回は1ファイルだったため、ナレッジソースの処理時間がファイルの量に応じてどれくらい変わっていくのかというのはようけんsyとなるかなと思います。