Prompt Flow で Python のコードを実行する際、環境変数やシークレットを利用する方法のメモです。
Connections で Custom を使って実現できます。
余談ですが、公式のドキュメントだと Connections の翻訳が「つながり」になってたり、他の単語も変な翻訳があって混乱するので Prompt Flow 関連のドキュメントや Azure Machine Learning Studio は英語で見た方が良いと個人的に感じてます。
Connections を構成する
Azure Machine Learning Studio の Prompt Flow で、"Connections" タブをクリック → "Create" ボタンをクリック → "Custom" を選びます。
Name を入力して、あとは必要な Key と value を入力していきます。シークレットは "is secret" のチェックを入れましょう。
最後に "Save" ボタンをクリックして作成完了です。
作成した Connection をみるとこんな感じ。シークレットとして登録した値は、"Show" ボタンをクリックしてみることはできるので、そこまで制約として強くないですが、Permission で見えないように制御はできるみたい。
Prompt Flow の Python 側で利用する
Flow を作って Python tool で以下のようにコードを変えます。
- 2行目にあるように
from promptflow.connections import CustomConnection
を追加します。 - 5行目のようにメソッドの型が
CustomConnection
の引数を追加します。 - 6, 7 行目で書いた感じでキーを指定して値の取得が可能です。
あとは、どの custom connection を利用するかですが、この Python tool の inputs から指定します。ただ、私の環境ではいつも以下図のようにコードで追加した conn
が表示されないです。その場合は、一度実行してエラーにするとよいです (実行が遅いからだるいですが...)。
※ Row file mode で flow.dag.yaml に直接書くのが早そうですが、私の環境で何度か試しても2024年6月現時点では Flow を実行すると値が空っぽになってしまいます💦
実行して一度エラーになると、以下図のように Inputs でメソッドの2つ目の引数が指定できるようになります。値は利用可能な Connections が選択可能となっています。
ようやく設定ができましたのでこれで実行すると、こんな感じで正しく取得できてることが確認できます。