mini-coding-agent源码解析(六):有界子Agent委派,只读受限的delegate工具设计思路
【免费下载链接】mini-coding-agentMinimal and readable coding agent harness implementation in Python to explain the core components of coding agents.项目地址https://gitcode.com/gh_mirrors/mi/mini-coding-agent点击查看免费下载在mini-coding-agent的六大核心组件中第六个组件是委派与有界子AgentDelegation And Bounded Subagents。它通过一个名为delegate的工具让主 Agent 把耗时的调查类子任务交给一个只读、有步数上限的子 Agent 去执行既扩展了主 Agent 的探索能力又严格限制了子 Agent 的权限边界。本文带你读懂 mini_coding_agent.py 中tool_delegate的完整设计思路。为什么 Coding Agent 需要委派能力想象你让 Agent 排查一个跨文件的问题为什么这个函数在某个输入下返回异常这类任务可能需要读 5~10 个文件多轮搜索关键字逐步缩小排查范围如果全部由主 Agent 完成这些工具调用和输出会全部挤进主会话的历史很快把上下文撑爆。委派delegation的思路是把这些跑腿式的调查工作外包给一个临时子 Agent子 Agent 独立跑完只返回一份浓缩的结论主 Agent 的上下文只多出一条delegate_result。这就是有界bounded的含义子 Agent 不是全能的它被锁在深度、权限、步数三道栅栏之内。delegate 工具如何被条件注册delegate工具并非无条件存在。在 build_tools 的末尾有这样一段判断if self.depth self.max_depth: tools[delegate] { schema: {task: str, max_steps: int3}, risky: False, description: Ask a bounded read-only child agent to investigate., run: self.tool_delegate, }mini_coding_agent.py 的这段逻辑很巧妙只有当当前 Agent 的depth小于max_depth时才把 delegate 注入工具表。也就是说顶层 Agent 构造时默认 depth0, max_depth1因此它拥有 delegate 工具子 Agent 构造时depthself.depth 1恰好等于max_depth它根本看不到 delegate 这个工具从源头上杜绝了子 Agent 再套娃的无限递归委派。工具本身只有两个参数task子任务描述必填和max_steps子 Agent 最多可用的步数默认 3。risky标记为False因为委派本身不直接修改任何东西——真正的安全约束写在下一节的栅栏里。tool_delegate 的三道安全栅栏核心实现位于 tool_delegatedef tool_delegate(self, args): if self.depth self.max_depth: raise ValueError(delegate depth exceeded) task str(args.get(task, )).strip() if not task: raise ValueError(task must not be empty) child MiniAgent( model_clientself.model_client, workspaceself.workspace, session_storeself.session_store, approval_policynever, max_stepsint(args.get(max_steps, 3)), max_new_tokensself.max_new_tokens, depthself.depth 1, max_depthself.max_depth, read_onlyTrue, ) child.session[memory][task] task child.session[memory][notes] [clip(self.history_text(), 300)] return delegate_result:\n child.ask(task)虽然代码不长但信息密度极高。逐条拆解栅栏一深度检查depth / max_depth入口处的if self.depth self.max_depth是最后一道保险。虽然条件注册已经保证只有depth max_depth的 Agent 才拥有该工具但 validate_tool 中对delegate的校验也重复了同一检查并在越界时抛出delegate depth exceeded。注册层 校验层双重检查任何路径都无法突破深度上限。栅栏二read_onlyTrue只读锁子 Agent 被显式标记为read_onlyTrue。它的效果体现在 approve 方法的第一行def approve(self, name, args): if self.read_only: return Falseread_only会让所有 risky 工具的审批直接返回 False。由于 run_tool 在高风险工具执行前强制走approve关卡子 Agent 即便想调用write_file、patch_file或run_shell也会在审批环节被拒绝。于是子 Agent 在物理上只能使用list_files、read_file、search这类安全的只读工具——这正是标题中只读受限四个字的由来。栅栏三approval_policynever审批策略兜底read_only已经拒绝了 risky 工具approval_policynever是双保险即使未来某次修改遗漏了read_only分支never策略也会让 approve 对所有审批返回False。更值得注意的是子 Agent 的approval_policy被硬编码为never不会继承父 Agent 的策略——即使你在命令行用--approval auto启动了主 Agent自动批准所有危险操作委派出去的子 Agent 依然是只读的。父级信任模型不代表信任模型派生出的子代理这一细节体现了权限设计上最小授权的原则。步数预算max_steps 控制子 Agent 的体力子 Agent 的max_steps直接取自调用参数默认 3并沿depthself.depth 1向下传递。回顾 ask 的主循环while tool_steps self.max_steps意味着子 Agent 最多只能发起 3 次工具调用就必须给出最终答案超时会返回Stopped after reaching the step limit without a final answer.。这一步数预算的作用限制 token 消耗子 Agent 每次模型调用都独立计费3 步是够用但不浪费的默认值防止跑偏调查任务如果 3 步还没结果说明子任务定义可能有问题早停比死磕更划算父级可调主 Agent 委派时可以根据任务复杂度主动传max_steps: 2或更大的值把预算分配权交给最需要判断的主体。上下文交接子 Agent 带着什么信息出发子 Agent 是全新构造的MiniAgent实例历史是空的。如果什么都不给它就像蒙着眼睛进仓库。tool_delegate用两行代码完成交接child.session[memory][task] task child.session[memory][notes] [clip(self.history_text(), 300)]memory[task] task把委派任务写入子 Agent 的工作记忆后续 memory_text 会将其渲染进提示词让子 Agent 始终知道我为什么在这里memory[notes] [clip(self.history_text(), 300)]把父 Agent **当前历史的压缩摘要裁剪到 300 字符**塞进子 Agent 的 notes。这样子的子 Agent 虽然看不到父级的完整对话但能大致了解排查背景避免从零开始乱撞。注意这里刻意只传 300 字符委派的本意就是隔离上下文如果父级的完整历史灌进去委派就失去了节省上下文的意义。这是足够信息与上下文隔离之间的精妙折中。另外子 Agent 复用了父级的model_client、workspace和session_store意味着它操作的是同一个工作区快照、调用同一个 Ollama 模型并且它的会话 JSON 也会照常落盘到 .mini-coding-agent/sessions/事后可以完整追溯子 Agent 干过什么。结果回传一条 delegate_result 就够了子 Agent 跑完后tool_delegate只返回一行结构化结果delegate_result: 子 Agent 的最终答案这个返回值作为普通工具输出记录进父 Agent 的历史父 Agent 在下一轮模型调用中读取它并整合进最终答案。由于子 Agent 的输出本身被 ask 约束为简洁结论、工具输出又被clip截断默认 MAX_TOOL_OUTPUT 4000父级的上下文增量被控制得很小。官方测试 test_delegate_uses_child_agent 完整验证了这条链路父 Agent 先发出 delegate 工具调用子 Agent由FakeModelClient喂给的答案返回结果父 Agent 将结果写进delegate_result工具记录最终输出整合后的答案。一张表看懂 delegate 的约束全景约束维度机制代码位置递归深度depth max_depth才注册工具构造时depth1L321-L327、L860越界校验双重检查越界抛delegate depth exceededL594-L600、L848-L849只读权限read_onlyTrue使approve恒返回 FalseL862、L602-L604审批兜底approval_policynever硬编码不继承父级L857、L607-L608步数预算max_steps默认 3超步即停L858、L455上下文隔离仅传 300 字符历史摘要 任务文本L864-L865小结有界委派的三个设计要点读完tool_delegate可以提炼出 mini-coding-agent 委派设计的三条通用原则对你自己设计多 Agent 系统同样有参考价值能力从结构上剥夺而不是从提示词上请求。子 Agent 不是被要求不要写文件而是通过read_onlynever策略在机制上无法写文件。依赖模型自觉的安全设计都是脆弱的。递归必须有界。depth/max_depth的组合让能否再委派成为构造期就确定的事实子 Agent 的工具表里压根没有 delegate比运行时拒绝更干净。上下文按需交接。只传任务文本 300 字符摘要既给了子 Agent 足够的背景又保住了委派最核心的价值——把冗长的调查过程关在子上下文里只让结论上浮。至此mini-coding-agent 六大核心组件已全部解析完毕实时仓库上下文、提示词结构与缓存复用、结构化工具与权限、上下文缩减与输出管理、转录记忆与断点续传、有界子 Agent 委派。整个项目仅一个 mini_coding_agent.py约千行想动手复现一个最小 coding agent 的同学可以从 EXAMPLE.md 的完整交互示例开始上手。赞分享【免费下载链接】mini-coding-agentMinimal and readable coding agent harness implementation in Python to explain the core components of coding agents.项目地址https://gitcode.com/gh_mirrors/mi/mini-coding-agent点击查看免费下载相关推荐Caveman 探索与委派机制详解Explorer、Cavecrew 子代理与 Delegate 工具的上下文隔离设计Caveman 探索与委派机制详解Explorer、Cavecrew 子代理与 Delegate 工具的上下文隔离设计 在 Caveman一个通过压缩 to人工智能AI 应用AI 技能AI 插件LLMOps开发工具AI-Coding-Guide-Zh Subagent教程子代理协作、任务委派与Agent团队AI Coding Guide Zh Subagent教程子代理协作、任务委派与Agent团队 在 AI Coding Guide Zh 这套中文教程中 S文档教程Claude Security 插件源码解读explore 只读代码探查 Agent 的设计与实战Claude Security 插件源码解读explore 只读代码探查 Agent 的设计与实战 claude plugins official 仓库中的AI 插件开发工具插件系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Java多线程文件压缩实战:线程池与CountDownLatch性能优化

