Skip to content

Commit f70938a

Browse files
authored
🐛 fix agent/run interface can't call multi-level agent.
2 parents 8a7d105 + 53f3131 commit f70938a

File tree

7 files changed

+30
-98
lines changed

7 files changed

+30
-98
lines changed

backend/agents/create_agent_info.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from services.remote_mcp_service import get_remote_mcp_server_list
99
from utils.auth_utils import get_current_user_id
1010

11-
from database.agent_db import search_agent_info_by_agent_id, search_tools_for_sub_agent, query_sub_agents, \
12-
query_or_create_main_agent_id
11+
from database.agent_db import search_agent_info_by_agent_id, search_tools_for_sub_agent, \
12+
query_or_create_main_agent_id, query_sub_agents_id_list
1313
from services.elasticsearch_service import ElasticSearchService, elastic_core, get_embedding_model
1414
from services.tenant_config_service import get_selected_knowledge_list
1515
from utils.prompt_template_utils import get_prompt_template_path
@@ -41,13 +41,11 @@ async def create_agent_config(agent_id, tenant_id, user_id, language: str = 'zh'
4141
agent_info = search_agent_info_by_agent_id(agent_id=agent_id, tenant_id=tenant_id)
4242

4343
# create sub agent
44-
sub_agents_info = query_sub_agents(agent_id, tenant_id)
44+
sub_agent_id_list = query_sub_agents_id_list(main_agent_id=agent_id, tenant_id=tenant_id)
4545
managed_agents = []
46-
for sub_agent_info in sub_agents_info:
47-
if not sub_agent_info.get("enabled"):
48-
continue
46+
for sub_agent_id in sub_agent_id_list:
4947
sub_agent_config = await create_agent_config(
50-
agent_id=sub_agent_info["agent_id"],
48+
agent_id=sub_agent_id,
5149
tenant_id=tenant_id,
5250
user_id=user_id,
5351
language=language)

backend/database/agent_db.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,27 +60,6 @@ def query_or_create_main_agent_id(tenant_id: str, user_id: str) -> int:
6060
else:
6161
return main_agent.agent_id
6262

63-
def query_sub_agents(main_agent_id: int, tenant_id: str):
64-
"""
65-
Query the TenantAgent list based on the optional tenant_id.
66-
Filter out records with delete_flag set to 'Y'.
67-
68-
:param main_agent_id: Optional main agent ID for filtering
69-
:param tenant_id: Optional tenant ID for filtering
70-
:return: List of TenantAgent objects that meet the criteria
71-
"""
72-
with get_db_session() as session:
73-
query = session.query(AgentInfo).filter(AgentInfo.delete_flag != 'Y',
74-
AgentInfo.parent_agent_id == main_agent_id,
75-
AgentInfo.name.isnot(None),
76-
AgentInfo.description.isnot(None),
77-
AgentInfo.model_name.isnot(None),
78-
AgentInfo.tenant_id == tenant_id)
79-
80-
# Order by create_time desc
81-
agents = query.order_by(AgentInfo.create_time.desc()).all()
82-
return [as_dict(agent) for agent in agents]
83-
8463

8564
def query_sub_agents_id_list(main_agent_id: int, tenant_id: str):
8665
"""

backend/main_service.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from dotenv import load_dotenv
77
load_dotenv()
88

9-
from services.agent_service import import_default_agents_to_pg
109
from apps.base_app import app
1110
from utils.logging_utils import configure_logging, configure_elasticsearch_logging
1211

@@ -17,5 +16,4 @@
1716

1817
if __name__ == "__main__":
1918
# Scan agents and update to database
20-
import_default_agents_to_pg()
2119
uvicorn.run(app, host="0.0.0.0", port=5010, log_level="info")

backend/prompts/manager_system_prompt_template.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ system_prompt: |-
9595
9696
managed_agent:
9797
task: |-
98+
你是一个名为'{{name}}'的助手。
99+
你的管理者给你提交了这个任务。
100+
---
101+
任务:
102+
{{task}}
103+
---
104+
你正在帮助你的管理者解决一个更大的任务:所以确保不要提供一行答案,而是提供尽可能多的信息,让他们清楚地理解答案。
105+
即使你的任务解决不成功,也请返回尽可能多的上下文,这样你的管理者可以根据这个反馈采取行动。
98106
99107
report: |-
100108
{{final_answer}}

backend/prompts/manager_system_prompt_template_en.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ system_prompt: |-
9595
9696
managed_agent:
9797
task: |-
98+
You are an assistant named '{{name}}'.
99+
Your manager has submitted this task to you.
100+
---
101+
Task:
102+
{{task}}
103+
---
104+
You are helping your manager solve a larger task: so make sure not to provide a one-line answer, but provide as much information as possible so they can clearly understand the answer.
105+
Even if your task solution is unsuccessful, please return as much context as possible so your manager can take action based on this feedback.
98106
99107
report: |-
100108
{{final_answer}}

backend/services/agent_service.py

Lines changed: 1 addition & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from agents.create_agent_info import create_tool_config_list
99
from consts.model import AgentInfoRequest, ExportAndImportAgentInfo, ExportAndImportDataFormat, ToolInstanceInfoRequest
1010
from database.agent_db import create_agent, query_all_enabled_tool_instances, \
11-
query_or_create_main_agent_id, query_sub_agents, search_blank_sub_agent_by_main_agent_id, \
11+
search_blank_sub_agent_by_main_agent_id, \
1212
search_tools_for_sub_agent, search_agent_info_by_agent_id, update_agent, delete_agent_by_id, query_all_tools, \
1313
create_or_update_tool_by_tool_info, check_tool_is_available, query_all_agent_info_by_tenant_id, \
1414
query_sub_agents_id_list, insert_related_agent, delete_all_related_agent
@@ -39,21 +39,6 @@ def get_creating_sub_agent_id_service(tenant_id: str, user_id: str = None) -> in
3939
return create_agent(agent_info={"enabled": False}, tenant_id=tenant_id, user_id=user_id)["agent_id"]
4040

4141

42-
def query_sub_agents_api(main_agent_id: int, tenant_id: str = None, user_id: str = None):
43-
sub_agents = query_sub_agents(main_agent_id, tenant_id)
44-
45-
for sub_agent in sub_agents:
46-
# search the tools used by each sub agent, here use the tools configured by admin, not use user_id
47-
tool_info = search_tools_for_sub_agent(agent_id=sub_agent["agent_id"], tenant_id=tenant_id)
48-
sub_agent["tools"] = tool_info
49-
50-
tool_id_list = [tool["tool_id"] for tool in tool_info]
51-
if all(check_tool_is_available(tool_id_list)):
52-
sub_agent["is_available"] = True
53-
else:
54-
sub_agent["is_available"] = False
55-
return sub_agents
56-
5742
def get_agent_info_impl(agent_id: int, tenant_id: str):
5843
try:
5944
agent_info = search_agent_info_by_agent_id(agent_id, tenant_id)
@@ -282,22 +267,6 @@ async def import_agent_by_agent_id(import_agent_info: ExportAndImportAgentInfo,
282267
create_or_update_tool_by_tool_info(tool_info=tool, tenant_id=tenant_id, user_id=user_id)
283268
return new_agent_id
284269

285-
def search_sub_agents(authorization: str = Header(None)):
286-
user_id, tenant_id = get_current_user_id(authorization)
287-
logger.info(f"user_id: {user_id}, tenant_id: {tenant_id}")
288-
try:
289-
main_agent_id = query_or_create_main_agent_id(tenant_id=tenant_id, user_id=user_id)
290-
except Exception as e:
291-
logger.error(f"Failed to get main agent id: {str(e)}")
292-
raise ValueError(f"Failed to get main agent id: {str(e)}")
293-
294-
try:
295-
sub_agent_list = query_sub_agents(main_agent_id, tenant_id)
296-
except Exception as e:
297-
logger.error(f"Failed to get sub agent list: {str(e)}")
298-
raise ValueError(f"Failed to get sub agent list: {str(e)}")
299-
300-
return main_agent_id, sub_agent_list
301270

302271
def load_default_agents_json_file(default_agent_path):
303272
# load all json files in the folder
@@ -312,34 +281,6 @@ def load_default_agents_json_file(default_agent_path):
312281
all_json_files.append(export_agent_info)
313282
return all_json_files
314283

315-
def import_default_agents_to_pg():
316-
try:
317-
main_agent_id, sub_agent_list = search_sub_agents()
318-
sub_agent_name_list = [sub_agent["name"] for sub_agent in sub_agent_list]
319-
320-
try:
321-
default_agents = load_default_agents_json_file(default_agent_path = "backend/agents/default_agents/")
322-
except Exception as e:
323-
logger.error(f"Failed to load default agents: {str(e)}")
324-
raise ValueError(f"Failed to load default agents: {str(e)}")
325-
326-
for agent in default_agents:
327-
if agent.name in sub_agent_name_list:
328-
continue
329-
else:
330-
try:
331-
# Create ExportAndImportDataFormat structure for import_agent_impl
332-
agent_data = ExportAndImportDataFormat(
333-
agent_id=main_agent_id,
334-
agent_info={str(main_agent_id): agent}
335-
)
336-
import_agent_impl(agent_info=agent_data)
337-
except Exception as e:
338-
logger.error(f"agent name: {agent.name}, error: {str(e)}")
339-
raise ValueError(f"agent name: {agent.name}, error: {str(e)}")
340-
except Exception as e:
341-
logger.error(f"Failed to import default agents: {str(e)}")
342-
raise ValueError(f"Failed to import default agents: {str(e)}")
343284

344285
def list_all_agent_info_impl(tenant_id: str, user_id: str) -> list[dict]:
345286
"""

backend/services/prompt_service.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
from smolagents import OpenAIServerModel
88

99
from consts.model import AgentInfoRequest
10-
from database.agent_db import query_sub_agents, update_agent, \
11-
query_tools_by_ids
10+
from database.agent_db import update_agent, \
11+
query_tools_by_ids, query_sub_agents_id_list, search_agent_info_by_agent_id
1212
from services.agent_service import get_enable_tool_id_by_agent_id
1313
from utils.prompt_template_utils import get_prompt_generate_config_path
1414
from utils.config_utils import tenant_config_manager, get_model_name_from_config
@@ -216,14 +216,14 @@ def get_enabled_tool_description_for_generate_prompt(agent_id: int, tenant_id: s
216216

217217
def get_enabled_sub_agent_description_for_generate_prompt(agent_id: int, tenant_id: str, user_id: str = None):
218218
logger.info("Fetching sub-agents information")
219-
sub_agent_raw_info_list = query_sub_agents(main_agent_id=agent_id, tenant_id=tenant_id)
220-
logger.info(f"Found {len(sub_agent_raw_info_list)} sub-agents")
219+
220+
sub_agent_id_list = query_sub_agents_id_list(main_agent_id=agent_id, tenant_id=tenant_id)
221221

222222
sub_agent_info_list = []
223-
for sub_agent_raw_info in sub_agent_raw_info_list:
224-
if not sub_agent_raw_info["enabled"]:
225-
continue
226-
sub_agent_info_list.append(sub_agent_raw_info)
223+
for sub_agent_id in sub_agent_id_list:
224+
sub_agent_info = search_agent_info_by_agent_id(agent_id=sub_agent_id, tenant_id=tenant_id)
225+
226+
sub_agent_info_list.append(sub_agent_info)
227227
return sub_agent_info_list
228228

229229

0 commit comments

Comments
 (0)