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

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

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

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

Diagram of the showing the following flow: create flow, develop and test flow, versioning in code repo, submit runs to cloud, and debut and iteration.

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

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

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

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

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

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

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

Screenshot of standard flow creation showing the create a new flow.

フロー フォルダーの構造

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

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

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

Screenshot of standard flow highlighting the files explorer.

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

Screenshot of raw file mode on a standard flow.

Screenshot of flow source file in a standard flow.

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

Screenshot of notebooks in Azure Machine Learning in the prompt flow folder showing the files.

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

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

Screenshot of showing the download button in the file explorer.

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

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

前提条件

  • Azure Machine Learning ワークスペースがまだない場合は、「作業を開始するために必要なリソースを作成する」の手順を完了してください。

  • Azure Machine Learning Python SDK v2 をインストールした Python 環境 (インストール手順)。 この環境は、Azure Machine Learning リソースを定義および制御するためのものであり、ランタイムに使用される環境とは分離されています。 詳細については、プロンプト フロー エンジニアリングのためにランタイムを管理する方法に関する記事を参照してください。

プロンプト フロー 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 omitted, it will use the automatic runtime, you can also specify the runtime name, specify automatic will also use the automatic runtime.
runtime: <runtime_name> 


# define instance type only work for automatic runtime, will be ignored if you specify the runtime name.
# resources:
#   instance_type: <instance_type>

# 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 omitted, it will use the automatic runtime, you can also specify the runtime name, specif automatic will also use the automatic runtime.
runtime: <runtime_name> 


# define instance type only work for automatic runtime, will be ignored if you specify the runtime name.
# resources:
#   instance_type: <instance_type>

# 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] (フローの実行) ボタンを選びます。 これにより、フロー テストがトリガーされます。

Screenshot of VS Code showing running the flow in the visual editor.

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

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

Screenshot of a yaml file in VS Code highlighting the default input and flow directory.

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

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

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

Screenshot of the flow test output in PowerShell.

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

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

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

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

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

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

Screenshot of the create a new flow panel with upload to local highlighted.

CI/CD の統合

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

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

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

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

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

CD: 継続的デプロイ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次のステップ