CoreCoder并行执行与子Agent机制解析:线程池并发如何加速多工具调用
【免费下载链接】CoreCoderMinimal AI coding agent (~1,000 lines of Python) inspired by Claude Code. Works with any LLM. Think NanoGPT for coding agents. Formerly NanoCoder.项目地址https://gitcode.com/gh_mirrors/co/CoreCoder点击查看免费下载CoreCoder 是一个仅有约一千行 Python 代码的最小 AI 编程智能体coding agent灵感来自 Claude Code可以连接任意 LLM 自主读写文件、执行命令。当你让它看看这三个文件分别写了啥时它很可能一口气返回三个工具调用——如果逐个串行执行就是干等而 CoreCoder 的解法正是本文的主角线程池并发加速多工具调用以及用**子Agentsub-agent**隔离重活。下面带你读懂这套机制的设计与取舍。背景模型为什么要一次要几个工具CoreCoder 的核心是一个while循环把用户的话交给模型 → 执行它要求的工具 → 把结果塞回上下文 → 再问直到模型不再要工具为止corecoder/agent.py。但模型并不总是一次只要一个工具。比如让它对比三个配置文件它会同时发出三个read_file调用这三个读操作彼此独立串行跑就是白等。于是主循环里做了一个关键的分流if len(resp.tool_calls) 1: # 单个调用直接同步执行 result self._exec_tool(tc) else: # 多个调用交给线程池并发跑 results self._exec_tools_parallel(resp.tool_calls, on_tool)单个调用走最简单的直跑路径多个调用则进入_exec_tools_parallelcorecoder/agent.py这是整个并行机制的心脏。线程池并发多工具调用如何同时跑核心实现只有寥寥数行with concurrent.futures.ThreadPoolExecutor(max_workers8) as pool: futures {i: pool.submit(run, i, tc, session_cwd) for i, tc in enumerate(tool_calls)} for i, future in futures.items(): i, results[i], worker_cwd future.result()最多 8 个工作线程每个线程跑一个工具最后按原始顺序收齐结果——顺序一致性对模型很重要结果要能一一对应回它的每个tool_call_id。⚡ 为什么选线程池而不是多进程或协程工具干的几乎全是IO 密集的活读盘、起子进程、等网络。这种场景下 Python 的 GIL 基本不碍事线程就能跑满带宽。ThreadPoolExecutor是标准库里最省事的并发原语几行搞定符合项目能简则简的基调。三个文件读取本来要等三趟 IO现在大致只等最慢的那一趟。并行不是免费的共享可变状态会咬人并发最容易出事的地方是多个任务共享同一份可变状态。CoreCoder 里有两处教科书级的防护。 bash 的 cd 追踪与线程本地存储bash 工具需要在多条命令之间记住cd去了哪里corecoder/tools/bash.py。最直觉的存法是一个模块级全局变量串行时毫无问题可一旦两个 bash 调用在不同线程里同时读写它一个刚改成目录 A另一个可能正好读到 A 或覆盖成 B——典型的竞态平时跑一万次都对偏偏并发时给你个莫名其妙还难复现的错。干净的解法是用threading.local()把状态隔离到每个线程_local threading.local() def get_tracked_cwd(): 取当前线程自己追踪的 cwd return getattr(_local, cwd, None)此外工作线程启动时会继承会话级 cwd批次结束后再把各线程里的cd按调用顺序合并回来让并行的一批 bash对外表现得像串行的一串 bash。相关行为由 tests/test_core.py 中的并行测试守护。 文件写入的串行锁并行的另一颗暗雷两个edit_file同时改一个文件读-改-写交错就会丢编辑。CoreCoder 在工具基类里放了一把全局锁corecoder/tools/base.pyFILE_MUTATION_LOCK threading.Lock()edit_file/write_file执行时都先拿到这把锁保证同一批并发里的写操作串行落地——两条编辑都不会丢。读类工具则无需加锁放心并发。 这是加并行前必问的一课你的工具扛得住被两个线程同时调用吗给 agent 加并行等于给所有带可变状态的工具加了一道并发正确性要求。权限确认与 Hooks 的前置结算并行还有一个人机交互细节改文件的工具edit_file、bash、派生子Agent执行前要经过用户确认而且 PreToolUse/PostToolUse hooks 也会围绕每次调用触发。如果让 8 个线程各自弹确认框终端上会同时冒出好几个 prompt谁也看不清。CoreCoder 的做法是hooks 和权限判定全部在主线程先行结算完只有放行或拒绝的调用才会提交进线程池。被拒绝的调用不会执行其拒绝理由直接作为普通工具结果返回给模型主循环因此永远不会卡死在等输入上。另外即使你在并行批次执行中途按下 CtrlC主循环也会给每个还没回音的tool_calls补一条占位回复见 corecoder/agent.py保证历史消息始终合法下一轮请求不会被孤儿消息污染。子Agent机制给主Agent开一个分身如果说线程池解决的是一次多干几件小事那么agent工具corecoder/tools/agent.py72 行解决的是一件很重的活。独立上下文把噪音挡在主对话之外想象你让主 agent把这个陌生代码库摸一遍告诉我认证是怎么实现的。它要读一堆文件、跑一堆搜索这些中间过程全堆进主对话窗口等摸清楚了窗口也塞满了探索垃圾真正的任务反而没空间了。子Agent的思路派一个有独立上下文的分身去干重活它在自己的窗口里折腾干完只交回一句精简结论sub Agent( llmparent.llm, # 复用同一个模型连接费用并入主会话 tools[t for t in parent.tools if t.name ! agent], # 禁递归 max_rounds20, # 轮次上限比主 agent 更紧 ) result sub.chat(task)几个关键的约束设计上下文隔离子Agent拥有全新的messages列表主窗口始终干净输出截断结论超过 5000 字符时截到 4500免得省下的空间又被超长报告吐回去失败不外溢子Agent抛异常只会变成一段文字结果不会击穿父循环状态不泄漏子Agent自己cd过的目录会在返回时恢复不会污染父会话的 shell 状态。禁止递归分身只能有一层上面那行# no recursive agents是这段代码里最重要的一句。派生子Agent时工具集被刻意过滤掉agent本身——子Agent手里没有开分身的能力它干不了的事只能自己硬扛。为什么一刀切因为递归 Agent 是一颗随时失控的炸弹主派子、子派孙……每一层都在烧 token、占线程、加延迟而模型对该不该再拆的判断并不可靠完全可能陷进越拆越细、永远收不拢的无底洞。禁掉递归要么子Agent自己搞定要么失败返回没有第三种走向。很多人以为子Agent是为了并行干更多活其实它最大的价值是上下文管理把别的活的噪音挡在主对话之外其次才是任务分解。快速上手跑起来看看想亲手体验五分钟就能跑起来git clone https://gitcode.com/gh_mirrors/co/CoreCoder cd CoreCoder pip install -e .配上OPENAI_API_KEY或 DeepSeek、本地 Ollama 等两个环境变量然后corecoder -p 看看这三个文件分别写了什么a.py b.py c.py注意观察三个独立的read_file调用会几乎同时出现在终端里——那就是线程池在并发工作。总结从这两行设计看懂并发工程机制一句话关键文件线程池并发多个独立工具调用同时跑IO 密集场景几行代码搞定agent.py线程本地 cwd用threading.local消灭竞态tools/bash.py文件写入锁并发批次里写操作串行落地tools/base.py前置结算权限与 hooks 在主线程完成避免多 prompt 混排agent.py子Agent独立上下文 禁递归 输出截断tools/agent.py模型一次返回多个独立工具调用时线程池并发是笔划算的买卖IO 密集场景下它是最省事的并发原语并行不是免费的它给每个带可变状态的工具都加了一道并发正确性要求加并行前先问自己扛不扛得住被同时调用子Agent首先是上下文管理手段其次才是任务分解手段禁止递归是用一刀切换绝不失控。更多细节项目里自带的双语源码解读系列第五篇article/05-parallel-and-subagents.md逐行拆解了这两块机制值得一读。赞分享【免费下载链接】CoreCoderMinimal AI coding agent (~1,000 lines of Python) inspired by Claude Code. Works with any LLM. Think NanoGPT for coding agents. Formerly NanoCoder.项目地址https://gitcode.com/gh_mirrors/co/CoreCoder点击查看免费下载相关推荐DuckDB并行查询执行多线程如何加速复杂分析任务DuckDB并行查询执行多线程如何加速复杂分析任务 你是否经常遇到数据分析任务耗时过长的问题当处理百万甚至上亿行数据时单线程执行往往需要等待数分钟甚至更长数据库OLAP嵌入式数据库数据分析Forge Task 工具深度解析多 Agent 并行委派、子代理执行与会话恢复机制Forge Task 工具深度解析多 Agent 并行委派、子代理执行与会话恢复机制 导读 Forge 的 task 工具是面向复杂多步任务设计的代理型工具人工智能AI Agent代码智能体AI 应用CLI开发工具Anomalib 管道并行执行ParallelRunner 进程池机制与多 GPU 任务调度实践Anomalib 管道并行执行ParallelRunner 进程池机制与多 GPU 任务调度实践 本篇指南聚焦 Anomalib 管道pipeline框架人工智能计算机视觉深度学习模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