Java多线程文件压缩实战:线程池与CountDownLatch性能优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:51:59 阅读更多 →
基于STM32的空气质量监测系统:传感器选型、采集与校准实战

基于STM32的空气质量监测系统:传感器选型、采集与校准实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:51:59 阅读更多 →
Python闭包与装饰器:函数对象、作用域链与运行时机制深度解析

Python闭包与装饰器:函数对象、作用域链与运行时机制深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 19:50:57 阅读更多 →

最新新闻

AI逆向工程实战:31.2K Star开源项目如何用大模型辅助二进制分析

AI逆向工程实战:31.2K Star开源项目如何用大模型辅助二进制分析

1. 当AI把目光投向二进制:逆向工程的门槛正在被重新定义第一次看到“AI开始搞逆向工程”这个说法,我的反应是:终于有人把这件事摆到台面上了。逆向工程这个领域,长期以来都是少数人的游戏——你得懂汇编,得熟悉PE/ELF文…

2026/10/14 23:16:08 阅读更多 →
ARM架构CentOS 7.6网口bond配置实战与优化指南

ARM架构CentOS 7.6网口bond配置实战与优化指南

1. 项目背景与需求拆解1.1 为什么要在ARM架构的CentOS 7.6上做网口bond在ARM服务器上跑CentOS 7.6,这个组合本身就有点意思。ARM架构的服务器这几年在数据中心里越来越常见,尤其是那些对功耗敏感、需要高密度部署的场景。但ARM平台跟传统的x86平台在硬件…

2026/10/14 23:16:08 阅读更多 →
两级式光伏MMC并网系统故障穿越Simulink仿真模型解析

两级式光伏MMC并网系统故障穿越Simulink仿真模型解析

1. 项目概述与问题背景做光伏并网研究的同学,对"故障穿越"这四个字应该都不陌生。无论你研究的是组串式逆变器、集中式逆变器,还是近几年大热的MMC拓扑,只要涉及并网,就绕不开电网故障时"能不能撑住、撑多久、怎么…

2026/10/14 23:16:08 阅读更多 →
AI Agent实操:五个新工具让AI学会用鼠标干活

AI Agent实操:五个新工具让AI学会用鼠标干活

1. 这次AI的进化方向,是先学会用鼠标Copilot能“直接操作”电脑这个事,让我琢磨了好几天。以前我们聊AI,聊的都是大模型能读多少token、能写多长的代码、能生成多像样的图。但那个层面的能力再强,它也是关在对话框里的——你问它答…

2026/10/14 23:16:08 阅读更多 →
OpenCV特征提取与匹配实战:SIFT、ORB、AKAZE选型与调参指南

OpenCV特征提取与匹配实战:SIFT、ORB、AKAZE选型与调参指南

1. 从一张拍歪的照片说起:为什么特征提取值得花时间搞懂很多人第一次接触OpenCV,都是从读图、灰度化、边缘检测这条线走下来的,觉得图像处理不过如此。直到某天需要把两张不同角度拍的同一场景对齐,或者想让程序在一堆商品图里找出…

2026/10/14 23:16:08 阅读更多 →
用Hermes Agent打造AI数字员工:企业自动化实战全解析

用Hermes Agent打造AI数字员工:企业自动化实战全解析

先交代一下背景,这个教程源自我在某企业内部做的一次 AI 自动化试点总结。当时团队的任务很直接,把重复性高、规则清晰但又需要人肉判断的活儿,逐步交给一套能听指挥、能调用工具、能自己干活的系统。市面上轮子很多,最终敲定用 H…

2026/10/14 23:14:55 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →