mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
chore: add mcp_tool_ids parameter to support multiple MCP Tool IDs
This commit is contained in:
parent
33b6e0ca96
commit
1815c1fa69
|
|
@ -34,6 +34,7 @@ class ChatNodeSerializer(serializers.Serializer):
|
|||
mcp_enable = serializers.BooleanField(required=False, label=_("Whether to enable MCP"))
|
||||
mcp_servers = serializers.JSONField(required=False, label=_("MCP Server"))
|
||||
mcp_tool_id = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Tool ID"))
|
||||
mcp_tool_ids = serializers.ListField(child=serializers.UUIDField(), required=False, allow_empty=True, label=_("MCP Tool IDs"), )
|
||||
mcp_source = serializers.CharField(required=False, allow_blank=True, allow_null=True, label=_("MCP Source"))
|
||||
|
||||
tool_enable = serializers.BooleanField(required=False, default=False, label=_("Whether to enable tools"))
|
||||
|
|
@ -57,7 +58,7 @@ class IChatNode(INode):
|
|||
model_setting=None,
|
||||
mcp_enable=False,
|
||||
mcp_servers=None,
|
||||
mcp_tool_id=None,
|
||||
mcp_tool_ids=None,
|
||||
mcp_source=None,
|
||||
tool_enable=False,
|
||||
tool_ids=None,
|
||||
|
|
|
|||
|
|
@ -219,6 +219,7 @@ class BaseChatNode(IChatNode):
|
|||
mcp_enable=False,
|
||||
mcp_servers=None,
|
||||
mcp_tool_id=None,
|
||||
mcp_tool_ids=None,
|
||||
mcp_source=None,
|
||||
tool_enable=False,
|
||||
tool_ids=None,
|
||||
|
|
@ -247,7 +248,7 @@ class BaseChatNode(IChatNode):
|
|||
|
||||
# 处理 MCP 请求
|
||||
mcp_result = self._handle_mcp_request(
|
||||
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids, chat_model, message_list,
|
||||
mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids, chat_model, message_list,
|
||||
history_message, question
|
||||
)
|
||||
if mcp_result:
|
||||
|
|
@ -264,7 +265,7 @@ class BaseChatNode(IChatNode):
|
|||
'history_message': history_message, 'question': question.content}, {},
|
||||
_write_context=write_context)
|
||||
|
||||
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, tool_ids,
|
||||
def _handle_mcp_request(self, mcp_enable, tool_enable, mcp_source, mcp_servers, mcp_tool_id, mcp_tool_ids, tool_ids,
|
||||
chat_model, message_list, history_message, question):
|
||||
if not mcp_enable and not tool_enable:
|
||||
return None
|
||||
|
|
@ -275,12 +276,18 @@ class BaseChatNode(IChatNode):
|
|||
if mcp_source is None:
|
||||
mcp_source = 'custom'
|
||||
if mcp_enable:
|
||||
# 兼容老数据
|
||||
if not mcp_tool_ids:
|
||||
mcp_tool_ids = []
|
||||
if 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:
|
||||
mcp_servers_config = json.loads(mcp_servers)
|
||||
elif mcp_tool_id:
|
||||
mcp_tool = QuerySet(Tool).filter(id=mcp_tool_id).first()
|
||||
if mcp_tool and mcp_tool.is_active:
|
||||
mcp_servers_config = json.loads(mcp_tool.code)
|
||||
elif mcp_tool_ids:
|
||||
mcp_tools = QuerySet(Tool).filter(id__in=mcp_tool_ids).values()
|
||||
for mcp_tool in mcp_tools:
|
||||
if mcp_tool and mcp_tool['is_active']:
|
||||
mcp_servers_config = {**mcp_servers_config, **json.loads(mcp_tool['code'])}
|
||||
|
||||
if tool_enable:
|
||||
if tool_ids and len(tool_ids) > 0: # 如果有工具ID,则将其转换为MCP
|
||||
|
|
|
|||
Loading…
Reference in New Issue