Databricks生成AIクックブック - 生成品質のデバッグ

[Debugging generation quality — Databricks Generative AI Cookbook](https://ai-cookbook.io/nbs/5-hands-on-improve-quality-step-1-generation.html) [2024/6/26時点]の翻訳です。

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

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

# 生成品質のデバッグ

## 生成品質のデバッグ

**あなたが実施した[根本原因分析](https://qiita.com/taka_yayoi/items/c1f76a39a43506fe7e33)によって、LLM生成の改善が対応すべき根本原因であることがわかったのでこのページを参照しています。**

最適な収集がされたとしても、正確で一貫性があり、適切なレスポンスを生成するためにRAGチェーンのLLMコンポーネントが効果的に収集したコンテキストを活用できない場合、最終的なアウトプットの品質で苦しむことになります。生成品質による問題は、ハルシネーション、非一貫性、ユーザーのクエリーに簡潔に対応することに失敗するなど様々な事象として発生します。

**生成品質**の問題に対応するステップバイステップのプロセスを以下に示します:

1. [`B_quality_iteration/01_root_cause_quality_issues`](https://github.com/databricks/genai-cookbook/blob/main/rag_app_sample_code/B_quality_iteration/01_root_cause_quality_issues.py)ノートブックを開きます。
1. 生成品質問題を記録するMLflow traceをロードするクエリーを使用します。
1. それぞれのレコードに対して、生成されたレスポンスを手動で検証し、収集されたコンテキストと正解レスポンスと比較します。
1. 低品質の生成となっているクエリー間でのパターンや共通の問題を探します。以下のような例があります:
    - 収集されたコンテキストにない情報を生成したり、矛盾する情報を出力する(ハルシネーション)
    - 与えられた収集コンテキストに対して、ユーザークエリーに直接対応することに失敗する
    - 過度に冗長で理解が難しく、論理的な一貫性のないレスポンスを生成する
1. 特定した問題に基づき、可能性のある根本原因と対応する修正策についての仮説を立てる。ガイドに関しては、以下の"[貧弱な生成品質の一般的な理由](#貧弱な生成品質の一般的な理由)"をご覧ください。
1. 修正案を実装、評価するために[変更の実装と評価](https://qiita.com/taka_yayoi/items/42de353690e29dbb6efe)のステップに従います。
    - これには、RAGチェーンの修正(プロンプトテンプレートの調整、別のLLMを試すなど)やデータパイプラインの修正(より多くのコンテキストを提供するためのチャンキング戦略の調整など)が含まれることがあります。
1. 依然として収集品質が不十分である場合には、期待されるパフォーマンスが得られるまで、次のより有望な修正策を特定するまでステップ4-5を繰り返します。
1. チェーン全体で対応すべき他の根本原因が他にないのかを特定するための[根本原因分析](https://qiita.com/taka_yayoi/items/c1f76a39a43506fe7e33)を再実行します。

## 貧弱な生成品質の一般的な理由

潜在的なこれらの修正方法は、大きく分けて3つに分類されます:

1. ![](https://ai-cookbook.io/_images/data_pipeline.png)の変更
1. ![](https://ai-cookbook.io/_images/chain_config.png)の変更
1. ![](https://ai-cookbook.io/_images/chain_code.png)の変更

変更の種類に応じて、[変更の実装と評価](https://qiita.com/taka_yayoi/items/42de353690e29dbb6efe)の異なるステップに従うことになります。

:::note warn
**重要**
一般的には、あなたのアプリケーションのアウトプットの品質に対して試行錯誤を、プロンプトエンジニアリングを用いて行うことをお勧めします。
:::

| 生成の問題 | デバッグのステップ | 修正案 |
|:--|:--|:--|
| 収集されるコンテキストにない情報を生成している(ハルシネーション)  | <ul><li>ハルシネーションした情報を特定するために生成されたレスポンスと収集されたコンテキストを比較する<li>特定タイプのクエリーや収集されたコンテキストがハルシネーションの影響を受けやすいかどうかを評価</ul>  | <ul><li>![](https://ai-cookbook.io/_images/chain_config.png) 収集されたコンテキストの信頼性を強調するようにプロンプトテンプレートを更新<li>![](https://ai-cookbook.io/_images/chain_config.png) より能力のあるLLMの活用<li>![](https://ai-cookbook.io/_images/chain_code.png) 生成後の事実チェックや検証ステップの実装</ul>  |
| ユーザークエリーに直接対応することに失敗したり、過度に一般的なレスポンスを提供する  | <ul><li>適切性や特定性を評価するために生成されたレスポンスとユーザークエリーを比較<li>特定タイプのクエリーで適切なコンテキストが収集されるが、LLMが低品質のアウトプットを生成しているかどうかをチェック</ul>  | <ul><li>![](https://ai-cookbook.io/_images/chain_config.png) 直接的で特定のレスポンスを生成するようにプロンプトテンプレートを改善<li>![](https://ai-cookbook.io/_images/chain_config.png) 収集プロセスを改善することでよりターゲットされたコンテキストを収集<li>![](https://ai-cookbook.io/_images/chain_code.png) より適切なチャンクを最初に提示するように収集をリランクし、それらのみをLLMに提供<li>![](https://ai-cookbook.io/_images/chain_config.png) より能力のあるLLMの活用</ul>  |
| 理解が困難、あるいは論理的思考に欠ける生成をレスポンスを生成する  | <ul><li>論理的思考、文法的正しさ、理解可能性に関してアウトプットを評価<li>特定タイプのクエリーや特定タイプコンテキストが収集された際に、一貫性のない結果が出るのかを解析</ul>  |  <ul><li>![](https://ai-cookbook.io/_images/chain_config.png) 一貫性があり、よく構造化されたレスポンスになるようにプロンプトテンプレートを変更<li>![](https://ai-cookbook.io/_images/chain_config.png) 追加の適切なチャンクを収集することでLLMにより多くのコンテキストを提供<li>![](https://ai-cookbook.io/_images/chain_config.png) より能力のあるLLMの活用</ul> |
| 生成されたレスポンスが期待されたフォーマットやスタイルではない  | <ul><li>期待するフォーマットやスタイルのガイドラインとアウトプットを比較<li>特定タイプのクエリーや収集コンテキストでフォーマット/スタイルが外れてしまう傾向があるかどうかを評価</ul>  |  <ul><li>![](https://ai-cookbook.io/_images/chain_config.png) 期待するアウトプットのフォーマットやスタイルを指定するようにプロンプトテンプレートを更新<li>![](https://ai-cookbook.io/_images/chain_code.png) 生成されたレスポンスを期待するフォーマットに変換する後処理ステップを実装<li>![](https://ai-cookbook.io/_images/chain_code.png) アウトプットの構造/スタイルを検証し、必要であればフォールバックの回答を出力するステップを追加<li>![](https://ai-cookbook.io/_images/chain_config.png) 特定のフォーマットやスタイルでアウトプットを提供するようにLLMのファインチューンを活用</ul> |

- [目次](https://qiita.com/taka_yayoi/items/36c51bce8f33a70cf204#%E7%9B%AE%E6%AC%A1)
- 前のセクション: [収集品質のデバッグ](https://qiita.com/taka_yayoi/items/758ba436168b08e184fc)
- 次のセクション: [ステップ6: 繰り返しの実装 & 品質改善の評価](https://qiita.com/taka_yayoi/items/42de353690e29dbb6efe)

### はじめてのDatabricks

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

### Databricks無料トライアル

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