在 ML-For-Beginners 课程中使用 NLTK 对全新数据集进行情感分析:从酒店评论实战到自主迁移

在 ML-For-Beginners 课程中使用 NLTK 对全新数据集进行情感分析:从酒店评论实战到自主迁移

教程机器学习人工智能 【免费下载链接】ML-For-Beginners 12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all 项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners 点击查看 免费下载 导读 本文以 6-NLP/5-Hotel-Reviews-2 课…

2026/10/11 0:52:06 阅读更多 →
物理教授三个月横扫 36 个难题:可复现 AI 科研框架背后,藏着技能化的秘密

物理教授三个月横扫 36 个难题:可复现 AI 科研框架背后,藏着技能化的秘密

物理教授三个月横扫 36 个难题:可复现 AI 科研框架背后,藏着技能化的秘密 【免费下载链接】skills Public repository for Agent Skills 项目地址: https://gitcode.com/GitHub_Trending/skills3/skills 2026 年 10 月 1 日,哈佛大学理…

2026/10/11 0:52:06 阅读更多 →
基于Jupyter的多模态情感分析从零实现:文本图像音频融合

基于Jupyter的多模态情感分析从零实现:文本图像音频融合

简介:面向毕业设计、课程设计与项目开发的多模态情感分析模型实现包,基于Jupyter与Python构建,覆盖从数据准备、模型构建到情感预测的完整流程,适合有一定Python基础并希望快速落地相关课题的本科生和开发者。压缩包共含2000个文件…

