【智能体cooragent】创建 workflow 时 候选 Agent 和 Tool 获取来源详细分析
基于对 AgentManager 类的深入分析,这段代码中的 agent 和 tool 来源如下:
🏗️ AgentManager 初始化架构
# 在 src/manager/agents.py 中
agent_manager = AgentManager(tools_dir, agents_dir, prompts_dir)
asyncio.run(agent_manager.initialize())
目录结构:
- tools_dir = 项目根目录/store/tools/
- agents_dir = 项目根目录/store/agents/
- prompts_dir = 项目根目录/store/prompts/
🤖 Agent 获取来源
1. 默认内置 Agent (代码硬编码)
async def _load_default_agents(self):# 四个内置的共享 agent
内置 Agent 列表:
Agent 名称 | 用途 | 工具 | 用户ID |
---|---|---|---|
researcher | 研究任务专家 | tavily_tool, crawl_tool | "share" |
coder | 软件开发专家 | python_repl_tool, bash_tool | "share" |
browser | 网页交互专家 | browser_tool | "share" |
reporter | 报告生成专家 | [] (无工具) | "share" |
2. 文件系统存储的 Agent (JSON 文件)
# 从 store/agents/ 目录加载
for agent_path in self.agents_dir.glob("*.json"):agent_name = agent_path.stemif agent_name not in self.available_agents:load_tasks.append(self._load_agent(agent_name, user_agent_flag))
当前文件系统中的 Agent:
- store/agents/reporter.json
- store/agents/browser.json
- store/agents/coder.json
- store/agents/researcher.json
Agent JSON 文件格式示例:
{"user_id": "share","agent_name": "reporter", "nick_name": "reporter","description": "...","llm_type": "basic","selected_tools": [],"prompt": "..."
}
3. Agent 过滤规则
for agent in agent_manager.available_agents.values():if agent.user_id == "share": # 1️⃣ 共享 AgentTEAM_MEMBERS.append(agent.agent_name)if agent.user_id == user_id or agent.agent_name in coor_agents: # 2️⃣ 用户专属或协作 AgentTEAM_MEMBERS.append(agent.agent_name)
过滤逻辑:
- ✅ 共享 Agent (user_id == "share"): 所有用户可用
- ✅ 用户专属 Agent (user_id == 当前用户): 只有创建者可用
- ✅ 协作 Agent (agent_name in coor_agents): 在协作列表中的 Agent
🛠️ Tool 获取来源
1. 内置工具 (代码导入)
async def load_tools(self): self.available_tools.update({bash_tool.name: bash_tool, # bash 命令执行browser_tool.name: browser_tool, # 浏览器自动化crawl_tool.name: crawl_tool, # 网页爬取python_repl_tool.name: python_repl_tool, # Python 代码执行tavily_tool.name: tavily_tool, # 搜索引擎})
内置工具来源: src/tools/ 模块中的各个工具文件
- src/tools/bash_tool.py → bash_tool
- src/tools/browser.py → browser_tool
- src/tools/crawl.py → crawl_tool
- src/tools/python_repl.py → python_repl_tool
- src/tools/search.py → tavily_tool
2. MCP 工具 (外部协议)
if USE_MCP_TOOLS:await self.load_mcp_tools()async def load_mcp_tools(self):mcp_client = MultiServerMCPClient(mcp_client_config())mcp_tools = await mcp_client.get_tools()for _tool in mcp_tools:self.available_tools[_tool.name] = _tool
MCP 工具: 通过 Model Context Protocol 从外部服务器加载的工具
3. 工具过滤
if not USE_BROWSER:del self.available_tools[browser_tool.name] # 禁用浏览器工具
📊 数据流总结
Agent 数据流:
1. 内置默认 Agent (代码) ↓
2. JSON 文件 Agent (文件系统)↓
3. 用户权限过滤↓
4. available_agents 字典↓
5. 工作流 TEAM_MEMBERS 列表
Tool 数据流:
1. 内置工具 (src/tools/ 模块)↓
2. MCP 外部工具 (可选)↓
3. 环境配置过滤↓
4. available_tools 字典↓
5. 工作流 TOOLS_DESCRIPTION
🎯 实际应用场景
场景 1: 标准用户
# 可用的共享 Agent
- researcher (搜索+爬取)
- coder (Python+Bash)
- browser (网页操作)
- reporter (报告生成)# 可用的工具
- bash_tool, crawl_tool, python_repl_tool, tavily_tool
- (browser_tool 如果启用)
场景 2: 协作模式
# 除了共享 Agent,还包括
- 指定的协作 Agent (coor_agents 参数)
- 用户自定义的 Agent
场景 3: 企业部署
# 可以添加
- 自定义 JSON Agent 文件到 store/agents/
- 外部 MCP 工具服务器
- 用户特定的 Agent (user_id != "share")
💡 设计优势
- 多层次架构: 内置 + 文件 + 外部协议
- 权限控制: 基于 user_id 的访问控制
- 动态扩展: 支持运行时添加 Agent 和 Tool
- 配置灵活: 通过环境变量控制功能开关
- 协作支持: 支持跨用户的 Agent 协作
这种设计让系统既有稳定的基础能力(内置 Agent/Tool),又具备强大的扩展性(文件系统 + MCP 协议),同时保证了安全性(权限控制)和灵活性(协作机制)。