你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Python工具

警告

Prompt Flow 功能开发于 2026 年 4 月 20 日结束。 该功能将于 2027 年 4 月 20 日完全停用。 在停用日期,Prompt Flow 进入只读模式。 现有流将继续运行到该日期。

Recommended action: 将提示流工作负载迁移到 2027 年 4 月 20 日之前Microsoft Agent Framework

使用 Python 工具,可以在提示流中将自定义代码片段创建为自包含可执行节点。 可以轻松创建Python工具、编辑代码和验证结果。

Inputs

Name 类型 Description Required
Code 字符串 Python代码片段 Yes
Inputs - 工具函数参数及其赋值列表 -

Types

类型 Python示例 Description
int param: int 整数类型
bool param: bool 布尔类型
字符串 param: str 字符串类型
double param:float Double 类型
list param: list 或 param: List[T] 列表类型
对象 param: dict 或 param: Dict[K, V] 对象类型
Connection param:CustomConnection 连接类型为专门处理

具有 Connection 类型注释的参数将视为连接输入,这意味着:

  • 提示流扩展显示用于选择连接的选择器。
  • 在执行期间,提示流尝试从传入的参数值中找到具有相同名称的连接。

Note

类型 Union[...] 批注 支持连接类型,例如 param: Union[CustomConnection, OpenAIConnection]

Outputs

输出是Python工具函数的返回值。

使用 Python 工具进行写入

使用 Python 工具编写时,请使用以下准则。

Guidelines

  • Python工具代码应包含完整的Python代码,包括任何必要的模块导入。

  • Python工具代码必须包含用 @tool(工具函数)修饰的函数,该函数用作执行入口点。 应仅在代码片段中应用 @tool 修饰器一次。

    下面的示例定义用 @tool 修饰的 Python 工具 my_python_tool

  • 必须在 Inputs 节中分配Python工具函数参数。

    下面的示例定义输入 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

Inputs

Name 类型 流 YAML 中的示例值 传递给函数的值
消息 字符串 world world
my_conn CustomConnection my_conn (属于CustomConnection 对象)的父级。

提示流尝试查找在执行期间命名 my_conn 的连接。

Outputs

"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. > 创建自定义”。

    显示“连接”选项卡上的流的屏幕截图,其中突出显示了下拉菜单中的“自定义”按钮。

  3. 在右窗格中,可以定义连接名称。 可以通过选择“添加键值对”来添加多个键值对,以存储凭据和密钥。

    显示添加自定义连接点和“添加键值对”按钮的屏幕截图。

Note

若要将一个键值对设置为机密,请选中 “是机密 ”复选框。 此选项将加密和存储密钥值。 确保至少将一个键值对设置为机密。 否则,连接不能成功创建。

在 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