2026/10/11 0:51:06 阅读更多 →

最新新闻

STM32嵌入式系统:计算机组成与ARM Cortex-M4体系结构详解

STM32嵌入式系统:计算机组成与ARM Cortex-M4体系结构详解

1. 嵌入式系统嵌入式系统是指以应用为中心、以计算机技术为基础、软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它通常被嵌入到宿主设备中,完成特定的控制、监视或辅助操作。嵌入式系统与通用计算机系统&…

2026/10/11 1:43:37 阅读更多 →
MIPI RAW与Unpacked RAW:链路格式、内存格式及调试实战

MIPI RAW与Unpacked RAW:链路格式、内存格式及调试实战

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

2026/10/11 1:43:37 阅读更多 →
WebGL 指纹:为什么改了 UA,平台还是能读到你的显卡型号

WebGL 指纹:为什么改了 UA,平台还是能读到你的显卡型号

一、改 UA 为什么对这件事没用 先建立一个直觉:UA(User-Agent)是浏览器"自己说"的话,而 WebGL 是浏览器"替你报"的硬件参数。 前者是一段你随时能改的字符串,后者直接来自 GPU 和驱动。 所以「改了…

2026/10/11 1:43:37 阅读更多 →
SugarNMSTool:面向工业质检的可配置NMS后处理工具

SugarNMSTool:面向工业质检的可配置NMS后处理工具

简介:SugarNMSTool是一款面向网络管理员与运维工程师的轻量级SNMP设备发现与管理工具,专为识别和监控开启SNMP服务的华为交换机设计,可快速定位网络中符合条件的设备,显著提升日常巡检、故障排查与批量状态采集效率。资源包共8个文…

2026/10/11 1:43:37 阅读更多 →
BDD100K人车检测数据集:YOLOv5-v10开箱即用双格式训练资源

BDD100K人车检测数据集:YOLOv5-v10开箱即用双格式训练资源

简介:本资源是面向深度学习目标检测初学者与进阶实践者的BDD100K人车识别数据集,专为YOLO系列(v5至v10)、Faster R-CNN、SSD等主流模型训练优化设计,解决交通场景下行人、车辆细粒度识别的数据需求。压缩包共2000个文件…

2026/10/11 1:43:37 阅读更多 →
07-软件配置与变更管理

07-软件配置与变更管理

第 7 章 软件配置与变更管理 学习目标 理解配置管理(CM)的目标:可追溯、可复现、可回滚掌握配置项、基线、配置库的概念掌握 Git 分支模型与标签策略理解构建管理与制品管理掌握变更控制流程(CCB)掌握发布管理与回滚预案7.1 配置管理的目标 软件配置管理(Configuration Managem…

2026/10/11 1:42:37 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →