feat: add variable handling for tool parameters in base_chat_node and base_mcp_node
--story=1019430 --user=刘瑞斌 GitHub#3113 【MCP调用】MCP配置支持传入变量 https://www.tapd.cn/62980211/s/1775665v3.2
parent
b9ac3b941d
commit
c1a214b08f
|
|
@ -220,11 +220,13 @@ class BaseChatNode(IChatNode):
|
||||||
mcp_tool_ids = list(set(mcp_tool_ids + [mcp_tool_id]))
|
mcp_tool_ids = list(set(mcp_tool_ids + [mcp_tool_id]))
|
||||||
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
|
if mcp_source == 'custom' and mcp_servers is not None and '"stdio"' not in mcp_servers:
|
||||||
mcp_servers_config = json.loads(mcp_servers)
|
mcp_servers_config = json.loads(mcp_servers)
|
||||||
|
mcp_servers_config = self.handle_variables(mcp_servers_config)
|
||||||
elif mcp_tool_ids:
|
elif mcp_tool_ids:
|
||||||
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
|
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
|
||||||
for mcp_tool in mcp_tools:
|
for mcp_tool in mcp_tools:
|
||||||
if mcp_tool and mcp_tool['is_active']:
|
if mcp_tool and mcp_tool['is_active']:
|
||||||
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
|
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
|
||||||
|
mcp_servers_config = self.handle_variables(mcp_servers_config)
|
||||||
|
|
||||||
if tool_enable:
|
if tool_enable:
|
||||||
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
|
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
|
||||||
|
|
@ -253,6 +255,22 @@ class BaseChatNode(IChatNode):
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def handle_variables(self, tool_params):
|
||||||
|
# 处理参数中的变量
|
||||||
|
for k, v in tool_params.items():
|
||||||
|
if type(v) == str:
|
||||||
|
tool_params[k] = self.workflow_manage.generate_prompt(tool_params[k])
|
||||||
|
if type(v) == dict:
|
||||||
|
self.handle_variables(v)
|
||||||
|
if (type(v) == list) and (type(v[0]) == str):
|
||||||
|
tool_params[k] = self.get_reference_content(v)
|
||||||
|
return tool_params
|
||||||
|
|
||||||
|
def get_reference_content(self, fields: List[str]):
|
||||||
|
return str(self.workflow_manage.get_reference_field(
|
||||||
|
fields[0],
|
||||||
|
fields[1:]))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_history_message(history_chat_record, dialogue_number, dialogue_type, runtime_node_id):
|
def get_history_message(history_chat_record, dialogue_number, dialogue_type, runtime_node_id):
|
||||||
start_index = len(history_chat_record) - dialogue_number
|
start_index = len(history_chat_record) - dialogue_number
|
||||||
|
|
|
||||||
|
|
@ -27,10 +27,12 @@ class BaseMcpNode(IMcpNode):
|
||||||
if not tool.is_active:
|
if not tool.is_active:
|
||||||
raise ValueError(f"Tool with ID {mcp_tool_id} is inactive.")
|
raise ValueError(f"Tool with ID {mcp_tool_id} is inactive.")
|
||||||
servers = json.loads(tool.code)
|
servers = json.loads(tool.code)
|
||||||
|
servers = self.handle_variables(servers) # 处理servers中的变量
|
||||||
params = json.loads(json.dumps(tool_params))
|
params = json.loads(json.dumps(tool_params))
|
||||||
params = self.handle_variables(params)
|
params = self.handle_variables(params)
|
||||||
else:
|
else:
|
||||||
servers = json.loads(mcp_servers)
|
servers = json.loads(mcp_servers)
|
||||||
|
servers = self.handle_variables(servers) # 处理servers中的变量
|
||||||
params = json.loads(json.dumps(tool_params))
|
params = json.loads(json.dumps(tool_params))
|
||||||
params = self.handle_variables(params)
|
params = self.handle_variables(params)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue