AI Studio中PromptFlow函数调用时如何使用已注册连接?
PromptFlow函数调用中使用已注册连接的解决方案
问题背景
在AI Studio开发PromptFlow流程时,遇到LLM节点调用函数无法注入已注册连接的问题:非函数调用的Python节点可通过@tool装饰器直接注入连接参数,但LLM节点的函数调用模式下该方法失效,运行时抛出错误:
run_db_lookup() missing 2 required positional arguments: 'db_conn' and 'aoai_conn'
最佳实践与解决步骤
核心思路是:连接参数作为静态配置由工具节点注入,LLM仅负责生成业务相关的动态参数,具体实现如下:
1. 修改工具函数,添加连接输入参数
将run_function工具的签名修改为包含连接参数,在调用目标函数时合并LLM生成的业务参数与注入的连接参数:
from promptflow.core import tool, CustomConnection from promptflow.connections import AzureOpenAIConnection import json from openai import AzureOpenAI def run_db_lookup(message: str, db_conn: CustomConnection, aoai_conn: AzureOpenAIConnection) -> str: # 初始化数据库客户端(根据实际连接类型调整) # db_client = your_db_client_init_method(db_conn) # 初始化Azure OpenAI客户端 client = AzureOpenAI( api_key=aoai_conn.key, api_version=aoai_conn.version, azure_endpoint=aoai_conn.base ) # 业务逻辑实现(示例) output = f"针对消息'{message}'的数据库查询结果" return output @tool def run_function(response_message: dict, db_conn: CustomConnection, aoai_conn: AzureOpenAIConnection) -> str: function_call = response_message.get("function_call", None) if function_call and "name" in function_call and "arguments" in function_call: function_name = function_call["name"] function_args = json.loads(function_call["arguments"]) # 合并业务参数与连接参数 combined_args = {**function_args, "db_conn": db_conn, "aoai_conn": aoai_conn} # 调用目标函数 result = globals()[function_name](**combined_args) else: # 处理无函数调用的情况 result = response_message.get("content", "") if isinstance(response_message, dict) else str(response_message) return result
2. 配置流程节点的连接参数
在PromptFlow画布中完成以下操作:
- 选中
run_function节点 - 在右侧「输入」面板中,为
db_conn和aoai_conn选择已注册的对应连接 - 确保LLM节点的函数定义中,仅包含
message这类业务参数(不要包含连接参数)
3. 核心逻辑说明
- LLM的函数调用仅负责生成业务场景所需的动态参数(如示例中的
message),无需处理敏感的连接配置 - 连接参数通过PromptFlow的工具注入机制传递,既符合平台的参数管理规范,也避免了敏感凭证暴露给LLM的风险
内容的提问来源于stack exchange,提问作者Andi Anderle
相关产品推荐
相关产品推荐

