Skip to content

Commit 22fc138

Browse files
committed
refactor(agents): 移除reload_graph能力并简化agent初始化逻辑
统一agent初始化流程,直接从context获取system_prompt 清理不再使用的middleware导入和配置
1 parent 8087ef4 commit 22fc138

File tree

8 files changed

+20
-33
lines changed

8 files changed

+20
-33
lines changed

server/routers/chat_router.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,7 @@ def make_resume_chunk(content=None, **kwargs):
865865
async def save_agent_config(
866866
agent_id: str,
867867
config: dict = Body(...),
868-
reload_graph: bool = Query(False),
868+
reload_graph: bool = Query(True),
869869
current_user: User = Depends(get_required_user),
870870
):
871871
"""保存智能体配置到YAML文件(需要登录)"""

src/agents/chatbot/context.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Context(BaseContext):
3636
"options": lambda: list(MCP_SERVERS.keys()),
3737
"description": (
3838
"MCP服务器列表,建议使用支持 SSE 的 MCP 服务器,"
39-
"如果需要使用 uvx 或 npx 运行的服务器,也请在项目外部启动 MCP 服务器,并在项目中配置 MCP 服务器。"),
39+
"如果需要使用 uvx 或 npx 运行的服务器,也请在项目外部启动 MCP 服务器,并在项目中配置 MCP 服务器。"
40+
),
4041
},
4142
)

src/agents/chatbot/graph.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
from src.agents.common import BaseAgent, load_chat_model
55
from src.agents.common.mcp import get_mcp_tools
66
from src.agents.common.middlewares import (
7-
context_aware_prompt,
8-
context_based_model,
97
inject_attachment_context,
108
)
119
from src.agents.common.tools import get_kb_based_tools
@@ -17,7 +15,7 @@
1715
class ChatbotAgent(BaseAgent):
1816
name = "智能体助手"
1917
description = "基础的对话机器人,可以回答问题,默认不使用任何工具,可在配置中启用需要的工具。"
20-
capabilities = ["file_upload", "reload_graph"] # 支持文件上传功能和重载图
18+
capabilities = ["file_upload"] # 支持文件上传功能
2119

2220
def __init__(self, **kwargs):
2321
super().__init__(**kwargs)
@@ -26,7 +24,6 @@ def __init__(self, **kwargs):
2624
self.context_schema = Context
2725

2826
async def get_tools(self, tools: list[str] = None, mcps=None, knowledges=None):
29-
3027
# 1. 基础工具 (从 context.tools 中筛选)
3128
all_basic_tools = get_tools()
3229
selected_tools = []
@@ -63,10 +60,9 @@ async def get_graph(self, **kwargs):
6360
graph = create_agent(
6461
model=load_chat_model(context.model), # 使用 context 中的模型配置
6562
tools=await self.get_tools(context.tools, context.mcps, context.knowledges),
63+
system_prompt=context.system_prompt,
6664
middleware=[
67-
context_aware_prompt, # 动态系统提示词
6865
inject_attachment_context, # 附件上下文注入
69-
context_based_model, # 动态模型选择
7066
ModelRetryMiddleware(), # 模型重试中间件
7167
],
7268
checkpointer=await self._get_checkpointer(),
@@ -82,4 +78,4 @@ def main():
8278

8379
if __name__ == "__main__":
8480
main()
85-
# asyncio.run(main())
81+
# asyncio.run(main())

src/agents/common/context.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def update(self, data: dict):
4949
metadata={
5050
"name": "智能体模型",
5151
"options": [],
52-
"description": "智能体的驱动模型,建议选择 Agent 能力较强的模型,不建议使用小参数模型。"
52+
"description": "智能体的驱动模型,建议选择 Agent 能力较强的模型,不建议使用小参数模型。",
5353
},
5454
)
5555

src/agents/deep_agent/graph.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from langchain.agents.middleware import ModelRequest, SummarizationMiddleware, TodoListMiddleware, dynamic_prompt
88

99
from src.agents.common import BaseAgent, load_chat_model
10-
from src.agents.common.middlewares import context_based_model, inject_attachment_context
10+
from src.agents.common.middlewares import inject_attachment_context
1111
from src.agents.common.tools import search
1212

1313
from .context import DeepContext
@@ -64,7 +64,6 @@ class DeepAgent(BaseAgent):
6464
"file_upload",
6565
"todo",
6666
"files",
67-
"reload_graph",
6867
]
6968

