LLM ベースのアプリケーション用にプロンプト フローを DevOps と統合する
Azure Machine Learning プロンプト フローは、大規模言語モデル (LLM) ベースのアプリケーション開発用のフローを開発および反復するための、開発者向けの使いやすいコードファースト メソッドです。 プロンプト フローには、SDK と CLI、Visual Studio Code 拡張機能、フロー作成 UI が用意されています。 これらのツールにより、ローカル フローの開発、ローカル フローの実行と評価実行のトリガー、ローカルとクラウドのワークスペース環境間のフローの移行が容易になります。
プロンプト フロー エクスペリエンスとコード機能を開発者操作 (DevOps) と組み合わせて、LLM ベースのアプリケーション開発ワークフローを強化できます。 この記事では、Azure Machine Learning LLM ベースのアプリケーション用のプロンプト フローと DevOps の統合に焦点を当てます。
次の図は、DevOps を使用したローカルおよびクラウドベースのプロンプト フロー開発の相関関係を示しています。
前提条件
Azure Machine Learning ワークスペース。 作成する場合は、「リソースを作成して作業を開始する」を参照してください。
Azure Machine Learning Python SDK v2 がインストールされたローカル Python 環境。これは、「はじめに」の手順に従って作成されるものです。
Note
この環境は、フローの一部として定義するフローの実行にコンピューティング セッションで使用される環境とは別のものです。 詳細については、「Azure Machine Learning スタジオでプロンプト フロー コンピューティング セッションを管理する」を参照してください。
Python およびプロンプト フロー拡張機能がインストールされている Visual Studio Code。
プロンプト フローでコードファースト エクスペリエンスを使用する
通常、LLM ベースのアプリケーションの開発は、ソース コード リポジトリと継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインを含む標準化されたアプリケーション エンジニアリング プロセスに従います。 このプロセスにより、チーム メンバー間の開発、バージョン管理、コラボレーションの合理化が促進されます。
DevOps とプロンプト フロー コード エクスペリエンスの統合により、次の主な機能と利点を備えた、より効率的な GenAIOps または LLMOps 反復プロセスがコード開発者に提供されます。
コード リポジトリでのフローのバージョン管理。 フロー ファイルは YAML 形式で定義でき、同じフォルダー構造の参照元ファイルに合わせて配置されます。
CI/CD パイプラインとのフロー実行の統合。 プロンプト フロー CLI または SDK を使用してフロー実行を自動的にトリガーすることで、プロンプト フローを CI/CD パイプラインと配信プロセスにシームレスに統合できます。
ローカルとクラウドの間のスムーズな移行。 バージョン管理、ローカル開発、共有のために、フロー フォルダーをローカルまたはアップストリームのコード リポジトリに簡単にエクスポートできます。 また、フロー フォルダーを Azure Machine Learning に簡単にインポートして、クラウド リソースを使用してさらに作成、テスト、デプロイすることもできます。
プロンプト フロー コードにアクセスする
各プロンプト フローには、フローを定義する重要なコード ファイルを含むフロー フォルダー構造があります。 フォルダー構造でフローが整理され、ローカルとクラウド間のスムーズな移行が容易になります。
Azure Machine Learning により、すべてのワークスペース ユーザーに共有ファイル システムが提供されます。 フローの作成時に、対応するフロー フォルダーが自動的に生成され、Users/<ユーザー名>/promptflow ディレクトリに格納されます。
フロー コード ファイルを操作する
Azure Machine Learning スタジオでフローを作成したら、フロー作成ページの [ファイル] セクションでフロー ファイルを表示、編集、管理できます。 ファイルに加えた変更は、ファイル共有ストレージに直接反映されます。
LLM ベース フローのフロー フォルダーには、次の主なファイルが含まれています。
flow.dag.yaml は、YAML 形式のプライマリ フロー定義ファイルです。 このファイルは、プロンプト フローの作成と定義に不可欠です。 このファイルには、フローで使用される入力、出力、ノード、ツール、バリアントに関する情報が含まれています。
Python (.py) または Jinja 2 (.jinja2) 形式のユーザー管理ソース コード ファイルでは、フロー内のツールとノードを構成します。 Python ツールでは、Python ファイルを使用してカスタム Python ロジックを定義します。 プロンプト ツールと LLM ツールでは、Jinja 2 ファイルを使用してプロンプト コンテキストを定義します。
ユーティリティおよびデータ ファイルなどのソース以外のファイルは、ソース ファイルと共にフロー フォルダーに含めることができます。
ファイル エディターで flow.dag.yaml ファイルとソース ファイルの生コードを表示および編集するには、[生ファイル モード] を有効にします。
または、Azure Machine Learning スタジオの [ノートブック] ページから、すべてのフロー フォルダーとファイルにアクセスして編集することもできます。
プロンプト フロー コードをダウンロードしてチェックインする
フローをコード リポジトリにチェックインするには、Azure Machine Learning スタジオからローカル コンピューターにフロー フォルダーをエクスポートします。 フロー作成ページの [ファイル] セクションにあるダウンロード アイコンを選択して、すべてのフロー ファイルを含む ZIP パッケージをダウンロードします。 その後、そのファイルをコード リポジトリにチェックインするか、解凍してファイルをローカルで操作できます。
Azure Machine Learning との DevOps 統合の詳細については、「Azure Machine Learning との Git 統合」を参照してください。
ローカルで開発およびテストする
反復開発中にフローやプロンプトを改良して微調整する際に、コード リポジトリ内で複数の反復をローカルで実行できます。 VS Code コミュニティ バージョン、VS Code プロンプト フロー拡張機能、プロンプト フロー ローカル SDK と CLI により、Azure に縛られることなく、完全にローカルの開発とテストを進めることができます。
ローカルで作業することで、毎回メイン コード リポジトリを更新しなくても、変更をすばやく行ってテストできます。 ローカル バージョンの使用に関する詳細とガイダンスについては、プロンプト フローの GitHub コミュニティを参照してください。
VS Code プロンプト フロー拡張機能を使用する
プロンプト フロー VS Code 拡張機能を使用して、クラウドと同様の UI エクスペリエンスで、フローを VS Code エディターでローカルで簡単に作成できます。
プロンプト フロー拡張機能を使用して VS Code でファイルをローカルで編集するには:
プロンプト フロー拡張機能が有効になっている VS Code で、プロンプト フロー フォルダーを開きます。
flow.dag.yaml ファイルを開き、そのファイルの上部にあるビジュアル エディター リンクを選択します。
プロンプト フロー ビジュアル エディターを使用して、バリアントのプロンプトを調整したり、ノードをさらに追加するなどして、フローに変更を加えます。
フローをテストするには、ビジュアル エディターの上部にある [実行] アイコンを選択します。または、任意のノードをテストするには、そのノードの上部にある [実行] アイコンを選択します。
プロンプト フロー SDK と CLI を使用する
コードで直接作業する場合、または Jupyter、PyCharm、Visual Studio、またはその他の統合開発環境 (IDE) を使用する場合は、flow.dag.yaml ファイル内の YAML コードを直接変更できます。
その後、次のようにターミナルでプロンプト フロー CLI または SDK を使用して、テスト用に 1 つのフロー実行をトリガーできます。
作業ディレクトリから実行をトリガーするには、次のコードを実行します。
pf flow test --flow <directory-name>
戻り値はテスト ログと出力です。
ローカル リポジトリからクラウドに実行を送信する
ローカル テストの結果に満足したら、プロンプト フロー CLI または SDK を使用して、ローカル リポジトリからクラウドに実行を送信できます。 次の手順とコードは、GitHub の Web 分類のデモ プロジェクトに基づいています。 プロジェクト リポジトリをクローンするか、プロンプト フロー コードをローカル コンピューターにダウンロードできます。
プロンプト フロー SDK をインストールする
pip install promptflow[azure] promptflow-tools
を実行して、Azure プロンプト フロー SDK/CLI をインストールします。
デモ プロジェクトを使っている場合は、以下を使用して requirements.txt をインストールし、SDK とその他の必要なパッケージを取得します: pip install -r <path>/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-file>.jsonl
column_mapping:
url: ${data.url}
# Define cloud compute resource
resources:
instance_type: <compute-type>
# If using compute instance compute type, also specify instance name
# compute: <compute-instance-name>
# Specify connections
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
接続を必要とするフロー内の各ツールの接続とデプロイ名を指定できます。 接続とデプロイ名を指定しない場合は、ツールで flow.dag.yaml ファイル内の接続とデプロイが使用されます。 接続を書式設定するには、次のコードを使用します。
...
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-file>.jsonl
run: <id-of-base-flow-run>
column_mapping:
<input-name>: ${data.<column-from-test-dataset>}
<input-name>: ${run.outputs.<column-from-run-output>}
resources:
instance_type: <compute-type>
compute: <compute_instance_name>
connections:
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
<node-name>:
connection: <connection-name>
deployment_name: <deployment-name>
評価実行を作成します。
pfazure run create --file run_evaluation.yml
実行結果の表示
フロー実行をクラウドに送信すると、実行のクラウド URL が返されます。 URL を開き、Azure Machine Learning スタジオで実行結果を表示できます。 次の CLI または SDK コマンドを実行して、実行結果を表示することもできます。
ログをストリーミングする
pfazure run stream --name <run-name>
実行の出力を表示する
pfazure run show-details --name <run-name>
評価実行メトリックを表示する
pfazure run show-metrics --name <evaluation-run-name>
DevOps との統合
ローカル開発環境と Git などのバージョン管理システムの組み合わせは、通常、反復開発に最も効果的です。 変更を加えてコードをローカルでテストし、変更を Git にコミットできます。 このプロセスにより、変更の進行中の記録が作成され、必要に応じて以前のバージョンに戻す機能が提供されます。
異なる環境間でフローを共有する必要がある場合は、GitHub や Azure Repos などのクラウドベースのコード リポジトリにプッシュできます。 この戦略により、任意の場所から最新のコード バージョンにアクセスでき、コラボレーションとコード管理のためのツールが提供されます。
これらのプラクティスに従うことで、チームは、プロンプト フロー開発のためのシームレスで効率的な生産性の高いコラボレーション環境を作成できます。
Web 分類フローを実行するエンド ツー エンドの LLMOps パイプラインの例については、「プロンプト フロートと GitHub を使ってエンド ツー エンドの GenAIOps を設定する」と GitHub の Web 分類のデモ プロジェクトを参照してください。
CI パイプラインでのフロー実行をトリガーする
フローを正常に開発してテストし、初期バージョンとしてチェックインしたら、調整とテストの反復の準備が整います。 この段階では、プロンプト フロー CLI を使用して CI パイプラインの手順を自動化することで、バッチ テストや評価実行を含むフロー実行をトリガーできます。
フロー反復のライフサイクル全体を通して、CLI を使用して次の操作を自動化できます。
- pull request 後のプロンプト フローの実行
- 結果が高品質であることを確認するためのプロンプト フロー評価の実行
- プロンプト フロー モデルの登録
- プロンプト フロー モデルのデプロイ
継続的な開発にスタジオ UI を使用する
フロー開発の任意の時点で、Azure Machine Learning スタジオ UI に戻り、クラウド リソースとエクスペリエンスを使用してフローを変更できます。
最新バージョンのフロー ファイルの開発と操作を続行するために、[ノートブック] ページのターミナルにアクセスし、リポジトリから最新のフロー ファイルをプルできます。 または、ローカル フロー フォルダーを新しいドラフト フローとして直接インポートして、ローカルとクラウドの開発をシームレスに切り替えることができます。
フローをオンライン エンドポイントとしてデプロイする
運用環境に移動する最後の手順は、オンライン エンドポイントとしてフローを Azure Machine Learning にデプロイすることです。 このプロセスにより、フローをアプリケーションに統合し、使用できるようになります。 フローのデプロイ方法の詳細については、リアルタイム推論のための Azure Machine Learning マネージド オンライン エンドポイントへのフローのデプロイに関するページを参照してください。
フロー開発で共同作業を行う
プロンプト フローを使用して LLM ベースのアプリケーションを開発する場合、チーム メンバー間のコラボレーションが不可欠になる場合があります。 チーム メンバーは、同じフローを作成してテストしたり、フローのさまざまなファセットに取り組んだり、反復的な変更や機能強化を同時に行ったりすることがあります。 このコラボレーションでは、コードの共有、変更の追跡、バージョンの管理、最終的なプロジェクトへの変更の統合のための効率的で合理化されたアプローチが必要です。
プロンプト フロー SDK/CLI と VS Code プロンプト フロー拡張機能により、ソース コード リポジトリ内でのコードベースのフロー開発の簡単なコラボレーションが促進されます。 GitHub や Azure Repos などのクラウドベースのソース管理システムを使用して、変更の追跡、バージョンの管理、およびこれらの変更の最終的なプロジェクトへの統合を行うことができます。
コラボレーション開発のベスト プラクティスに従う
一元化されたコード リポジトリを設定します。
コラボレーション プロセスの最初の手順では、プロンプト フロー コードを含む、プロジェクト コードのベースとしてコード リポジトリを設定します。 この一元化されたリポジトリにより、効率的な組織化、変更の追跡、チーム メンバー間のコラボレーションが可能になります。
プロンプト フロー拡張機能を使用して、VS Code でフローをローカルで作成して 1 回テストします。
リポジトリが設定されたら、チーム メンバーは、フローをローカルで作成し、入力テストを 1 回行うためにプロンプト フロー拡張機能と共に VS Code を使用できます。 標準化された統合開発環境により、フローのさまざまな側面に取り組む複数のメンバー間のコラボレーションが促進されます。
pfazure
CLI または SDK を使用して、ローカル フローからクラウドにバッチ実行と評価実行を送信します。ローカルでの開発とテストの後、チーム メンバーはプロンプト フロー CLI/SDK を使用して、バッチおよび評価実行をクラウドに送信して評価できます。 このプロセスにより、クラウド コンピューティングの使用、永続的な結果の格納、デプロイ用のエンドポイントの作成、スタジオ UI での効率的な管理が可能になります。
Azure Machine Learning スタジオ ワークスペース UI で実行結果を表示および管理します。
クラウドに実行を送信した後、チーム メンバーはスタジオ UI にアクセスして結果を表示し、効率的に実験を管理できます。 クラウド ワークスペースにより、実行履歴、ログ、スナップショット、インスタンス レベルの入力と出力を収集および管理するための一元的な場所が提供されます。
すべての実行履歴が記録される [実行] リストを使用すると、さまざまな実行の結果を簡単に比較できるため、品質分析と必要な調整に役立ちます。
ローカルの反復開発を引き続き使用します。
実験の結果を分析した後、チーム メンバーは、さらに開発して微調整するためにローカル環境とコード リポジトリに戻り、その後の実行を繰り返しクラウドに送信できます。 この反復的なアプローチにより、チームが運用環境の品質に満足するまで、一貫した強化が保証されます。
スタジオでの運用環境への 1 ステップ デプロイを使用します。
チームがフローの品質に完全に自信を持てたら、堅牢なクラウド環境でオンライン エンドポイントとしてシームレスにデプロイできます。 オンライン エンドポイントとしてのデプロイは、実行スナップショットに基づいて行うことができます。これにより、安定した安全なサービス提供、さらなるリソースの割り当てと使用状況の追跡、クラウドでのログ監視が可能になります。
Azure Machine Learning スタジオの [デプロイ] ウィザードは、デプロイを簡単に構成するのに役立ちます。