22from langchain .agents .middleware import ModelRetryMiddleware
33
44from src .agents .common import BaseAgent , load_chat_model
5- from src .agents .common .mcp import MCP_SERVERS
5+ from src .agents .common .mcp import get_mcp_tools
66from src .agents .common .middlewares import (
7- DynamicToolMiddleware ,
87 context_aware_prompt ,
98 context_based_model ,
109 inject_attachment_context ,
1110)
12- from src .agents .common .subagents import calc_agent_tool
11+ from src .agents .common .tools import get_kb_based_tools
1312
1413from .context import Context
1514from .tools import get_tools
1817class ChatbotAgent (BaseAgent ):
1918 name = "智能体助手"
2019 description = "基础的对话机器人,可以回答问题,默认不使用任何工具,可在配置中启用需要的工具。"
21- capabilities = ["file_upload" ] # 支持文件上传功能
20+ capabilities = ["file_upload" , "reload_graph" ] # 支持文件上传功能和重载图
2221
2322 def __init__ (self , ** kwargs ):
2423 super ().__init__ (** kwargs )
2524 self .graph = None
2625 self .checkpointer = None
2726 self .context_schema = Context
2827
29- def get_tools (self ):
30- """返回基本工具"""
31- base_tools = get_tools ()
32- base_tools .append (calc_agent_tool )
33- return base_tools
28+ async def get_tools (self , tools : list [str ] = None , mcps = None , knowledges = None ):
29+
30+ # 1. 基础工具 (从 context.tools 中筛选)
31+ all_basic_tools = get_tools ()
32+ selected_tools = []
33+
34+ if tools :
35+ # 创建工具映射表
36+ tools_map = {t .name : t for t in all_basic_tools }
37+ for tool_name in tools :
38+ if tool_name in tools_map :
39+ selected_tools .append (tools_map [tool_name ])
40+
41+ # 2. 知识库工具
42+ if knowledges :
43+ kb_tools = get_kb_based_tools (db_names = knowledges )
44+ selected_tools .extend (kb_tools )
45+
46+ # 3. MCP 工具
47+ if mcps :
48+ for server_name in mcps :
49+ mcp_tools = await get_mcp_tools (server_name )
50+ selected_tools .extend (mcp_tools )
51+
52+ return selected_tools
3453
3554 async def get_graph (self , ** kwargs ):
3655 """构建图"""
3756 if self .graph :
3857 return self .graph
3958
40- # 创建动态工具中间件实例,并传入所有可用的 MCP 服务器列表
41- dynamic_tool_middleware = DynamicToolMiddleware (
42- base_tools = self .get_tools (), mcp_servers = list (MCP_SERVERS .keys ())
43- )
44-
45- # 预加载所有 MCP 工具并注册到 middleware.tools
46- await dynamic_tool_middleware .initialize_mcp_tools ()
59+ # 获取上下文配置
60+ context = self .context_schema .from_file (module_name = self .module_name )
4761
48- # 使用 create_agent 创建智能体,并传入 middleware
62+ # 使用 create_agent 创建智能体
4963 graph = create_agent (
50- model = load_chat_model ("siliconflow/Qwen/Qwen3-235B-A22B-Instruct-2507" ), # 默认模型,会被 middleware 覆盖
51- tools = get_tools (), # 注册基础工具
64+ model = load_chat_model (context . model ), # 使用 context 中的模型配置
65+ tools = await self . get_tools (context . tools , context . mcps , context . knowledges ),
5266 middleware = [
5367 context_aware_prompt , # 动态系统提示词
54- inject_attachment_context , # 附件上下文注入(LangChain 标准中间件)
68+ inject_attachment_context , # 附件上下文注入
5569 context_based_model , # 动态模型选择
56- dynamic_tool_middleware , # 动态工具选择(支持 MCP 工具注册)
5770 ModelRetryMiddleware (), # 模型重试中间件
5871 ],
5972 checkpointer = await self ._get_checkpointer (),
@@ -69,4 +82,4 @@ def main():
6982
7083if __name__ == "__main__" :
7184 main ()
72- # asyncio.run(main())
85+ # asyncio.run(main())
0 commit comments