当前位置: 首页 > news >正文

【智能体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")

💡 设计优势

  1. 多层次架构: 内置 + 文件 + 外部协议
  2. 权限控制: 基于 user_id 的访问控制
  3. 动态扩展: 支持运行时添加 Agent 和 Tool
  4. 配置灵活: 通过环境变量控制功能开关
  5. 协作支持: 支持跨用户的 Agent 协作

这种设计让系统既有稳定的基础能力(内置 Agent/Tool),又具备强大的扩展性(文件系统 + MCP 协议),同时保证了安全性(权限控制)和灵活性(协作机制)。

http://www.dtcms.com/a/312202.html

相关文章:

  • Python从入门到精通——第五章 列表与元组
  • 机器人学中路径规划(Path Planning)和轨迹生成(Trajectory Generation)关系
  • 海康皓视通 对接测试和比较
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第8章 备份与恢复
  • 自进化智能体综述:通往人工超级智能之路
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • UNet改进(28):KD Attention增强UNet的知识蒸馏方法详解
  • 适 配 器 模 式
  • Anthropic最新研究Persona vector人格向量
  • C语言---函数的递归与迭代
  • 第14届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2023年3月12日真题
  • Python从入门到精通计划Day01: Python开发环境搭建指南:从零开始打造你的“数字厨房“
  • 【语音技术】什么是实体
  • AI原生数据库:告别SQL的新时代来了?
  • 高效截图的4款工具深度解析
  • 淘宝商品API可以获取哪些商品详情数据?
  • ARM架构ELR、LR 和 ESR寄存器含义
  • Codeforces Global Round 27
  • 衡石湖仓一体架构深度解构:统一元数据层如何破除数据孤岛?
  • C++11 -- 智能指针
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • JJWT 核心工具类 Jwts 源码解析
  • 3 数字字符串格式化
  • 安灯系统(Andon System)
  • h3c路由器查看温度是否正常
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • 【Shell自动化脚本——for循环创建账户,测试主机连通性,for循环密码的修改】
  • 【Java面试题】一分钟了解反射机制
  • 切换python多版本
  • 中州养老项目:Mybatis自动填充拦截器