Python ツール

Warnung

Microsoft Foundry と Azure Machine Learning のプロンプト フローは、2027 年 4 月 20 日に廃止されます。 新しい開発では、プロンプト フローは推奨されなくなりました。 2027 年 4 月 20 日より前に、既存の Prompt フロー アプリケーションとデプロイを Microsoft Agent Framework に移行します。

プロンプト フロー コンテナー イメージは、セキュリティやパッケージの更新プログラムなど、更新プログラムを受信しなくなりました。 これは、 promptflow-runtimepromptflow-runtime-stablepromptflow-pythonなどのプロンプト フロー ランタイム イメージに適用されます。

2027 年 4 月 20 日以降、Microsoft Foundry と Azure Machine Learning の Web 作成エクスペリエンス、VS Code 拡張機能、関連する Prompt フロー コンテナー イメージなど、プロンプト フローはサポートされなくなり、使用できなくなります。

アプリケーションがプロンプト フローのデプロイまたはランタイム イメージに依存している場合は、提供終了日より前に、サポートされている代替手段 (Microsoft Agent Framework にワークロードを移動することを計画します。 移行ガイダンスについては、プロンプト フロー移行ガイドと移行コード サンプルを参照してください。

Python ツールを使用すると、プロンプト フローで自己完結型の実行可能ノードとしてカスタマイズされたコード スニペットを作成できます。 Pythonツールの作成、コードの編集、結果の確認を簡単に行うことができます。

入力

Name タイプ Description Required
Code 文字列 Python コード スニペット はい
入力 - ツール関数パラメーターとその割り当ての一覧 -

Types

タイプ Pythonの例 Description
整数 (int) param: int 整数型
bool param: bool ブール型
文字列 パラメータ: 文字列 文字列の種類
double パラメータ: float Double 型
list param: list または param: List[T] リスト タイプ
オブジェクト param: dict または param: Dict[K, V] オブジェクトの種類
Connection param: CustomConnection 接続の種類は特別に処理されます

Connection型注釈を持つパラメーターは、接続入力として扱われます。つまり、次のことを意味します。

  • プロンプト フロー拡張機能には、接続を選択するセレクターが表示されます。
  • 実行中、プロンプト フローは、渡されたパラメーター値から同じ名前の接続を検索しようとします。

Note

Union[...]型注釈は、接続の種類 (たとえば、) param: Union[CustomConnection, OpenAIConnection]サポートされます。

出力

出力は、Python ツール関数の戻り値です。

Python ツールを使用して書き込む

Python ツールを使用して記述する場合は、次のガイドラインに従います。

Guidelines

  • Pythonツール コードは、必要なモジュールのインポートを含む完全なPython コードで構成されている必要があります。

  • Pythonツール コードには、@tool (ツール関数) で修飾された関数が含まれている必要があります。これは、実行のエントリ ポイントとして機能します。 スニペット内で @tool デコレーターを 1 回だけ適用します。

    次の例では、my_python_tool で修飾される Python ツール @tool を定義します。

  • Pythonツール関数パラメーターは、Inputs セクションで割り当てる必要があります。

    次の例では、入力 message を定義し、 world割り当てます。

  • Python ツール関数には戻り値が必要です。

    次の例では、連結された文字列が返されます。

Code

次のスニペットは、ツール関数の基本的な構造を示しています。 プロンプト フローは、関数を読み取り、関数パラメーターと型注釈から入力を抽出します。

from promptflow import tool
from promptflow.connections import CustomConnection

# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(message: str, my_conn: CustomConnection) -> str:
    my_conn_dict = dict(my_conn)
    # Do some function call with my_conn_dict...
    return 'hello ' + message

入力

Name タイプ フロー YAML のサンプル値 関数に渡される値
メッセージ 文字列 world world
my_conn CustomConnection my_conn CustomConnection オブジェクト

プロンプト フローは、実行中に my_conn という名前の接続を見つけようとします。

出力

"hello world"

Python ツールから推論モデルを呼び出す

LLM ノードでサポートされていない推論モデルを呼び出す必要がある場合は、Python ツールを使用してモデルを直接呼び出すことができます。 次の例は、Python ツールから推論モデルを呼び出す方法を示しています。

from promptflow import tool
from promptflow.connections import AzureOpenAIConnection
from openai import AzureOpenAI
 
@tool
def my_python_tool(
    OpenAIConnection: AzureOpenAIConnection,
    scope_reply: str
):
    model_name = "o3-mini"
    deployment = "o3-mini"
    print(OpenAIConnection['api_base'])
    endpoint = OpenAIConnection['api_base'] #"https://<your endpoint>.openai.azure.com/"
    model_name = "o3-mini" #your model name
    deployment = "o3-mini" #your deployment name
 
    subscription_key = OpenAIConnection['api_key']
    api_version = "2024-12-01-preview" #Supply an API version that supports reasoning models.
 
    client = AzureOpenAI(
        api_version=api_version,
        azure_endpoint=endpoint,
        api_key=subscription_key,
    )
 
    response = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "You are a helpful assistant.",
            },
            {
                "role": "user",
                "content": "I am going to Paris, what should I see?",
            }
        ],
        max_completion_tokens=100000,
        model=deployment
    )
    return response.choices[0].message.content

Python ツールでのカスタム接続

認証を使用して外部サービスを呼び出す必要があるPython ツールを開発している場合は、プロンプト フローでカスタム接続を使用します。 これを使用して、アクセス キーを安全に格納し、Python コードで取得できます。

カスタム接続を作成する

大規模言語モデル API キーまたはその他の必要な資格情報をすべて格納するカスタム接続を作成します。

  1. ワークスペースのプロンプト フローに移動し、[ 接続 ] タブを選択します。

  2. [ 作成>Custom] を選択します。

    ドロップダウン メニューの [カスタム] ボタンが強調表示されている [接続] タブのフローを示すスクリーンショット。

  3. 右側のウィンドウで、接続名を定義できます。 [キーと値のペアの追加] を選択すると、複数のキーと値の ペアを追加して資格情報とキーを格納できます。

    カスタム接続ポイントの追加と [キーと値のペアの追加] ボタンを示すスクリーンショット。

Note

1 つのキーと値のペアをシークレットとして設定するには、[ シークレット ] チェック ボックスをオンにします。 このオプションは、キー値を暗号化して格納します。 少なくとも 1 つのキーと値のペアがシークレットとして設定されていることを確認します。 それ以外の場合、接続は正常に作成されません。

Pythonでカスタム接続を使用する

Python コードでカスタム接続を使用するには:

  1. Python ノードのコード セクションで、カスタム接続ライブラリ from promptflow.connections import CustomConnection をインポートします。 ツール関数で CustomConnection 型の入力パラメーターを定義します。

    カスタム接続が強調表示されているドキュメント検索チェーン ノードを示すスクリーンショット。

  2. 入力セクションへの入力を解析し、[ ] ドロップダウンでターゲット のカスタム接続を選択します。

    接続が強調表示されているチェーン ノードを示すスクリーンショット。

例えば次が挙げられます。

from promptflow import tool
from promptflow.connections import CustomConnection

@tool
def my_python_tool(message: str, myconn: CustomConnection) -> str:
    # Get authentication key-values from the custom connection
    connection_key1_value = myconn.key1
    connection_key2_value = myconn.key2