前提条件: 要件の収集
明確で包括的なユースケース要件を定義することは、成功するRAGアプリケーションを開発するための重要な最初のステップです。 これらの要件には、主に 2 つの目的があります。 まず、RAGが特定のユースケースに最も適したアプローチであるかどうかを判断するのに役立ちます。 RAGが本当に適している場合、これらの要件は、ソリューションの設計、実装、評価の決定を導きます。 プロジェクトの開始時に時間をかけて詳細な要件を収集することで、開発プロセスの後半で大きな課題や挫折を防ぐことができ、結果として得られるソリューションがエンドユーザーや利害関係者のニーズを満たすことが保証されます。 明確に定義された要件は、これから説明する開発ライフサイクルの後続の段階の基盤となります。
このセクションのサンプル コードについては、 GitHub リポジトリ を参照してください。 リポジトリ コードをテンプレートとして使用して、独自の AI アプリケーションを作成することもできます。
ユースケースはRAGに適していますか?
最初に確認する必要があるのは、RAGがユースケースに適したアプローチであるかどうかです。 RAGをめぐる誇大宣伝を考えると、RAGをあらゆる問題に対する可能な解決策と見なしたくなります。 ただし、RAGが適している場合と適していない場合については微妙な違いがあります。
RAGは、次の場合に適しています。
取得した情報 (非構造化情報と構造化情報の両方) が LLM のコンテキスト ウィンドウに完全に収まらない場合の推論
複数のソースから情報を統合します (たとえば、トピックに関するさまざまな記事から重要なポイントの要約を生成する)
ユーザークエリに基づく動的な取得が必要です (たとえば、ユーザークエリを指定して、取得元のデータソースを決定します)
このユースケースでは、取得した情報に基づいて新しいコンテンツを生成する必要があります(たとえば、質問に答える、説明を提供する、推奨事項を提供するなど)
RAGは、次の場合に最適ではない可能性があります。
このタスクでは、クエリ固有の取得は必要ありません。 たとえば、通話トランスクリプトの要約を生成します。個々のトランスクリプトが LLM プロンプトのコンテキストとして提供されている場合でも、取得した情報は各サマリーで同じままです。
取得する情報セット全体は、LLM のコンテキスト ウィンドウ内に収まります
非常に低レイテンシの応答が必要です (たとえば、ミリ秒単位の応答が必要な場合など)
単純なルールベースまたはテンプレート化された応答で十分です (たとえば、キーワードに基づいて事前定義された回答を提供する顧客サポート チャットボット)
発見するための要件
RAGがユースケースに適していることを確認したら、具体的な要件を把握するために、次の質問を検討します。 要件には、次のように優先順位が付けられます。
🟢 P0: POC を開始する前に、この要件を定義する必要があります。
🟡 P1: 本番運用に進む前に定義する必要がありますが、POC中に繰り返し調整することができます。
⚪P2:要件があるとうれしいです。
これは質問の網羅的なリストではありません。 ただし、RAGソリューションの主要な要件を把握するための強固な基盤を提供する必要があります。
ユーザーエクスペリエンス
ユーザーがRAGシステムとどのように対話し、どのような応答が期待されるかを定義します
🟢 [P0] RAGチェーンへの一般的なリクエストはどのようなものですか? 潜在的なユーザー クエリの例を関係者に尋ねます。
🟢 [P0] ユーザーはどのような回答を期待しますか (短い回答、長い形式の説明、組み合わせ、または何か他の何か)?
🟡 [P1] ユーザーはシステムをどのように操作しますか? チャットインターフェース、検索バー、またはその他のモダリティを介して?
🟡 [P1] ハットトーンやスタイルは、生成されたレスポンスを取るべきですか? (フォーマル、会話、テクニカル?
🟡 [P1] アプリケーションは、あいまいなクエリ、不完全なクエリ、または無関係なクエリをどのように処理する必要がありますか? このような場合、何らかの形でフィードバックやガイダンスを提供する必要がありますか?
⚪ [P2] 生成された出力に特定のフォーマットや表示要件はありますか? 出力には、チェーンの応答に加えてメタデータを含める必要がありますか?
データ
RAGソリューションで使用されるデータの性質、ソース、および品質を決定します。
🟢 [P0] 使用可能なソースは何ですか?
各データソースについて:
🟢 [P0] データは構造化されていますか、それとも非構造化されていますか?
🟢 [P0] 取得データのソース形式は何ですか (PDF、画像/表を含むドキュメント、構造化された API レスポンスなど)?
🟢 [P0] そのデータはどこにありますか?
🟢 [P0] 利用可能なデータ量はどれくらいですか?
🟡 [P1] データはどのくらいの頻度で更新されますか? これらの更新はどのように処理する必要がありますか?
🟡 [P1] 各データソースに既知のデータ品質の問題や不整合はありますか?
次の例で、この情報を統合するためにインベントリ テーブルを作成することを検討してください。
データソース |
ソース |
ファイルの種類 |
サイズ |
更新頻度 |
---|---|---|---|---|
データソース 1 |
Unity Catalog ボリューム |
JSON |
10 GB |
日次 |
データソース 2 |
公開API |
XMLの |
NA (API) |
リアルタイム |
データソース 3 |
SharePoint |
PDFファイル、.docx |
500メガバイト |
毎月 |
パフォーマンスの制約
RAGアプリケーションのパフォーマンスとリソース要件をキャプチャします。
🟡 [P1] レスポンスを生成するための最大許容レイテンシはどれくらいですか?
🟡 [P1] 最初のトークンまでの最大許容時間はどれくらいですか?
🟡 [P1] 出力がストリームの場合、合計レイテンシを長くしても問題ありませんか?
🟡 [P1] 推論に利用できるコンピュートリソースにコスト制限はありますか?
🟡 [P1] 予想される使用パターンとピーク負荷はどのくらいですか?
🟡 [P1] システムが処理できる並列ユーザーまたはリクエストはいくつですか? Databricks は、 モデルサービングで自動的にスケーリングする機能を通じて、このようなスケーラビリティ要件をネイティブに処理します。
評価
RAGソリューションを時間の経過とともに評価および改善する方法を確立します。
🟢 [P0] 影響を与えたいビジネス目標/KPI は何ですか? ベースライン値と目標は何ですか?
🟢 [P0] 初期および継続的なフィードバックを提供するユーザーまたは利害関係者は誰ですか?
🟢 [P0] 生成された応答の品質を評価するために、どのようなメトリクスを使用すべきか? Mosaic AI Agent Evaluation は、使用するメトリクスの推奨セットを提供します。
🟡 [P1] RAGアプリが本番運用に進むために得意としなければならない質問は何か?
🟡 [P1] [評価セット]は存在しますか? ユーザークエリの評価セット、グラウンドトゥルースの回答、および(オプションで)取得する必要がある正しいサポートドキュメントを取得することは可能ですか?
🟡 [P1] ユーザーからのフィードバックはどのように収集され、システムに反映されますか?
例
例として、これらの質問が、 Databricks 顧客サポートチームが使用するこのRAGアプリケーションの例にどのように当てはまるかを考えてみます。
エリア |
考慮事項 |
要件 |
---|---|---|
ユーザーエクスペリエンス |
|
|
データ |
|
|
パフォーマンス |
|
|
評価 |
|
|
セキュリティ |
|
|
デプロイメント |
|
|