7069
def __init__(self, **kwargs):
@@ -93,8 +92,8 @@ async def get_graph(self, **kwargs):
9392
graph = create_agent(
9493
model=model,
9594
tools=tools,
95+
system_prompt=context.system_prompt,
9696
middleware=[
97-
context_based_model, # 动态模型选择
9897
context_aware_prompt, # 动态系统提示词
9998
inject_attachment_context, # 附件上下文注入
10099
TodoListMiddleware(),
@@ -104,8 +103,8 @@ async def get_graph(self, **kwargs):
104103
default_tools=tools,
105104
subagents=[critique_sub_agent, research_sub_agent],
106105
default_middleware=[
107-
TodoListMiddleware(),
108-
FilesystemMiddleware(),
106+
TodoListMiddleware(), # 子智能体也有 todo 列表
107+
FilesystemMiddleware(), # 当前的两个文件系统是隔离的
109108
SummarizationMiddleware(
110109
model=sub_model,
111110
trigger=("tokens", 110000),

src/agents/mini_agent/graph.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from src import config
44
from src.agents.common import BaseAgent, get_buildin_tools, load_chat_model
5-
from src.agents.common.middlewares import context_aware_prompt, context_based_model
65

76

87
class MiniAgent(BaseAgent):
@@ -19,11 +18,13 @@ async def get_graph(self, **kwargs):
1918
if self.graph:
2019
return self.graph
2120

21+
context = self.context_schema.from_file(module_name=self.module_name)
22+
2223
# 创建 MiniAgent
2324
graph = create_agent(
24-
model=load_chat_model(config.default_model), # 实际会被覆盖
25+
model=load_chat_model(config.default_model),
26+
system_prompt=context.system_prompt,
2527
tools=self.get_tools(),
26-
middleware=[context_aware_prompt, context_based_model],
2728
checkpointer=await self._get_checkpointer(),
2829
)
2930

src/agents/reporter/graph.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
from src import config
44
from src.agents.common import BaseAgent, get_mcp_tools, load_chat_model
5-
from src.agents.common.middlewares import context_aware_prompt, context_based_model
65
from src.agents.common.toolkits.mysql import get_mysql_tools
76
from src.utils import logger
87

@@ -25,11 +24,13 @@ async def get_graph(self, **kwargs):
2524
if self.graph:
2625
return self.graph
2726

27+
context = self.context_schema.from_file(module_name=self.module_name)
28+
2829
# 创建 SqlReporterAgent
2930
graph = create_agent(
3031
model=load_chat_model(config.default_model), # 默认模型,会被 middleware 覆盖
32+
system_prompt=context.system_prompt,
3133
tools=await self.get_tools(),
32-
middleware=[context_aware_prompt, context_based_model],
3334
checkpointer=await self._get_checkpointer(),
3435
)
3536

web/src/components/AgentConfigSidebar.vue

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@
220220
<div class="sidebar-footer" v-if="!isEmptyConfig">
221221
<div class="form-actions">
222222
<a-button @click="saveConfig" class="save-btn" :class="{'changed': agentStore.hasConfigChanges}">
223-
{{ needsReload ? '保存配置并重新加载' : '保存配置' }}
223+
保存配置并重新加载
224224
</a-button>
225225
</div>
226226
</div>
@@ -334,12 +334,6 @@ const isEmptyConfig = computed(() => {
334334
return !selectedAgentId.value || Object.keys(configurableItems.value).length === 0;
335335
});
336336
337-
const needsReload = computed(() => {
338-
return selectedAgent.value &&
339-
selectedAgent.value.capabilities &&
340-
selectedAgent.value.capabilities.includes('reload_graph');
341-
});
342-
343337
const filteredTools = computed(() => {
344338
const toolsList = availableTools.value ? Object.values(availableTools.value) : [];
345339
if (!toolsSearchText.value) {
@@ -536,12 +530,7 @@ const saveConfig = async () => {
536530
message.info('检测到无效配置项,已自动过滤');
537531
}
538532
539-
const options = {};
540-
if (selectedAgent.value && selectedAgent.value.capabilities && selectedAgent.value.capabilities.includes('reload_graph')) {
541-
options.reload_graph = true;
542-
}
543-
544-
await agentStore.saveAgentConfig(options);
533+
await agentStore.saveAgentConfig();
545534
message.success('配置已保存到服务器');
546535
} catch (error) {
547536
console.error('保存配置到服务器出错:', error);

0 commit comments

Comments
 (0)