Databricks生成AIクックブック - ステップ2: ステークホルダーのフィードバックを収集するPOCのデプロイ

[Step 2: Deploy POC to collect stakeholder feedback — Databricks Generative AI Cookbook](https://ai-cookbook.io/nbs/5-hands-on-build-poc.html) [2024/6/25時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

> [Databricks生成AIクックブック](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204)のコンテンツです。

# ステップ2: ステークホルダーのフィードバックを収集するPOCのデプロイ

![](https://ai-cookbook.io/_images/workflow_poc.png)

**想定時間:** 30-60分
**要件**
1. [ステップ1: コードレポジトリのクローンと計算資源の作成](https://qiita.com/taka_yayoi/items/501e2a6f675b3236c6d3)のステップを完了している。
1. お使いの[レイクハウス](https://www.databricks.com/jp/blog/2020/01/30/what-is-a-data-lakehouse.html)のUnity Catalog[ボリューム](https://docs.databricks.com/ja/connect/unity-catalog/volumes.html)で、[要件](https://qiita.com/taka_yayoi/items/810b04093e2546ff78e8)にあるデータが利用できるようになっている。

:::note info
[**コードレポジトリ**](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code)
[こちら](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code)からこのセクションで参照しているすべてのサンプルコードにアクセスすることができます。
:::

## 期待される成果

このステップの最後には、ステークホルダーがテストし、あなたのPOCに対するフィードバックを提供できるようにする[エージェント評価レビューアプリ](https://docs.databricks.com/ja/generative-ai/agent-evaluation/human-evaluation.html)をデプロイすることになります。ステークホルダーの使用方法に関する詳細なログと彼らのフィードバックは、あなたのレイクハウスのDeltaテーブルに流れ込みます。

![](https://ai-cookbook.io/_images/review_app2.gif)

## 概要

評価ドリブン開発の最初のステップは、POCを構築することです。POCはいくつかのメリットを提供します:

1. RAGを用いたあなたのユースケースの実現可能性に関して指導になるビューを提供する
1. あなたの評価セットの初期バージョンの作成を可能にするステークホルダーからの初期フィードバックの収集を可能にする
1. 試行錯誤を開始するための品質のベースライン指標を確立できる

Databricksでは、最もシンプルなRAGアーキテクチャとそれぞれのノブ/パラメーターの推奨デフォルト値を用いてPOCを構築することをお勧めします。

:::note info
**注意**
**なぜシンプルなPOCからスタートするのか？** あなたのRAGアプリケーションで調整できるノブには数百の組み合わせが存在します。これらのノブの調整に簡単に数週間を費やすことができますが、システマティクにRAGを評価できるようになる前にそうしてしまうと、POCの破滅的ループと呼ばれるものに陥ってしまうことになります。ステークホルダーがイライラして座っている中であなたは設定を試行錯誤しますが、改善しているのかどうかを客観的に知る方法がありません。
:::

このクックブックのPOCテンプレートは、品質の試行錯誤を念頭に置いて設計されています。すなわち、我々の研究によってRAGの品質を改善するために調整することが重要であることが明らかになったノブでパラメータ化されています。言い換えると、これらテンプレートは"RAGを魔法のように作り出す3行のコード"ではなく、むしろこれらは評価ドリブン開発ワークフローのステップに沿って、品質を調整できる適切に構造化されたRAGアプリケーションです。

これによって、クイックにPOCをデプロイできつつも、コードを書き直すことなしに品質のイテレーションにクイックに移行することができます。

以下にPOCアプリケーションの技術的アーキテクチャを示します:

![](https://ai-cookbook.io/_images/5_img2.png)

:::note info
**注意**
デフォルトでは、このPOCでは[Mosaic AI 基盤モデルサービング](https://www.databricks.com/jp/product/pricing/foundation-model-serving)で利用できるオープンソースを使用します。しかし、このPOCでは*すべての基盤モデル*をサポートするMosaic AIモデルサービングを使うので、別のモデルを使用することは簡単です - シンプルにモデルサービングでそのモデルを設定し、`00_config`ノートブックの`embedding_endpoint_name`と`llm_endpoint_name`を置き換えます。

- Databricksマーケットプレースで利用可能な他のオープンソースモデルに関しては、[こちらのステップ](https://docs.databricks.com/ja/machine-learning/foundation-models/deploy-prov-throughput-foundation-model-apis.html)に従ってください。
- Azure OpenAI、OpenAI、Cohere、Anthropic、Google Geminiなどのサードパーティモデルに関しては、こちらの[ノートブック](https://github.com/databricks/genai-cookbook/blob/main/rag_app_sample_code/helpers/Create_OpenAI_External_Model.py)や[こちらの手順](https://docs.databricks.com/ja/generative-ai/external-models/index.html)に従ってください。
:::

## 手順

1. あなたのデータタイプに応じた[A\_POC\_app](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code/A_POC_app)の中にあるPOCコードフォルダーを開く

    | ファイルタイプ | ソース | POCアプリケーションフォルダー |
    |:--|:--|:--|
    |PDFファイル   |  UCボリューム | [pdf\_uc\_volume](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code/A_POC_app/pdf_uc_volume)  |
    |Powerpointファイル   | UCボリューム  | [pptx\_uc\_volume](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code/A_POC_app/pptx_uc_volume)  |
    |DOCXファイル   | UCボリューム  |  [docx\_uc\_volume](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code/A_POC_app/docx_uc_volume) |
    |テキスト/マークダウン/HTMLコンテンツを伴うJSONファイルとメタデータ   | UCボリューム  | [json\_uc\_volume](https://github.com/databricks/genai-cookbook/tree/main/rag_app_sample_code/A_POC_app/html_uc_volume)  |

    上記の要件に合わない場合は、ご自身のファイルタイプで動作するように上のPOCディレクトリにある`02_poc_data_pipeline`のパーシング関数(`parser_udf`)をカスタマイズすることができます。

    POCフォルダーでは、以下のノートブックを確認できます。
    ![](https://ai-cookbook.io/_images/6_img.png)

    :::note info
    **ティップス**
    以下で参照するノートブックは、あなたが選択した特定のPOCに対して相対的なものとなります。例えば、`pdf_uc_volume`を選択している状態で`00_config`を参照する際、適切な`00_config`ノートブックは[`A_POC_app/pdf_uc_volume/00_config`](https://github.com/databricks/genai-cookbook/blob/main/rag_app_sample_code/A_POC_app/pdf_uc_volume/00_config.py)となります。
   :::

1. デフォルトパラメーターをレビューする(オプション)

    データパイプラインとRAGチェーンに対するPOCアプリケーションのデフォルトパラメーターを確認するために、上で選択したPOCディレクトリの`00_config`ノートブックを開きます。

    :::note info
    **注意**
    **重要:** 我々の推奨デフォルトパラメーターは完璧なものではなく、それを意図したものでもありません。むしろ、スタート地点です - 我々のワークフローの次のステップは、これらのパラメーターに対する試行錯誤をガイドするものです。
   :::

1. 設定を検証する

    あなたの設定が適切ですべてのリソースが利用可能であることをチェックするために`01_validate_config`を実行します。あなたのディレクトリに`rag_chain_config.yaml`ファイルが出現します - アプリケーションをデプロイするためにステップ4でこちらを使用します。
1. データパイプラインを実行する

    POCのデータパイプラインはApache SparkをベースとしたDatabricksノートブックです。パイプラインを実行するために`02_poc_data_pipeline`を開き、Run Allを押します。

    1. UCボリュームから生のドキュメントをロード
    1. それぞれのドキュメントをパースし、Deltaテーブルに結果を保存
    1. それぞれのドキュメントのチャンクを作成し、Deltaテーブルに結果を保存
    1. Mosaic AI Vector Searchを用いてドキュメントのエンベディングを作成し、ベクトルインデックスを作成

    データパイプラインのメタデータ(出力テーブル、設定など)はMLflowに記録されます:
    ![](https://ai-cookbook.io/_images/datapipelinemlflow.gif)

    ノートブックの下の方にあるDeltaテーブル/ベクトルインデックスの出力へのリンクを参照することで出力を調査することができます:

    ```
    Vector index: https://<your-workspace-url>.databricks.com/explore/data/<uc-catalog>/<uc-schema>/<app-name>_poc_chunked_docs_gold_index

    Output tables:

    Bronze Delta Table w/ raw files: https://<your-workspace-url>.databricks.com/explore/data/<uc-catalog>/<uc-schema>/<app-name>__poc_raw_files_bronze
    Silver Delta Table w/ parsed files: https://<your-workspace-url>.databricks.com/explore/data/<uc-catalog>/<uc-schema>/<app-name>__poc_parsed_docs_silver
    Gold Delta Table w/ chunked files: https://<your-workspace-url>.databricks.com/explore/data/<uc-catalog>/<uc-schema>/<app-name>__poc_chunked_docs_gold
    ```

1. レビューアプリにPOCチェーンをデプロイする

    デフォルトのPOCチェーンはLangChainを用いて構築されたマルチターンの会話RAGです。

    :::note info
    **ティップス**
    このPOCチェーンはMLflowのコードベースのロギングを使用します。よりコードベースのロギングを理解するには、[ドキュメント](https://docs.databricks.com/ja/generative-ai/create-log-agent.html#code-based-vs-serialization-based-logging)をご覧ください。
   :::

    1. `03_deploy_poc_to_review_app`ノートブックを開きます
    1. ノートブックのそれぞれのセルを実行します
    1. POCアプリケーションがどのように動作しているのかを示すMLflow Traceが表示されます。あなたのユースケースに適した質問になるように入力を調整し、アプリケーションの"vibe check"のためにセルを再実行します。
    ![](https://ai-cookbook.io/_images/mlflow_trace2.gif)
    1. あなたのユースケースに合わせてデフォルトの指示を修正します。これらはレビューアプリに表示されます。
    
        ```py
        instructions_to_reviewer = f"""## Instructions for Testing the {RAG_APP_NAME}'s Initial Proof of Concept (PoC)

        Your inputs are invaluable for the development team. By providing detailed feedback and corrections, you help us fix issues and improve the overall quality of the application. We rely on your expertise to identify any gaps or areas needing enhancement.

        1. **Variety of Questions**:
        - Please try a wide range of questions that you anticipate the end users of the application will ask. This helps us ensure the application can handle the expected queries effectively.

        2. **Feedback on Answers**:
        - After asking each question, use the feedback widgets provided to review the answer given by the application.
        - If you think the answer is incorrect or could be improved, please use "Edit Answer" to correct it. Your corrections will enable our team to refine the application's accuracy.

        3. **Review of Returned Documents**:
        - Carefully review each document that the system returns in response to your question.
        - Use the thumbs up/down feature to indicate whether the document was relevant to the question asked. A thumbs up signifies relevance, while a thumbs down indicates the document was not useful.

        Thank you for your time and effort in testing {RAG_APP_NAME}. Your contributions are essential to delivering a high-quality product to our end users."""

        print(instructions_to_reviewer)
        ```
    
    1. レビューアプリへのリンクを取得するためにデプロイメントのセルを実行します。
        ```
        Review App URL: https://<your-workspace-url>.databricks.com/ml/review/<uc-catalog>.<uc-schema>.<uc-model-name>/<uc-model-version>
        ```

1. 個々のユーザーにレビューアプリへのアクセス権限を付与する

    [こちらのステップ](https://docs.databricks.com/ja/generative-ai/agent-evaluation/human-evaluation.html)に沿って非Databricksユーザーによるアクセスを許可することができます。

1. 自身でいくつかの質問をし、フィードバックを提供することでレビューアプリをテストする

    :::note info
    **注意**
    MLflow Traceとレビューアプリからのユーザーフィードバックは、設定したカタログ/スキーマのDeltaテーブルに表示されます。Deltaテーブルにログが現れるまでには最大2時間を要します。
   :::

1. ステークホルダーにレビューアプリを共有する

    フィードバックを得るために、ステークホルダーにPOCのRAGアプリケーションを共有できるようになりました。

    :::note warn
    **重要**
    少なくとも3人のステークホルダーにPOCを配布し、それぞれに10-20の質問をすることをお願いすることをお勧めします。あなたの評価セットに広範な観点を盛り込めるように、複数のステークホルダーにPOCをテストしてもらうことが重要です。
   :::

- [目次](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204#%E7%9B%AE%E6%AC%A1)
- 前のセクション: [ステップ1: コードレポジトリのクローンと計算資源の作成](https://qiita.com/taka_yayoi/items/501e2a6f675b3236c6d3)
- 次のセクション: [ステップ3: ステークホルダーのフィードバックから評価セットを作成](https://qiita.com/taka_yayoi/items/981604b85a998ddf9b07)


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)