在PromptFlow中创建动态列表工具输入的完整指南
动态列表工具输入概述
在PromptFlow项目中,动态列表工具输入是一种强大的功能,它允许工具开发者创建能够实时获取选项的输入字段。与传统的静态选项不同,动态列表通过调用后端函数来获取最新的选项数据,极大地提升了工具的灵活性和实用性。
动态列表的核心优势在于:
- 实时数据获取:选项内容可以来自API、数据库或其他动态数据源
- 高度可定制:可以控制每个选项的显示方式、提示信息和交互行为
- 上下文感知:选项可以根据其他输入参数的变化而动态调整
准备工作
在开始创建动态列表工具输入前,需要确保满足以下条件:
-
开发环境准备:
- 安装最新版本的PromptFlow开发工具
- Python环境配置完成
-
依赖包安装:
pip install promptflow>=1.0.0
创建动态列表函数
函数结构要求
动态列表函数需要遵循特定的结构规范:
from typing import List, Dict, Union
def dynamic_list_function(param1: str, param2: int = 10, **kwargs) -> List[Dict[str, Union[str, int, float, list, Dict]]]:
"""
动态列表生成函数
参数:
param1: 字符串参数示例
param2: 整型参数示例,默认值为10
kwargs: 其他可选参数
返回:
返回选项列表,每个选项是一个字典,包含以下键:
- value: 实际传递给工具的值(必需)
- display_value: 界面显示的值(可选)
- hyperlink: 点击跳转的链接(可选)
- description: 悬停提示信息(可选)
"""
# 实现数据获取逻辑
options = []
# ... 数据处理逻辑 ...
return options
实际示例解析
以下是一个完整的动态列表函数示例,它生成随机水果名称的列表:
import random
def generate_fruit_list(prefix: str = "", size: int = 10, **kwargs):
"""生成水果名称动态列表
参数:
prefix: 选项前缀
size: 生成选项数量
kwargs: 其他参数
返回:
水果选项列表,每个选项包含显示值和跳转链接
"""
fruits = ["苹果", "香蕉", "橙子", "葡萄", "西瓜",
"芒果", "草莓", "蓝莓", "菠萝", "桃子"]
result = []
for i in range(size):
fruit = f"{random.choice(fruits)}{i}"
item = {
"value": fruit,
"display_value": f"{prefix}{fruit}",
"hyperlink": f'https://search.example.com?q={fruit}',
"description": f"这是第{i+1}个水果选项"
}
result.append(item)
return result
配置工具YAML文件
在工具的YAML配置文件中,需要为动态列表输入添加特定配置:
tool_namespace.tool_module.tool_function:
function: tool_function
inputs:
dynamic_input:
type:
- list
dynamic_list:
func_path: module.path.to.list_function # 动态列表函数路径
func_kwargs:
- name: param1 # 参数1
type: string
optional: true
reference: ${inputs.other_input} # 可引用其他输入值
- name: size # 参数2
type: int
optional: true
default: 5
allow_manual_entry: true # 允许手动输入
is_multi_select: false # 是否允许多选
关键配置项说明:
func_path
: 指定动态列表函数的完整导入路径func_kwargs
: 定义传递给函数的参数,支持引用其他输入值allow_manual_entry
: 控制用户是否可以手动输入值is_multi_select
: 控制是否允许多选模式
集成Azure资源动态列表
当需要动态列出Azure资源时,需要特别注意认证和配置:
- 函数实现要点:
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
def list_azure_resources(
subscription_id: str = None,
resource_group_name: str = None,
workspace_name: str = None,
**kwargs
):
"""列出Azure ML资源"""
if not all([subscription_id, resource_group_name, workspace_name]):
return []
credential = DefaultAzureCredential()
ml_client = MLClient(
credential=credential,
subscription_id=subscription_id,
resource_group_name=resource_group_name,
workspace_name=workspace_name
)
# 获取资源逻辑...
- 用户端配置要求:
# 安装Azure依赖
pip install azure-ai-ml
# 配置Azure默认工作区
az login
az account set --subscription <订阅ID>
az configure --defaults group=<资源组> workspace=<工作区>
常见问题排查
动态列表不显示选项
如果动态列表没有显示任何选项,可以按照以下步骤排查:
- 检查错误信息:界面通常会显示具体的错误原因
- 验证依赖:
- 确保所有必要的Python包已安装
- 对于Azure资源,确认已登录并设置默认工作区
- 测试函数:单独调用动态列表函数验证其返回值
- 检查YAML配置:确认函数路径和参数传递正确
性能优化建议
当动态列表获取较慢时,可以考虑:
- 实现缓存机制,避免重复请求
- 添加分页参数,减少单次返回数据量
- 对于大型数据集,实现搜索过滤功能
最佳实践
-
设计原则:
- 保持函数单一职责,只负责获取选项数据
- 合理设置默认值和可选参数
- 添加详细的文档说明
-
用户体验:
- 为选项提供有意义的显示值和描述
- 考虑添加超链接提供更多上下文信息
- 处理空状态和错误情况
-
安全性:
- 敏感参数应设置为optional并通过引用传递
- 对用户输入进行适当验证和清理
通过遵循本指南,您可以在PromptFlow中创建出功能强大且用户友好的动态列表工具输入,极大地提升工具的实用性和灵活性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考