プロンプト フローを LLM ベースのアプリケーション DevOps と統合する

この記事では、Azure Machine Learning でのプロンプト フローと LLM ベースのアプリケーション DevOps との統合について説明します。 プロンプト フローは、開発者にとってわかりやすく使いやすいコードファースト エクスペリエンスを提供し、LLM ベースのアプリケーション開発ワークフロー全体を使ってフローの開発と反復処理を行うことができます。

プロンプト フロー SDK および CLIVS Code 拡張機能フロー フォルダー エクスプローラーの新しい UI を利用することで、フローのローカル開発、フロー実行と評価実行のローカル トリガー、ローカルからクラウド (Azure Machine Learning ワークスペース) 環境へのフローの移行が容易になります。

このドキュメントでは、プロンプト フロー コード エクスペリエンスと DevOps の機能を効果的に組み合わせて、LLM ベースのアプリケーション開発ワークフローを強化する方法を中心に説明します。

次のフローを示す図: フローの作成、フローの開発とテスト、コード リポジトリでのバージョン管理、クラウドへの実行の送信、デビューと反復。

プロンプト フローでのコードファースト エクスペリエンスの概要

LLM を使ってアプリケーションを開発する場合、コード リポジトリと CI/CD パイプラインを含む標準化されたアプリケーション エンジニアリング プロセスを用意するのが一般的です。 この統合により、合理化された開発プロセス、バージョン管理、チーム メンバー間のコラボレーションを実現できます。

より効率的な GenAIOps (LLMOps とも呼ばれる) 反復プロセスを求めるコード開発の経験豊富な開発者向けに、プロンプト フロー コードのエクスペリエンスから得られる主な機能とベネフィットを次に示します。

  • コード リポジトリでのフローのバージョン管理。 フローは YAML 形式で定義できます。また、フォルダー構造内で、参照されるソース ファイルとの整合性を保つことができます。
  • フロー実行を CI/CD パイプラインと統合。 プロンプト フロー CLI または SDK を使ってフロー実行をトリガーできます。また、それを CI/CD パイプラインと配信プロセスにシームレスに統合できます。
  • ローカルからクラウドへのスムーズな移行。 バージョン管理、ローカル開発、共有のために、フロー フォルダーをローカルまたはコード リポジトリに簡単にエクスポートできます。 同様に、フロー フォルダーを簡単にクラウドにインポートして、クラウド リソースでの作成、テスト、デプロイを行うことができます。

プロンプト フロー コード定義へのアクセス

各フローの各プロンプト フローはフロー フォルダー構造に関連付けられおり、その中には、コード フォルダー構造のフローを定義するための重要なファイルが含まれています。 このフォルダー構造でフローを整理するので、スムーズな移行を容易になります。

Azure Machine Learning には、すべてのワークスペース ユーザー向けの共有ファイル システムが用意されています。 フローを作成すると、対応するフロー フォルダーが自動的に生成され、Users/<username>/promptflow ディレクトリ内に格納されます。

新しいフローの作成を示す標準フロー作成のスクリーンショット。

フロー フォルダーの構造

フロー フォルダーの構造と、それに含まれる主なファイルの概要:

  • flow.dag.yaml: YAML 形式のこのプライマリ フロー定義ファイルには、フローで使われる入力、出力、ノード、ツール、バリアントに関する情報が含まれています。 プロンプト フローの作成と定義には不可欠です。
  • ソース コード ファイル (.py、.jinja2): フロー フォルダーにはユーザーが管理するソース コード ファイルも含まれており、フロー内のツールやノードから参照されます。
    • Python (.py) 形式のファイルは、カスタムの Python ロジックを定義するために Python ツールから参照できます。
    • Jinja 2 (.jinja2) 形式のファイルは、プロンプト コンテキストを定義するためにプロンプト ツールまたは LLM ツールから参照できます。
  • 非ソース ファイル: フロー フォルダーには、ソース ファイルに含めることができるユーティリティ ファイルやデータ ファイルなどの非ソース ファイルも含めることができます。

フローが作成されたら、フロー作成ページに移動して、右側のエクスプローラーでフロー ファイルを表示および操作することができます。 これを使ってファイルを表示、編集、管理できます。 ファイルに変更を加えると、ファイル共有ストレージに直接反映されます。

エクスプローラーを強調表示した標準フローのスクリーンショット。

"生ファイル モード" をオンにすると、フロー定義ファイル flow.dag.yaml とソース ファイルを含め、ファイルの生のコンテンツをファイル エディターで表示および編集できます。

標準フローの生ファイル モードのスクリーンショット。

標準フローのフロー ソース ファイルのスクリーンショット。

また、Azure Machine Learning ノートブック内のすべてのフロー フォルダーに直接アクセスすることもできます。

Azure Machine Learning のノートブックのスクリーンショット。プロンプト フロー フォルダーのファイルが表示されています。

コード リポジトリのバージョン管理プロンプト フロー

作成したフローをコード リポジトリにチェックインするには、フロー作成ページからフロー フォルダーをローカル システムに簡単にエクスポートできます。 これにより、エクスプローラーからローカル マシンにすべてのファイルを含むパッケージがダウンロードされます。これをお使いのコード リポジトリにチェックインできます。

エクスプローラーのダウンロード ボタンを示すスクリーンショット。

Azure Machine Learning との DevOps 統合の詳細については、「Azure Machine Learning との Git 統合」を参照してください。

ローカル リポジトリからクラウドに実行を送信する

前提条件

プロンプト フロー SDK をインストールする

pip install -r ../../examples/requirements.txt

Azure Machine Learning ワークスペースに接続する

az login

run.yml を用意して、このフロー実行の構成をクラウドで定義します。

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl

column_mapping:
  url: ${data.url}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 

# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

フロー内の各ツールの接続とデプロイ名を指定できます。 接続とデプロイ名を指定しない場合は、flow.dag.yaml ファイル上の 1 つの接続とデプロイが使われます。 接続の形式を設定するには:

...
connections:
  <node_name>:
    connection: <connection_name>
      deployment_name: <deployment_name>
...

pfazure run create --file run.yml

run_evaluation.yml を用意して、この評価フロー実行の構成をクラウドで定義します。

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl
run: <id of web-classification flow run>
column_mapping:
  groundtruth: ${data.answer}
  prediction: ${run.outputs.category}

# define cloud resource

# if using serverless compute type
# resources:
#   instance_type: <instance_type> 

# if using compute instance compute type
# resources:
#   compute: <compute_instance_name> 


# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

pfazure run create --file run_evaluation.yml

Azure Machine Learning ワークスペースで実行結果を表示します。

フロー実行をクラウドに送信すると、実行のポータル URL が返されます。 この URI を開いて、ポータルで実行結果を表示できます。

次のコマンドを使って実行の結果を表示することもできます。

ログをストリーミングする

pfazure run stream --name <run_name>

実行の出力を表示する

pfazure run show-details --name <run_name>

評価実行のメトリックを表示する

pfazure run show-metrics --name <evaluation_run_name>

重要

詳細については、「Azure のプロンプト フロー CLI ドキュメント」を参照してください。

微調整による反復開発

ローカル環境での開発とテスト

反復開発でフローまたはプロンプトを改良して微調整する際に、コード リポジトリ内で複数の反復をローカルで実行すると便利な場合があります。 コミュニティ バージョンのプロンプト フロー VS Code 拡張機能プロンプト フロー ローカル SDK および CLI を利用すると、Azure に縛られることなく、完全にローカルの開発とテストを進めることができます。

Prompt flow VS Code 拡張機能

プロンプト フロー VS Code 拡張機能をインストールすると、クラウドと同様の UI エクスペリエンスで、VS Code エディターからローカルでフローを簡単に作成できます。

拡張機能を使うには:

  1. VS Code Desktop でプロンプト フロー フォルダーを開きます。
  2. ノートブック ビューで "flow.dag.yaml" ファイルを開きます。
  3. ビジュアル エディターを使って、バリアントのプロンプトの調整、ツールの追加など、フローに必要な変更を加えます。
  4. フローをテストするには、ビジュアル エディターの上部にある [Run Flow] (フローの実行) ボタンを選びます。 これにより、フロー テストがトリガーされます。

ビジュアル エディターでのフローの実行を示す VS Code のスクリーンショット。

プロンプト フロー ローカル SDK および CLI

Jupyter、PyCharm、Visual Studio などの IDE を使いたい場合は、flow.dag.yaml ファイルの YAML 定義を直接変更できます。

VS Code の yaml ファイルのスクリーンショット。既定の入力とフローのディレクトリが強調表示されています。

これで、プロンプト フロー CLI または SDK を使い、テストのためにフローの 1 回の実行をトリガーできるようになります。

現在いる作業ディレクトリが <path-to-the-sample-repo>/examples/flows/standard/ だとします

pf flow test --flow web-classification  # "web-classification" is the directory name

PowerShell のフロー テスト出力のスクリーンショット。

これにより、メイン コード リポジトリを毎回更新することなく、変更とそのテストを簡単に実行できます。 ローカル テストの結果に満足したら、ローカル リポジトリからクラウドに実行を送信して、クラウドで実験実行を行うことができます。

ローカル バージョンの使用に関する詳細とガイダンスについては、プロンプト フローの GitHub コミュニティを参照してください。

継続的開発のためにスタジオ UI に戻る

または、スタジオ UI に戻り、クラウドのリソースとエクスペリエンスを使って、フロー作成ページでフローに変更を加える方法もあります。

最新バージョンのフロー ファイルを使って開発と作業を継続するには、ノートブックでターミナルにアクセスし、リポジトリからフロー ファイルの最新の変更をプルします。

さらに、スタジオ UI での作業を継続する場合は、ローカル フロー フォルダーを新しいドラフト フローとして直接インポートできます。 こうすることで、ローカルとクラウドの開発間でシームレスに移行できます。

新しいフローの作成パネルのスクリーンショット。ローカルへのアップロードが強調表示されています。

CI/CD の統合

CI: CI パイプラインでのフロー実行をトリガーする

フローの開発とテストを完了し、それを初期バージョンとしてチェックインしたら、次の調整とテストの反復に進むことができます。 この段階では、プロンプト フロー CLI を使って、バッチ テストや評価実行などのフロー実行をトリガーできます。 これは継続的インテグレーション (CI) パイプラインの自動ワークフローとして機能します。

フロー反復のライフサイクル全体を通じて、いくつかの操作を自動化できます。

  • pull request 後のプロンプト フローの実行
  • 結果が高品質であることを確認するためのプロンプト フロー評価の実行
  • プロンプト フロー モデルの登録
  • プロンプト フロー モデルのデプロイ

Web 分類フローを実行するエンドツーエンドの MLOps パイプラインに関する包括的なガイドについては、「プロンプト フローと GitHub を使ってエンド ツー エンド GenAIOps を設定する」と GitHub デモ プロジェクトを参照してください。

CD: 継続的デプロイ

運用環境に移動する最後の手順は、オンライン エンドポイントとしてフローを Azure Machine Learning にデプロイすることです。 これにより、フローをアプリケーションに統合し、使用できるようになります。

フローのデプロイ方法の詳細については、「CLI と SDK を使ってリアルタイム推論用に Azure Machine Learning マネージド オンライン エンドポイントにフローをデプロイする」を参照してください。

運用環境でのフロー開発のコラボレーション

プロンプト フローを使用して LLM ベースのアプリケーションを開発するコンテキストでは、多くの場合、チーム メンバー間のコラボレーションが不可欠です。 チーム メンバーは、同じフローの作成とテストに従事したり、フローのさまざまなファセットに取り組んだり、反復的な変更と機能強化を同時に行ったりすることがあります。

このようなコラボレーションでは、コードの共有、変更の追跡、バージョンの管理、およびこれらの変更を最終的なプロジェクトに統合するための効率的で合理化されたアプローチが必要になります。

プロンプト フロー SDK/CLI と、プロンプト フローのコード エクスペリエンスの一部として Visual Studio Code 拡張機能を導入することで、コード リポジトリ内でのフロー開発の簡単なコラボレーションが促進されます。 GitHub や Azure DevOps などのクラウドベースのコード リポジトリを利用して、変更を追跡し、バージョンを管理し、これらの変更を最終的なプロジェクトに統合することをお勧めします。

