プロンプト フローと GitHub を使用する GenAIOps

LLM を取り入れたアプリケーションの需要が高まる中、組織はこれらのアプリのエンドツーエンドのライフサイクルを管理するためのまとまりのある合理化されたプロセスを必要としています。 生成人工知能運用 (GenAIOps) (別名 LLMOps) は、効率的なプロンプト エンジニアリングと LLM を取り入れたアプリケーションの開発とデプロイの基礎となるものです。

この記事では、Azure Machine Learning を使用して GitHub と統合し、LLM を取り入れたアプリケーションの開発ライフサイクルを "プロンプト フロー" で自動化する方法を説明します。 プロンプト フローは、LLM を組み込んだアプリケーションを開発するための合理化され、構造化されたアプローチを提供します。 その明確に定義されたプロセスとライフサイクルは、フローの構築、テスト、最適化、デプロイのプロセスを案内し、完全に機能する LLM を融合したソリューションの作成に結び付けます。

GenAIOps プロンプト フローの機能

プロンプト フローを備えた GenAIOps では、プロンプト フローを使用して LLM を取り入れたアプリの構築に役立つ GenAIOps テンプレートとガイダンスを使用します。 プロンプト フローを備えた GenAIOps には、シンプルな、または複雑な LLM を取り入れたアプリ用の機能があり、アプリケーションのニーズに合わせてカスタマイズできます。

プロンプト フローを備えた GenAIOps プラットフォームには、次の機能があります。

  • 一元化されたコード ホスティング。 このリポジトリでは、複数のプロンプト フローのためのコードのホスティングがサポートされ、すべてのフローに 1 つのリポジトリを提供します。 このリポジトリは、フローのライブラリのようなもので、さまざまなプロジェクトで簡単に検索、アクセス、コラボレーションを行うことができます。

  • ライフサイクル管理。 各フローには独自のライフサイクルがあり、ローカルの実験から運用環境のデプロイへのスムーズな切り替えを提供します。

  • バリアントとハイパーパラメーターの実験。 バリアントとハイパーパラメーターは、レシピの成分のようなものです。 このプラットフォームを使用すると、フロー内の複数のノード間で異なるバリアントの組み合わせを実現できます。 複数のバリアントとハイパーパラメーターを試して、フロー バリアントを簡単に評価できます。

  • 複数のデプロイ ターゲット。 このプラットフォームでは、Docker をサポートする任意のターゲット プラットフォームとオペレーティング システムにデプロイするために、フローとコンピューティング セッションを取り入れた Docker イメージが生成されます。 Azure App Services、Kubernetes、Azure マネージド コンピューティングにフローをデプロイし、必要に応じてスケーリングするように構成できます。

  • A/B デプロイ。 プロンプト フローを備えた GenAIOps では、A/B デプロイがシームレスに実装され、さまざまなフロー バージョンを簡単に比較できます。 このプラットフォームは、従来の Web サイト A/B テストと同様の方法で、プロンプト フローの A/B デプロイを容易にします。 実際の設定でフローのさまざまなバージョンを簡単に比較して、最良のパフォーマンスのバージョンを判断できます。

  • 多対多データセット/フロー リレーションシップ。 プロンプト フローを備えた GenAIOps は、標準フローと評価フローごとに複数のデータセットに対応し、フロー テストと評価の多様性を確保します。

  • 条件付きデータとモデルの登録。 このプラットフォームは、Azure Machine Learning データ資産の新しいデータセット バージョンを登録し、データセットに変更がある場合にのみモデル レジストリにフローします。

  • 包括的なレポート。 プロンプト フローを備えた GenAIOps では、バリアント構成ごとに詳細なレポートが生成されるため、情報に基づいた意思決定を行うことができます。 このプラットフォームでは、すべての実行と実験に関する詳細なメトリックの収集、実験、バリアント一括実行が提供され、CSV および HTML ファイルの両方でデータドリブンの意思決定を行えるようにします。

プロンプト フローを備えた GenAIOps には、カスタマイズのための次に示す他の機能が用意されています。

  • Bring-your-own-flows (BYOF) は、LLM を取り入れたアプリケーションに関連する複数のユース ケースを開発するための包括的なプラットフォームを提供します。
  • 構成ベースの開発は、広範な定型コードを記述する必要がないことを意味します。
  • プロンプト実験と評価は、ローカルとクラウドの両方で実行されます。
  • ローカル プロンプト評価用のノートブックは、ローカル実験用の関数のライブラリを提供します。
  • デプロイ後のパイプライン内のエンドポイント テストでは、エンドポイントの可用性と準備状況が確認されます。
  • オプションの Human-in-loop (人間の関与) は、デプロイ前にプロンプト メトリックを検証します。

GenAIOps のステージ

GenAIOps ライフサイクルは、次の 4 つの異なるステージで構成されます。

  • 初期化。 ビジネスの目標を明確に定義し、関連するデータ サンプルを収集し、基本的なプロンプト構造を確立し、その機能を強化するフローを作成します。

  • 実験。 フローをサンプル データに適用し、プロンプトのパフォーマンスを評価し、必要に応じてフローを調整します。 結果に満足するまで、継続的に反復処理します。

  • 評価と調整。 より大きなデータセットを使用するフローのパフォーマンスのベンチマークを測定し、プロンプトの有効性を評価し、それに応じた改善を行います。 結果が目的の基準を満たしている場合は、次のステージに進みます。

  • 展開。 効率と有効性のためにフローを最適化し、A/B デプロイを含む運用環境にデプロイし、パフォーマンスを監視し、ユーザーフィードバックを収集し、この情報を使用してフローをさらに強化します。

この構造化された手法に従うことで、プロンプト フローを使用すると、フローを自信を持って開発、厳密なテスト、微調整、デプロイを行い、堅牢で洗練された AI アプリケーションを作成できます。

GenAIOps プロンプト フロー テンプレートは、コード優先アプローチを使用してこの構造化手法を形式化し、プロンプト フロー ツール、プロセス、GenAIOps プロンプト フロー機能を使用して LLM を取り入れたアプリを構築するのに役立ちます。 このテンプレートは、プロンプト フローを備えた GenAIOps テンプレートで入手できます。

GenAIOps プロセス フロー

GenAIOps プロンプト フロー プロセスのスクリーンショット。

  1. 初期化ステージでは、フローの開発、データの準備とキュレーション、GenAIOps 関連の構成ファイルの更新を行います。
  2. Visual Studio Code とプロンプト フロー拡張機能を使用したローカル開発の後、機能ブランチから開発ブランチに pull request (PR) を発生させ、ビルド検証パイプラインと実験フローを実行します。
  3. PR は手動で承認され、コードは開発ブランチにマージされます。
  4. PR が開発ブランチにマージされると、開発環境の継続的インテグレーション (CI) パイプラインが実行されます。 CI パイプラインは、実験および評価フローの両方を順番に実行し、パイプラインの他のステップとは別に、Azure Machine Learning レジストリにフローを登録します。
  5. CI パイプラインの実行が完了すると、継続的デプロイ (CD) トリガーによって CD パイプラインが実行され、Azure Machine Learning レジストリからの標準フローが Azure Machine Learning オンライン エンドポイントとしてデプロイされます。 その後、パイプラインは、デプロイされたフローに対して統合テストとスモーク テストを実行します。
  6. リリース ブランチが開発ブランチから作成されるか、開発ブランチからリリース ブランチに PR が発生します。
  7. PR は手動で承認され、コードはリリース ブランチにマージされます。 PR がリリース ブランチにマージされると、運用環境のための CI パイプラインが実行されます。 このパイプラインは、実験フローと評価フローの両方を順番に実行し、パイプラインの他のステップとは別に、Azure Machine Learning レジストリにフローを登録します。
  8. CI パイプラインの実行が完了すると、CD トリガーによって CD パイプラインが実行され、Azure Machine Learning レジストリからの標準フローが Azure Machine Learning オンライン エンドポイントとしてデプロイされます。 その後、パイプラインは、デプロイされたフローに対して統合テストとスモーク テストを実行します。

