优化并发
This commit is contained in:
parent
6f2e898e2d
commit
116f1cb471
@ -151,16 +151,27 @@ class CustomMCPManager:
|
||||
async def init_config_async(self, config: Dict):
|
||||
tools: list = []
|
||||
mcp_servers = config['mcpServers']
|
||||
|
||||
# 并发连接所有MCP服务器
|
||||
connection_tasks = []
|
||||
for server_name in mcp_servers:
|
||||
client = CustomMCPClient()
|
||||
server = mcp_servers[server_name]
|
||||
await client.connection_server(mcp_server_name=server_name,
|
||||
mcp_server=server) # Attempt to connect to the server
|
||||
# 创建连接任务
|
||||
task = self._connect_and_store_client(client, server_name, server)
|
||||
connection_tasks.append(task)
|
||||
|
||||
client_id = server_name + '_' + str(
|
||||
uuid.uuid4()) # To allow the same server name be used across different running agents
|
||||
client.client_id = client_id # Ensure client_id is set on the client instance
|
||||
self.clients[client_id] = client # Add to clients dict after successful connection
|
||||
# 并发执行所有连接任务
|
||||
connected_clients = await asyncio.gather(*connection_tasks, return_exceptions=True)
|
||||
|
||||
# 处理连接结果并为每个客户端创建工具
|
||||
for result in connected_clients:
|
||||
if isinstance(result, Exception):
|
||||
logger.error(f'Failed to connect MCP server: {result}')
|
||||
continue
|
||||
|
||||
client, server_name = result
|
||||
client_id = client.client_id
|
||||
for tool in client.tools:
|
||||
"""MCP tool example:
|
||||
{
|
||||
@ -261,6 +272,21 @@ class CustomMCPManager:
|
||||
|
||||
return tools
|
||||
|
||||
async def _connect_and_store_client(self, client, server_name, server):
|
||||
"""辅助方法:连接MCP服务器并存储客户端"""
|
||||
try:
|
||||
await client.connection_server(mcp_server_name=server_name,
|
||||
mcp_server=server) # Attempt to connect to the server
|
||||
|
||||
client_id = server_name + '_' + str(
|
||||
uuid.uuid4()) # To allow the same server name be used across different running agents
|
||||
client.client_id = client_id # Ensure client_id is set on the client instance
|
||||
self.clients[client_id] = client # Add to clients dict after successful connection
|
||||
return client, server_name
|
||||
except Exception as e:
|
||||
logger.error(f'Failed to connect MCP server {server_name}: {e}')
|
||||
raise e
|
||||
|
||||
def create_tool_class(self, register_name, register_client_id, tool_name, tool_desc, tool_parameters):
|
||||
|
||||
class ToolClass(BaseTool):
|
||||
|
||||
@ -445,12 +445,14 @@ async def call_guideline_llm(chat_history: str, guidelines_text: str, terms:str,
|
||||
|
||||
def _get_optimal_batch_size(guidelines_count: int) -> int:
|
||||
"""根据guidelines数量决定最优批次数量(并发数)"""
|
||||
if guidelines_count <= 10:
|
||||
if guidelines_count <= 5:
|
||||
return 1
|
||||
elif guidelines_count <= 20:
|
||||
elif guidelines_count <= 10:
|
||||
return 2
|
||||
elif guidelines_count <= 30:
|
||||
elif guidelines_count <= 20:
|
||||
return 3
|
||||
elif guidelines_count <= 30:
|
||||
return 4
|
||||
else:
|
||||
return 5
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user