Python 工具

警告

Microsoft Foundry 與 Azure Machine Learning 中的提示流程將於 2027 年 4 月 20 日退役。 新開發不再建議使用提示流程。 請於 2027 年 4 月 20 日前將現有的提示流程應用程式與部署遷移至 Microsoft Agent Framework。

提示流程容器映像檔不再接收更新,包括安全性與套件更新。 此規定適用於提示流程執行時影像,包括 promptflow-runtime、、 promptflow-runtime-stable及 promptflow-python。

自 2027 年 4 月 20 日起,Prompt 流程,包括 Microsoft Foundry 與 Azure Machine Learning 中的網頁撰寫體驗、VS Code 擴充套件及相關的 Prompt 流程容器映像,將不再支援或提供。

如果您的應用程式依賴提示流程部署或執行時映像檔,請計畫在退休日前將這些工作負載移至支援的替代方案,如 Microsoft Agent Framework。 關於遷移指引,請參閱提示流程 遷移指南 及遷移 程式碼範例。

Python 工具讓你能在提示流程中建立自訂的程式碼片段,作為自包含的可執行節點。 你可以輕鬆建立 Python 工具、編輯程式碼並驗證結果。

輸入

Name 類型 Description 為必填項目
Code 字串 Python 程式碼片段 是的
輸入 - 工具函數參數及其指派列表 -

Types

類型 Python 範例 Description
int 參數:整數 整數型
bool param:bool 布林型
字串 參數:字串 字串類型
double param:float 雙型
list param: list 或 param: List[T] 清單類型
物件 param: dict 或 param: Dict[K, V] 物件類型
連線 param: CustomConnection 連線類型是專門處理的

帶有 型 Connection 別註解的參數被視為連接輸入,意即:

  • 提示流程擴充功能會顯示一個選擇器來選擇連接。
  • 執行時,提示流程會嘗試從傳入的參數值中尋找同名的連線。

Note

Union[...]類型註解僅支援連線類型,例如。 param: Union[CustomConnection, OpenAIConnection]

輸出

輸出是 Python 工具函式的回傳值。

用 Python 工具寫作

使用Python工具寫作時請遵循以下指引。

指導方針

  • Python 工具程式碼應包含完整的 Python 程式碼,包括必要的模組匯入。

  • Python工具程式碼必須包含一個以 @tool(工具函式)裝飾的函式,作為執行的入口。 裝飾劑只在片段中塗抹 @tool 一次。

    以下範例定義了Python工具 my_python_tool,並以 @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. 選擇 「建立>自訂」。

    截圖顯示 Connections 標籤上的流程,並在下拉選單中標示自訂按鈕。

  3. 在右側的窗格中,你可以定義你的連線名稱。 你可以選擇 新增鍵值對來儲存你的憑證和金鑰。

    截圖顯示新增自訂連接點和新增鍵值配對按鈕。

Note

要將一對鍵值設定為秘密,請選擇 is secret 勾選框。 這個選項會加密並儲存你的金鑰值。 確保至少有一對鍵值設定為秘密。 否則,連結就無法成功建立。

用 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