GenAIOps プロンプト フローを作成する

この記事の残りの部分では、プロンプト フローと GitHub を使用して LLM を取り入れたアプリケーションを構築するのに役立つ、プロンプト フローを備えた GenAIOps テンプレート リポジトリ内のエンドツーエンドのサンプルに従って、プロンプト フローを備えた GenAIOps を使用する方法について説明します。 主な目的は、プロンプト フローと GenAIOps の機能を使用して、これらのアプリケーションの開発を支援することです。

前提条件

プロンプト フロー接続を設定する

プロンプト フローでは、接続リソースを使用して、Azure OpenAI、OpenAI、または Azure AI 検索エンドポイントに接続します。 接続は、プロンプト フロー ポータル UI または REST API を使用して作成できます。 詳細については、「プロンプト フローの接続」を参照してください。

接続を作成するには、「プロンプト フローの接続を設定する」の手順に従います。 このサンプル フローでは、aoai という名前の接続を使用するため、接続にこの名前を付けます。

コンピューティング セッションを設定する

プロンプト フローでは、コンピューティング セッションを使用してフローが実行されます。 プロンプト フローを実行する前に、コンピューティング セッションを作成して開始します。

GitHub リポジトリの設定

GitHub の Organization にフォークされたリポジトリを作成するには、GitHub リポジトリを設定するための手順に従います。 このリポジトリでは、コードの昇格とパイプラインの実行のために、maindevelopment の 2 つのブランチを使用します。

新しいローカル リポジトリを作成するには、「リポジトリをクローンする」の手順に従います。 このクローンは、開発ブランチから新しい機能ブランチを作成し、変更を組み込むのに役立ちます。

GitHub と Azure の間で認証を設定する

このプロセスでは、サービス プリンシパル情報を格納する GitHub シークレットを構成します。 Azure に自動的に接続するために、リポジトリ内のワークフローはシークレット名を使用して接続情報を読み取ることができます。 詳細については、「GitHub Actions を使用して Azure に接続する」を参照してください。

  1. Azure サービス プリンシパルを作成する」の手順に従って、サービス プリンシパルを作成します。
  2. Azure と GitHub で認証を設定する」の手順に従い、サービス プリンシパルを使用して、GitHub リポジトリと Azure サービスの間で認証を設定します。

パイプラインをテストする

パイプラインをテストするには、「テスト データを更新する」の手順に従います。 プロセス全体には、次の手順が含まれます。

  1. 機能ブランチから開発ブランチに PR を発生させます。
  2. ブランチ ポリシーの構成により、PR パイプラインが自動的に実行されます。
  3. PR が開発ブランチにマージされます。
  4. 関連付けられた dev パイプラインが実行され、その結果、CI と CD 全体が実行され、Azure Machine Learning エンドポイントがプロビジョニングまたは更新されます。

この出力は、プロンプトの実行、評価、デプロイのシナリオの例にある例のようになります。

ローカル実行を使用する

ローカル実行機能を使用するには、次の手順に従います。

  1. 次のようにリポジトリをクローンします。

    git clone https://github.com/microsoft/genaiops-promptflow-template.git
    
  2. 最上位のフォルダー レベルで .env ファイルを作成します。 各接続の行を追加し、プレースホルダーの値を更新します。 サンプル リポジトリの例では、aoai という名前の AzureOpenAI 接続と API バージョン 2024-02-01 を使用しています。

    aoai={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "azure","api_version": "2024-02-01"}
    <connection2>={ "api_key": "<api key>","api_base": "<api base or endpoint>","api_type": "<api type>","api_version": "<api_version>"}
    
  3. 依存関係をインストールするために、ローカルの conda または仮想環境を準備します。

    python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv
    
  4. 新しいフローをオンボードする方法の手順に基づいて、フローをテンプレートに取り込むか書き込みます。

  5. 提供されている例のような Python スクリプトを local_execution フォルダーに記述します。