プロンプト フローを使用してコパイロットを構築する
データを Azure AI Studio にアップロードし、Azure AI 検索との統合を使用してデータのインデックスを作成した後、"プロンプト フロー" を使用して RAG パターンを実装し、コパイロット アプリケーションを構築できます。
プロンプト フローは、LLM との対話を調整するフローを定義するための開発フレームワークです。
フローは、1 つ以上の "入力" から始まります。これは通常、ユーザーが入力した質問またはプロンプト、繰り返し行われる会話の場合はこの時点までのチャット履歴になります。
その後、フローは接続された一連の "ツール" として定義されます。各ツールは、入力やその他の環境変数に対して特定の操作を実行します。 プロンプト フローには、次のようなタスクを実行する、複数の種類のツールを含めることができます。
- Python カスタム コードを実行する
- インデックス内のデータ値を参照する
- プロンプト バリアントを作成する - 大規模言語モデル (LLM) 用の複数のバージョンのプロンプトを定義する、システム メッセージやプロンプトの文言を変更する、各バリアントの結果を比較および評価することができます。
- プロンプトを LLM に送信して結果を生成する。
最後に、フローには通常、LLM から生成された結果を返す、1 つ以上の "出力" があります。
プロンプト フローでの RAG パターンの使用
プロンプト フローで RAG パターンを使用する鍵となるのは、インデックス参照ツールを使用して、インデックスからデータを取得することです。これにより、フロー内の後続のツールでその結果を使用して、LLM からの出力の生成に使用されるプロンプトを拡張できます。
サンプルを使用してチャット フローを作成する
プロンプト フローには、アプリケーションを作成するための開始点として使用できるさまざまなサンプルが用意されています。 アプリケーションで RAG と言語モデルを組み合わせる場合は、Multi-round Q&A on your data サンプルを複製できます。
このサンプルには、RAG と言語モデルを組み込むために必要な要素が含まれています。
- チャット入力に履歴を追加して、質問のコンテキスト化された形式でプロンプトを定義します。
- 検索インデックスを使用して、データから関連情報を検索します。
- そのインデックスから取得したデータを使用してプロンプト コンテキストを生成し、質問を補足します。
- システム メッセージを追加し、チャット履歴を構造化して、プロンプト バリアントを作成します。
- そのプロンプトを言語モデルに送信して、自然言語の応答を生成します。
これらの各要素を詳しく見ていきましょう。
履歴を使用してクエリを変更する
フローの最初のステップは、チャット履歴とユーザーの最後の質問を受け取り、必要なすべての情報を含む新しい質問を生成する大規模言語モデル (LLM) ノードです。 そうすることで、フローの残りの部分によって処理される、より簡潔な入力が生成されます。
関連情報を検索する
次に、インデックス検索ツールを使用して、統合された Azure AI 検索機能を使用して作成した検索インデックスに対してクエリを実行し、データ ソースから関連情報を検索します。
ヒント
インデックス検索ツールについての詳細情報は、こちらから確認できます。
プロンプト コンテキストを生成する
インデックス検索ツールの出力は、ユーザーへの応答を生成するときに使用する取得されたコンテキストです。 言語モデルに送信されるプロンプトで出力を使用する場合は、出力を解析して、より適切な形式にする必要があります。
インデックス検索ツールの出力には、(設定したパラメーターに応じて) 上位 n 個の結果を含めることができます。 プロンプト コンテキストを生成するときに、Python ノードを使用して、データ ソースから取得したドキュメントを反復処理し、その内容とソースを 1 つのドキュメント文字列に結合できます。 この文字列は、フローの次の手順で、言語モデルに送信するプロンプトで使用されます。
プロンプト バリアントを定義する
言語モデルに送信するプロンプトを作成するときに、バリアントを使用してさまざまなプロンプトの内容を表すことができます。
チャット フローに RAG を含める場合の目標は、チャットボットの応答をゼロにすることです。 データ ソースから関連するコンテキストを取得することに加えて、そのコンテキストを使用し、事実に基づくことを目指すようにチャットボットに指示することで、チャットボットの応答の根拠に影響を与えることもできます。
プロンプト バリアントを使用すると、プロンプトにさまざまなシステム メッセージを提供して、最も根拠のあるコンテンツはどれかを調べることができます。
コンテキストを使用したチャット
最後に、LLM ノードを使用して言語モデルにプロンプトを送信し、データ ソースから取得した関連コンテキストを使用して応答を生成します。 このノードからの応答は、フロー全体の出力でもあります。
インデックス付きデータと選択した言語モデルを使用するようにサンプル チャット フローを構成した後、フローをデプロイし、アプリケーションと統合して、ユーザーにコパイロット エクスペリエンスを提供できます。