共同開発のベスト プラクティス

  1. フローをローカルで作成して 1 回テストする - コード リポジトリと VSC 拡張機能

    • このコラボレーション プロセスの最初の手順では、プロンプト フロー コードを含む、プロジェクト コードのベースとしてコード リポジトリを使用します。
      • この一元化されたリポジトリにより、効率的な組織化、すべてのコード変更の追跡、チーム メンバー間のコラボレーションが可能になります。
    • リポジトリが設定されたら、チーム メンバーは VSC 拡張機能を使って、フローのをローカルで作成し、入力テストを 1 回行うことができます。
      • この標準化された統合開発環境では、フローのさまざまな側面に取り組む複数のメンバー間のコラボレーションが促進されます。 ローカル開発のスクリーンショット。
  2. クラウドベースの実験用バッチ テストと評価 - プロンプト フロー CLI/SDK とワークスペース ポータル UI

    • ローカルの開発とテスト フェーズの後、フロー開発者は pfazure CLI または SDK を使用して、ローカル フロー ファイルからクラウドにバッチ実行と評価実行を送信できます。
      • このアクションにより、クラウド リソースを消費し、結果を永続的に格納し、Azure Machine Learning ワークスペースのポータル UI を使用して効率的に管理することができます。 この手順により、デプロイのためのコンピューティングやストレージおよびその他のエンドポイントを含むクラウド リソースの消費が可能になります。 クラウドに実行を送信する pfazure コマンドのスクリーンショット。
    • クラウドに送信した後、チーム メンバーはクラウド ポータル UI にアクセスして結果を表示し、実験を効率的に管理できます。
      • このクラウド ワークスペースでは、すべての実行履歴、ログ、スナップショット、インスタンス レベルの入力と出力を含む包括的な結果を収集および管理するための一元的な場所が提供されます。 クラウド実行スナップショットのスクリーンショット。
      • 開発時からのすべての実行履歴を記録する実行リストでは、チーム メンバーはさまざまな実行の結果を簡単に比較でき、品質分析と必要な調整に役立ちます。 ワークスペース内の実行リストのスクリーンショット。ワークスペース内の実行の比較のスクリーンショット。
  3. 運用のためのローカル反復開発または 1 ステップ UI デプロイ

    • 実験の分析の後、チーム メンバーはコード リポジトリに戻り、追加の開発と微調整を行うことができます。 その後、後続の実行を反復的な方法でクラウドに送信できます。
      • この反復的なアプローチにより、チームが運用の準備ができている品質に満足するまで、一貫した強化が保証されます。
    • チームがフローの品質に完全に自信を持てたら、Azure Machine Learning のオンライン エンドポイントとして UI ウィザードを使用してシームレスにデプロイできます。 チームがフローの品質に十分に自信を持てたら、堅牢なクラウド環境のオンライン エンドポイントとして UI デプロイ ウィザードを使用して運用環境にシームレスに移行できます。
      • オンライン エンドポイントでのこのデプロイは、実行スナップショットに基づいて行うことができます。これにより、安定した安全なサービス提供、さらなるリソースの割り当てと使用状況の追跡、クラウドでのログ監視が可能になります。 実行スナップショットからのフローのデプロイのスクリーンショット。デプロイ ウィザードのスクリーンショット。

共同開発にコード リポジトリを使用することをお勧めする理由

反復開発では、通常、ローカル開発環境と、Git などのバージョン管理システムを組み合わせた方が効果的です。 変更を加えてコードをローカルでテストし、変更を Git にコミットできます。 これにより、変更の進行中の記録が作成され、必要に応じて以前のバージョンに戻す機能が提供されます。

異なる環境間でフローを共有する必要がある場合は、GitHub や Azure Repos などのクラウドベースのコード リポジトリを使用することをお勧めします。 これにより、任意の場所から最新バージョンのコードにアクセスでき、コラボレーションとコード管理のためのツールが提供されます。

このベスト プラクティスに従うことで、チームは、プロンプト フロー開発のためのシームレスで効率的な生産性の高いコラボレーション環境を作成できます。

次のステップ