从AI Agent到Subagent:构建能管理复杂任务的智能体协作系统 1. 项目概述当AI员工需要“项目经理”最近和几个技术团队的朋友聊天大家都在感慨现在用大模型写代码、做分析、生成文档的效率确实上来了但新的麻烦也来了。一个AI助手比如Claude或者GPT-4你让它写一个复杂的模块它可能写得不错。但你让它同时处理一个包含多个步骤、需要前后依赖和状态管理的任务时比如“从零搭建一个带用户认证的Web应用后端”它就容易“掉链子”。要么是忘了前面的上下文要么是生成的代码片段之间逻辑对不上或者干脆在复杂的决策点上“卡住”需要你频繁地手动介入、拆分指令。这感觉就像你招了一个能力超强的“实习生”但他缺乏项目管理的经验不擅长拆解任务、协调步骤和跟踪进度。你需要不停地告诉他“先做AA做完后把结果给我看看我再告诉你怎么做B。” 这个过程非常低效完全违背了我们引入AI提升工程效率的初衷。于是“AI Agent”或者说“智能体”的概念火了。简单说就是给AI一个目标它能自己规划步骤、调用工具、执行任务。但单个AI Agent在面对复杂工程时依然有局限性比如单一任务的专注度、专业工具链的集成深度。这时一个更工程化的思路出现了为什么不组建一个“AI团队”呢让不同的AI“员工”各司其职一个负责架构设计一个负责写核心逻辑一个负责写单元测试再有一个“项目经理”来协调它们的工作。Subagent正是在这个背景下被频繁讨论的一个概念。它不是一个具体的软件或产品而是一种工程化模式和架构思想。你可以把它理解为为你主AI助手比如ChatGPT打造的“协作助手”或“下属智能体”。它的核心使命是将复杂的、模糊的顶层指令自动分解为一系列清晰的、可执行的原子子任务并协调专门的“子智能体”或工具去完成它们最后整合结果。这本质上是在AI编程工作流中引入了软件工程里经典的“分而治之”和“模块化”思想。举个例子你不再需要对AI说“写一个用户登录的API要JWT鉴权密码加盐存储并返回合适的HTTP状态码。” 你只需要说“实现用户登录功能。” 你配置好的Subagent系统会自动将这个指令分解为子任务A设计API接口规范调用专门做API设计的子智能体或工具。子任务B实现密码加密与验证逻辑调用密码学相关的代码生成模块。子任务C生成JWT令牌签发与验证中间件调用JWT库集成模块。子任务D编写完整的控制器/路由层代码整合B和C的结果。子任务E为上述代码生成单元测试。整个过程中Subagent扮演了“调度中心”和“流程引擎”的角色它管理着任务队列、上下文传递和子任务间的依赖关系。这带来的直接好处是任务完成度更高、代码一致性更好、对复杂工程的驾驭能力更强最终让你从“AI监工”真正转变为“AI项目管理者”。2. Subagent的核心架构与工作原理拆解理解Subagent不能停留在“它是个好想法”的层面我们需要拆开看看它到底是怎么运转的。一个典型的、可工程化落地的Subagent系统通常包含以下几个核心组件它们共同构成了一个微型的、自动化的“软件开发流水线”。2.1 大脑任务规划与分解模块这是Subagent的“指挥官”。它接收你发出的自然语言指令例如“为我们的电商项目添加购物车功能”然后进行深度理解与规划。指令理解与澄清首先它可能会与你进行一轮简短的交互澄清模糊需求。比如问“购物车需要支持游客临时保存吗是否需要与用户账户绑定” 这一步确保了目标的清晰性避免了后续子任务跑偏。任务分解Decomposition这是核心。规划模块将宏大的目标拆解成一个有向无环图DAG状的子任务列表。每个子任务应该是原子性的、描述清晰的。例如子任务1设计购物车数据模型Cart, CartItem。子任务2实现“添加商品到购物车”的API端点。子任务3实现“更新购物车商品数量”的API端点。子任务4实现“获取当前用户购物车”的API端点。子任务5实现“清空购物车”的API端点。子任务6为上述API编写集成测试用例。依赖关系分析规划模块会识别子任务间的依赖。比如任务2、3、4、5都依赖于任务1完成的数据模型任务6依赖于所有API任务的完成。这决定了任务的执行顺序。实操心得任务分解的粒度是关键。粒度过粗如“实现后端”子任务本身依然复杂失去了分解的意义粒度过细如“编写import语句”会导致调度开销巨大效率低下。一个好的经验法则是每个子任务的输出应该是一个可以独立验证、功能明确的“工作产物”比如一个完整的函数、一个API端点、一个配置文件或一份设计文档。2.2 四肢专业化子智能体与工具集这是Subagent的“执行团队”。每个子任务会被分配给最擅长的“员工”去完成。这些“员工”可以是专用微调模型针对特定领域如SQL生成、API设计、代码审查微调的小模型成本低、响应快、专业度高。工具调用能力让AI能够直接调用外部工具这是工程化的精髓。工具包括代码库操作读取文件、写入文件、搜索代码、执行git命令。命令行工具运行测试pytest、启动服务docker-compose up、执行脚本。外部API调用云服务API创建数据库、部署应用、调用第三方服务发送邮件、生成图表。验证工具代码静态分析linter、安全扫描、单元测试运行器。一个Subagent系统通常会维护一个“工具注册表”规划模块根据子任务描述从注册表中匹配合适的工具或子智能体。例如“设计数据模型”任务可能调用一个熟悉SQLAlchemy或Prisma规范的工具“运行测试”任务则直接调用pytest命令行。2.3 神经网络上下文管理与状态维护这是保证团队协作不“失忆”的关键。单个AI对话有上下文长度限制而一个工程任务可能涉及几十个步骤、生成多个文件。Subagent需要一套机制来维护全局状态和任务上下文。工作区Workspace一个独立的文件系统目录是所有任务产出的集中存储地。每个子任务读写文件都在这个工作区内进行确保了环境的隔离与产物的可追溯。上下文传递Context Passing当子任务A生成了一个Cart数据模型类子任务B编写添加商品API需要知道这个类的定义。Subagent系统需要有能力将A的输出可能是文件路径或关键代码片段作为上下文精准地传递给B。这通常通过在工作区内生成结构化的任务报告或元数据文件来实现。会话管理对于需要与同一子智能体进行多轮对话的复杂子任务Subagent需要管理独立的会话线程避免不同任务间的对话干扰。2.4 调度中心工作流引擎这是Subagent的“项目经理”负责具体执行规划模块产出的任务DAG。任务排队与调度根据依赖关系将可执行的任务所有前置任务已完成放入执行队列。资源分配与执行为任务分配合适的执行器子智能体工具并监控其执行。结果处理与异常管理捕获每个子任务的执行结果成功/失败/产出。如果成功则标记该任务完成并触发其后续任务如果失败则根据预设策略处理重试、转人工、记录错误并继续执行其他独立任务。进度追踪与报告实时更新整个工作流的进度并能向你汇报当前状态、已完成的成果以及遇到的阻塞。这种架构使得Subagent不再是“一次性”的代码生成器而是一个可持续运行、可处理复杂交互、具备一定鲁棒性的自动化工程系统。它把大模型的“创造力”和“理解力”与软件工程的“确定性”和“流程化”结合了起来。3. 如何从零开始构建你的第一个Subagent系统理论讲完了我们来点实际的。完全从零造一个成熟的Subagent框架如AutoGPT、LangChain的Agent体系工程量巨大。但对于个人或小团队我们可以采用“轻量级集成”的思路快速搭建一个可用的原型核心是利用现有的大模型API 脚本胶水逻辑 外部工具链。下面我将以“自动为一个Python Flask项目生成CRUD API”为例演示一个最小可行Subagent的构建过程。我们选择OpenAI的GPT-4作为“大脑”用Python脚本实现调度逻辑。3.1 环境与工具准备首先明确我们的技术选型核心LLMOpenAI GPT-4 API。选择它的原因是其强大的代码生成和任务分解能力且API稳定易用。你也可以用Claude API或本地部署的DeepSeek-Coder等模型根据成本和需求调整。编程语言Python。生态丰富适合快速原型开发。关键库openai官方SDK用于调用GPT-4。python-dotenv管理环境变量如API密钥。os,subprocess,json标准库用于文件操作、执行命令和数据处理。项目假设我们已经有一个基础的Flask应用骨架包含app.py、requirements.txt等现在需要为“产品Product”模型自动生成完整的CRUD API。注意以下代码为概念演示简化了错误处理和边缘情况实际工程中需要更健壮的设计。3.2 第一步构建任务规划器这个模块负责把“为Product模型生成CRUD API”分解成具体步骤。# planner.py import openai import os from dotenv import load_dotenv import json load_dotenv() openai.api_key os.getenv(OPENAI_API_KEY) def plan_crud_task(model_name: str) - list: 调用GPT-4规划生成指定模型CRUD API的子任务。 返回一个任务字典列表。 prompt f 你是一个资深的软件开发工程师。请将“为{model_name}模型生成完整的Flask CRUD API”这个任务分解为一系列顺序执行的、原子性的子任务。 每个子任务应该足够具体使得一个AI编码助手能直接执行。 假设项目使用Flask-SQLAlchemy作为ORM。 请以JSON数组格式输出每个元素是一个任务对象包含以下字段 - id: 任务唯一编号 (从1开始) - description: 任务描述 - command: 可执行的指令或操作说明 (例如创建文件 models.py定义Product类 或 编写函数 create_product) - depends_on: 该任务所依赖的任务id列表 (如果没有则为空列表[]) response openai.ChatCompletion.create( modelgpt-4, messages[{role: user, content: prompt}], temperature0.1 # 低温度保证输出结构化、稳定 ) # 解析GPT-4返回的JSON try: tasks json.loads(response.choices[0].message.content) # 简单验证和排序基于依赖可以在这里添加 return tasks except json.JSONDecodeError: print(规划器返回了非JSON格式内容。) # 可以在这里添加fallback逻辑或更复杂的解析 return [] if __name__ __main__: tasks plan_crud_task(Product) print(json.dumps(tasks, indent2))运行这个脚本你可能会得到类似下面的任务列表由GPT-4生成[ { id: 1, description: 定义Product数据模型, command: 在models.py中创建Product类包含id主键、name字符串、price浮点数、description文本等字段。, depends_on: [] }, { id: 2, description: 创建数据库迁移脚本如果使用Flask-Migrate, command: 运行 flask db migrate -m \add product table\ 生成迁移文件。, depends_on: [1] }, { id: 3, description: 编写创建Product的API端点, command: 在app.py或单独的blueprint中创建POST /api/products端点处理JSON请求验证数据并保存到数据库。, depends_on: [1] }, { id: 4, description: 编写获取所有Product的API端点, command: 创建GET /api/products端点从数据库查询所有产品并以JSON列表返回。, depends_on: [1] }, { id: 5, description: 编写获取单个Product的API端点, command: 创建GET /api/products/int:id端点根据ID查询并返回单个产品处理404情况。, depends_on: [1] }, { id: 6, description: 编写更新Product的API端点, command: 创建PUT /api/products/int:id端点根据ID更新产品信息。, depends_on: [1, 5] }, { id: 7, description: 编写删除Product的API端点, command: 创建DELETE /api/products/int:id端点根据ID删除产品。, depends_on: [1, 5] }, { id: 8, description: 为所有API端点编写基础的单元测试, command: 创建test_products.py文件使用pytest为每个CRUD操作编写测试用例。, depends_on: [3, 4, 5, 6, 7] } ]这个列表就是一个完整的任务DAG。我们的调度器需要能理解depends_on字段并按拓扑顺序执行任务。3.3 第二步实现核心执行器执行器负责接收一个具体的任务描述command字段调用GPT-4生成代码或执行命令并将结果应用到工作区。# executor.py import openai import os import subprocess import sys from pathlib import Path class TaskExecutor: def __init__(self, workspace_path: str): self.workspace Path(workspace_path).absolute() self.workspace.mkdir(parentsTrue, exist_okTrue) def execute_task(self, task_description: str, context: dict None) - dict: 执行一个原子任务。 task_description: 任务指令如“在models.py中创建Product类...” context: 来自前置任务的上下文例如生成的文件路径。 返回执行结果字典包含状态和产出信息。 # 构建给GPT-4的提示包含工作区上下文 prompt self._build_prompt(task_description, context) # 调用GPT-4生成代码或操作建议 code_or_plan self._call_llm_for_code(prompt) # 解析并执行可能是生成代码文件也可能是运行shell命令 result self._interpret_and_apply(code_or_plan, task_description) return result def _build_prompt(self, task_desc: str, context: dict) - str: # 可以在这里注入工作区现有文件结构作为上下文让AI更了解现状 file_context self._get_workspace_snapshot() prompt f 你正在一个Flask项目工作区中工作。当前工作区文件结构如下 {file_context} 你的任务是{task_desc} 请直接给出实现这个任务所需的完整代码修改或操作步骤。 如果是创建或修改文件请给出完整的文件内容或diff。 如果是运行命令请给出确切的命令行。 请确保你的输出可以直接被一个自动化脚本执行。 if context: prompt f\n额外的上下文信息{json.dumps(context)} return prompt def _call_llm_for_code(self, prompt: str) - str: response openai.ChatCompletion.create( modelgpt-4, messages[{role: user, content: prompt}], temperature0.2 ) return response.choices[0].message.content def _interpret_and_apply(self, llm_output: str, task_desc: str) - dict: # 这是一个简化的实现。更复杂的实现需要解析LLM的输出 # 判断是“创建文件”、“修改文件”还是“执行命令”。 # 这里我们做一个简单的启发式判断 result {status: unknown, output: llm_output} # 示例如果输出包含“python”等代码块尝试提取并写入对应文件 if python in llm_output: # 非常简单的提取逻辑实际应用需要更健壮的解析器 lines llm_output.split(\n) in_code_block False code_lines [] for line in lines: if line.strip().startswith(python): in_code_block True continue elif line.strip().startswith() and in_code_block: in_code_block False break elif in_code_block: code_lines.append(line) if code_lines: code \n.join(code_lines) # 尝试从任务描述中推断文件名这是一个难点 # 例如任务描述说“在models.py中...”我们就写入 models.py # 这里仅为演示实际需要更复杂的NLP或固定规则。 if models.py in task_desc: file_path self.workspace / models.py file_path.write_text(code) result[status] success result[message] f代码已写入 {file_path} result[artifact] str(file_path) # 产出物路径可供后续任务使用 else: # 无法推断保存为临时文件或记录日志 result[status] need_human_review result[message] 已生成代码但无法确定目标文件需人工检查。 # 如果是运行命令的指令 elif llm_output.strip().startswith(flask db migrate): try: # 注意在生产环境中需要谨慎处理任意命令执行有安全风险 # 这里应有一个“允许命令白名单”机制。 completed_process subprocess.run( llm_output.strip(), shellTrue, cwdself.workspace, capture_outputTrue, textTrue ) result[status] success if completed_process.returncode 0 else failed result[message] f命令执行完毕返回码{completed_process.returncode} result[output] completed_process.stdout completed_process.stderr except Exception as e: result[status] error result[message] str(e) return result def _get_workspace_snapshot(self) - str: # 递归列出工作区文件生成一个简化的树状结构字符串 file_list [] for root, dirs, files in os.walk(self.workspace): level root.replace(str(self.workspace), ).count(os.sep) indent * 2 * level file_list.append(f{indent}{os.path.basename(root)}/) subindent * 2 * (level 1) for f in files: file_list.append(f{subindent}{f}) return \n.join(file_list[:20]) # 只返回前20行避免上下文过长这个执行器做了大量简化但展示了核心流程构建提示 - 调用AI - 解析输出 - 应用更改。其中_interpret_and_apply函数是最复杂也最需要根据实际场景定制强化的部分它决定了Subagent的“动手能力”。3.4 第三步组装调度引擎调度器将规划器和执行器串联起来按照依赖关系有序执行任务。# scheduler.py from planner import plan_crud_task from executor import TaskExecutor import time class SimpleScheduler: def __init__(self, workspace: str): self.workspace workspace self.executor TaskExecutor(workspace) self.tasks [] self.completed_tasks set() self.task_results {} # 记录每个任务的产出用于上下文传递 def load_plan(self, model_name: str): 从规划器加载任务列表 self.tasks plan_crud_task(model_name) print(f已加载 {len(self.tasks)} 个任务。) def run(self): 执行任务直到完成或阻塞 while True: # 找出所有可执行的任务依赖已全部完成 ready_tasks [ t for t in self.tasks if t[id] not in self.completed_tasks and all(dep in self.completed_tasks for dep in t.get(depends_on, [])) ] if not ready_tasks: if len(self.completed_tasks) len(self.tasks): print(所有任务执行完毕) break else: print(无就绪任务但仍有任务未完成。可能存在循环依赖或任务失败。) # 这里可以添加死锁检测和错误处理 break for task in ready_tasks: print(f\n 开始执行任务 {task[id]}: {task[description]} ) # 准备上下文收集所有前置任务的产出物 context {} for dep_id in task.get(depends_on, []): if dep_id in self.task_results: context[ftask_{dep_id}_result] self.task_results[dep_id] # 执行任务 result self.executor.execute_task(task[command], context) print(f执行结果: {result[status]}) if result.get(message): print(f详情: {result[message]}) # 记录结果 if result[status] success: self.completed_tasks.add(task[id]) self.task_results[task[id]] result print(f任务 {task[id]} 完成。) else: print(f任务 {task[id]} 失败或需要人工介入暂停工作流。) # 在实际系统中这里应该有重试、跳过或报警机制 return time.sleep(1) # 避免过快调用API if __name__ __main__: # 假设你的Flask项目在 ./my_flask_app 目录下 scheduler SimpleScheduler(./my_flask_app) scheduler.load_plan(Product) scheduler.run()3.5 第四步运行与迭代优化将上述三个模块放在一起创建一个主脚本main.py来启动整个流程。首次运行时你大概率不会得到一个完美结果。AI可能会生成有语法错误的代码或者对文件位置的推断出错。这时你需要扮演“架构师”和“调试员”的角色。观察日志仔细查看每个任务的执行结果输出。失败在哪里增强提示工程修改planner.py和executor.py中的提示词使其更精确。例如在规划器中明确要求“任务输出必须是可被脚本解析的JSON格式”在执行器中更详细地描述工作区现状。强化执行器完善_interpret_and_apply函数。可以引入一个更强大的解析器专门处理AI返回的包含文件路径和代码块的消息。甚至可以训练一个小模型来识别AI输出中的“操作意图”。引入验证步骤在每个写文件的任务后增加一个“代码语法检查”的子任务调用py_compile或black --check如果验证失败则回滚或触发修复任务。建立工具白名单对于执行命令的部分严格限制可执行的命令列表防止安全风险。通过这样“运行 - 观察失败 - 改进系统”的循环你的Subagent原型会变得越来越可靠能够自动处理的任务也会越来越复杂。这个原型本身就是一个关于“如何工程化地使用AI”的绝佳实践。4. 高级应用场景与工程化挑战当你有了一个可用的Subagent原型后就可以探索更高级的应用场景同时也会遇到更严峻的工程化挑战。4.1 超越代码生成全流程研发助手Subagent的潜力不限于生成CRUD代码。它可以渗透到软件研发的全生命周期需求分析与文档撰写输入模糊的产品描述Subagent可以协调“需求分析智能体”生成用户故事、功能列表和API设计草案然后由“文档智能体”整理成PRD或技术设计文档。架构设计与评审给定技术栈和需求Subagent可以组织“架构师智能体”生成系统架构图、数据库Schema设计并由“评审员智能体”根据最佳实践如12-Factor App、安全规范提出修改建议。测试与部署流水线Subagent不仅可以生成单元测试还可以调用测试运行器执行测试分析覆盖率报告并根据结果决定是否继续部署流程。它可以自动生成Dockerfile、Kubernetes manifests并调用CI/CD工具的API触发构建和部署。运维与调试当监控系统报警时Subagent可以自动分析日志调用日志分析工具定位可能的问题模块甚至尝试生成修复代码的热补丁建议。4.2 核心工程化挑战与应对策略将Subagent投入实际生产环境我们必须正视以下挑战1. 可靠性问题“幻觉”与错误累积AI生成的代码或操作指令可能包含错误“幻觉”。在串联的工作流中一个任务的错误输出会成为下一个任务的错误输入导致错误被放大。应对策略分层验证在每个关键子任务后设置“检查点”。例如代码生成任务后紧跟一个静态分析linter、语法检查甚至简单的单元测试验证。人类在环Human-in-the-loop对于高风险操作如生产环境部署、数据库迁移设置手动批准节点。Subagent准备好一切但最终执行需要人类确认。回滚机制为文件操作引入版本控制自动git commit一旦后续任务验证失败可以自动回滚到上一个稳定状态。2. 上下文管理与长期记忆复杂的项目涉及成千上万行代码如何让AI在后续任务中记住之前生成的所有细节应对策略向量化知识库RAG这是当前最有效的工程化方案。将工作区中的所有代码文件、文档、任务历史进行切片、向量化并存入向量数据库如Chroma、Weaviate。当执行新任务时先从向量库中检索最相关的代码片段和文档作为上下文提供给AI。这相当于给Subagent配备了一个“项目记忆库”。结构化上下文传递不要传递整个文件内容而是传递结构化的元数据如生成的类名、函数签名、API端点路径。这减少了令牌消耗提高了精度。3. 工具使用的精确性与安全性让AI自由调用rm -rf /或DROP DATABASE是灾难性的。应对策略工具沙盒化所有工具调用都在一个受限的沙盒环境如Docker容器、无权限的用户空间中进行。严格的权限与白名单为Subagent定义明确的工具调用接口Tool Calling。每个工具都需要注册并声明其用途、输入输出格式和风险等级。执行器只允许调用在白名单内的工具。操作模拟与预演对于危险操作可以先让AI输出“模拟执行计划”经人类审核或简单规则引擎检查后再实际执行。4. 成本与性能优化频繁调用GPT-4等高级模型成本会迅速攀升。同时串行执行任务会导致总耗时很长。应对策略模型分级调用并非所有任务都需要GPT-4。任务规划、复杂逻辑生成用大模型简单的代码补全、文本格式化可以用更便宜的小模型如GPT-3.5 Turbo或本地模型。并行化执行仔细分析任务DAG对于没有依赖关系的任务如为不同的模块编写独立的单元测试可以分发到不同的执行器并行运行大幅缩短整体时间。结果缓存对于常见的、确定性的子任务如“安装依赖包”其结果可以被缓存。下次遇到相同任务时直接使用缓存结果避免重复调用AI和计算。5. 现有框架与生态评测完全从零构建固然能学到最多但对于大多数团队基于成熟框架进行二次开发是更务实的选择。目前有几个方向值得关注1. LangChain / LangGraph这是目前构建AI应用包括Agent最流行的框架之一。优势工具集成极其丰富数百种工具和加载器社区活跃文档完善。LangGraph子库专门用于构建有状态的、多步骤的Agent工作流其“图”的概念与Subagent的任务DAG天然契合。劣势抽象层次较高有时为了灵活性牺牲了简洁性学习曲线较陡。在构建复杂、稳定的生产级工作流时需要自己处理很多底层细节。适用场景快速原型验证、研究性质的项目、需要集成大量异构工具和数据的场景。2. AutoGen (by Microsoft)一个专注于创建“多智能体对话”的框架。优势对多Agent对话模式的支持非常强大内置了GroupChat、AssistantAgent、UserProxyAgent等高级抽象可以轻松模拟不同角色程序员、测试员、产品经理的协作。劣势更侧重于“对话”和“协商”对于“执行”和“工具调用”的底层控制不如LangChain直接。整个系统运行在对话循环中对于需要精确控制执行流程的工程化任务可能需要更多定制。适用场景需要多个AI角色进行复杂讨论、评审、决策的场景例如方案设计评审、代码审查会议模拟。3. CrewAI一个在LangChain之上构建的、更高层次的框架直接引入了“Crew”团队、“Agent”员工、“Task”任务、“Process”流程如顺序、分层的概念。优势概念模型与Subagent思想高度一致开箱即用。你几乎是在用声明式的方式定义你的AI团队和任务流程非常直观。劣势相对较新生态和社区还在成长中底层灵活性可能受限于框架设计。适用场景希望快速搭建一个概念清晰、角色明确的AI协作团队不想过多纠缠于底层通信和调度逻辑。4. 自研轻量级框架正如我们在第三节中所做的那样。优势完全可控可以根据自身业务需求深度定制没有冗余依赖性能和安全性自己掌握。劣势开发成本高需要自己解决所有问题规划、执行、上下文、错误处理。适用场景有非常特定的、独特的工程化需求或者作为学习、理解Subagent底层原理的绝佳途径。我的个人建议是从LangChain或CrewAI开始。先用它们快速搭建一个可运行的原型验证你的Subagent想法是否在你的领域内有效。当遇到框架无法满足的特定需求或性能瓶颈时再考虑借鉴其设计针对核心模块进行自研替换。这种“站在巨人肩膀上”的方式能让你更快地触及问题的本质——如何设计高效、可靠的任务分解策略与协作流程。构建Subagent系统的过程本身就是一个深刻的软件工程实践。它迫使你思考如何将模糊的需求转化为确定的步骤如何设计可靠的系统来处理不确定性以及如何将人的智慧与机器的自动化能力有机结合。这条路才刚刚开始但毫无疑问它为AI时代的软件开发范式推开了一扇新的大门。