プロンプト フローを LLM ベースのアプリケーション DevOps と統合する
この記事では、Azure Machine Learning でのプロンプト フローと LLM ベースのアプリケーション DevOps との統合について説明します。 プロンプト フローは、開発者にとってわかりやすく使いやすいコードファースト エクスペリエンスを提供し、LLM ベースのアプリケーション開発ワークフロー全体を使ってフローの開発と反復処理を行うことができます。
プロンプト フロー SDK および CLI、VS 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 との 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 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 エディターからローカルでフローを簡単に作成できます。
拡張機能を使うには:
- VS Code Desktop でプロンプト フロー フォルダーを開きます。
- ノートブック ビューで "flow.dag.yaml" ファイルを開きます。
- ビジュアル エディターを使って、バリアントのプロンプトの調整、ツールの追加など、フローに必要な変更を加えます。
- フローをテストするには、ビジュアル エディターの上部にある [Run Flow] (フローの実行) ボタンを選びます。 これにより、フロー テストがトリガーされます。
プロンプト フロー ローカル SDK および CLI
Jupyter、PyCharm、Visual Studio などの IDE を使いたい場合は、flow.dag.yaml
ファイルの YAML 定義を直接変更できます。
これで、プロンプト フロー CLI または SDK を使い、テストのためにフローの 1 回の実行をトリガーできるようになります。
現在いる作業ディレクトリが <path-to-the-sample-repo>/examples/flows/standard/
だとします
pf flow test --flow web-classification # "web-classification" is the directory name
これにより、メイン コード リポジトリを毎回更新することなく、変更とそのテストを簡単に実行できます。 ローカル テストの結果に満足したら、ローカル リポジトリからクラウドに実行を送信して、クラウドで実験実行を行うことができます。
ローカル バージョンの使用に関する詳細とガイダンスについては、プロンプト フローの 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 回テストする - コード リポジトリと VSC 拡張機能
クラウドベースの実験用バッチ テストと評価 - プロンプト フロー CLI/SDK とワークスペース ポータル UI
- ローカルの開発とテスト フェーズの後、フロー開発者は pfazure CLI または SDK を使用して、ローカル フロー ファイルからクラウドにバッチ実行と評価実行を送信できます。
- クラウドに送信した後、チーム メンバーはクラウド ポータル UI にアクセスして結果を表示し、実験を効率的に管理できます。
運用のためのローカル反復開発または 1 ステップ UI デプロイ
- 実験の分析の後、チーム メンバーはコード リポジトリに戻り、追加の開発と微調整を行うことができます。 その後、後続の実行を反復的な方法でクラウドに送信できます。
- この反復的なアプローチにより、チームが運用の準備ができている品質に満足するまで、一貫した強化が保証されます。
- チームがフローの品質に完全に自信を持てたら、Azure Machine Learning のオンライン エンドポイントとして UI ウィザードを使用してシームレスにデプロイできます。 チームがフローの品質に十分に自信を持てたら、堅牢なクラウド環境のオンライン エンドポイントとして UI デプロイ ウィザードを使用して運用環境にシームレスに移行できます。
- 実験の分析の後、チーム メンバーはコード リポジトリに戻り、追加の開発と微調整を行うことができます。 その後、後続の実行を反復的な方法でクラウドに送信できます。
共同開発にコード リポジトリを使用することをお勧めする理由
反復開発では、通常、ローカル開発環境と、Git などのバージョン管理システムを組み合わせた方が効果的です。 変更を加えてコードをローカルでテストし、変更を Git にコミットできます。 これにより、変更の進行中の記録が作成され、必要に応じて以前のバージョンに戻す機能が提供されます。
異なる環境間でフローを共有する必要がある場合は、GitHub や Azure Repos などのクラウドベースのコード リポジトリを使用することをお勧めします。 これにより、任意の場所から最新バージョンのコードにアクセスでき、コラボレーションとコード管理のためのツールが提供されます。
このベスト プラクティスに従うことで、チームは、プロンプト フロー開発のためのシームレスで効率的な生産性の高いコラボレーション環境を作成できます。