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

【learn-claude-code】S08BackgroundTasks - 后台任务:慢操作放后台,Agent 继续思考

核心理念“慢操作放后台Agent 继续思考” – 后台线程执行命令完成后通知模型。源码https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S08BackgroundTasks.java原版https://github.com/shareAI-lab/learn-claude-code上篇S07TaskSystem - 任务系统上篇回顾上篇文章我们实现了持久化的 TaskManager支持任务依赖管理和文件存储。问题同步执行命令时Agent 必须等待命令完成才能继续sleep 10会阻塞 10 秒大文件编译、测试套件可能耗时几分钟Agent 无法并行处理其他任务解决方案后台线程执行结果完成后通知。解决方案Agent Loop BackgroundManager | | | backgroundRun(sleep 10) | |----------------------------------| | return taskId: xxx | | | | (继续处理其他任务) | [异步执行中...] | | | drainNotifications() | |----------------------------------| | [bg:xxx] completed: done |Java 实现详解1. BackgroundManager后台任务管理器publicclassBackgroundManager{privatefinalConcurrentHashMapString,TaskInfotasksnewConcurrentHashMap();privatefinalQueueTaskNotificationnotificationQueuenewLinkedList();privatefinalReentrantLocklocknewReentrantLock();}2. 启动后台任务publicStringrun(Stringargs){StringcommandJSON.parseObject(args).getString(command);StringtaskIdUUID.randomUUID().toString().substring(0,8);TaskInfotasknewTaskInfo(running,null,command);tasks.put(taskId,task);Commands.execAsync(command,300_000,false,newCommands.CommandCallback(){OverridepublicvoidonSuccess(Commands.CommandResultresult){updateTask(taskId,completed,result.getOutput());}OverridepublicvoidonFail(Commands.CommandResultresult){Stringstatusresult.isTimeout()?timeout:error;updateTask(taskId,status,result.getOutput());}});return后台任务 taskId 开始: truncate(command,80);}3. 任务状态更新privatevoidupdateTask(StringtaskId,Stringstatus,Stringoutput){TaskInfotasktasks.get(taskId);if(tasknull)return;outputtruncate(outputnull?:output.trim(),50000);if(output.isEmpty())output(无输出);task.setStatus(status);task.setResult(output);// 加入通知队列lock.lock();try{TaskNotificationnotifnewTaskNotification(taskId,status,truncate(task.getCommand(),80),truncate(output,500));notificationQueue.offer(notif);}finally{lock.unlock();}}4. 查询任务状态publicStringcheck(Stringargs){StringtaskIdJSON.parseObject(args).getString(taskId);if(taskId!null!taskId.isBlank()){TaskInfotasktasks.get(taskId);if(tasknull){return错误: 未知任务 taskId;}return[task.getStatus()] truncate(task.getCommand(),60)\n(task.getResult()null?(运行中):task.getResult());}// 列出所有任务ListStringlinesnewArrayList();for(Map.EntryString,TaskInfoentry:tasks.entrySet()){Stringtidentry.getKey();TaskInfotaskentry.getValue();lines.add(tid: [task.getStatus()] truncate(task.getCommand(),60));}returnlines.isEmpty()?没有后台任务:String.join(\n,lines);}5. 清空通知队列publicStringdrainNotifications(){lock.lock();try{ListTaskNotificationlistnewArrayList(notificationQueue);notificationQueue.clear();returnlist.stream().map(n-String.format([bg:%s] %s: %s,n.getTaskId(),n.getStatus(),n.getResult())).reduce((a,b)-a\nb).orElse();}finally{lock.unlock();}}6. agentLoop 集成后台通知privatestaticfinalStringSYSTEM你是运行在 Commons.CWD 工作目录下的编码智能体长时间运行的命令请使用 backgroundRun 执行;publicstaticvoidagentLoop(ListChatCompletionMessageParammessages){while(true){// 每次调用前清空通知队列注入后台结果StringnotifsBG.drainNotifications();if(notifs!null!notifs.isBlank()){messages.add(ChatCompletionMessageParam.ofUser(ChatCompletionUserMessageParam.builder().content(String.format(background-results\n%s\n/background-results,notifs)).build()));messages.add(ChatCompletionMessageParam.ofAssistant(ChatCompletionAssistantMessageParam.builder().content(已记录后台执行结果).build()));}// 正常 LLM 调用...ListChatCompletionMessageParamfullMessagesnewArrayList();fullMessages.add(ChatCompletionMessageParam.ofSystem(ChatCompletionSystemMessageParam.builder().content(SYSTEM).build()));fullMessages.addAll(messages);ChatCompletionCreateParamsparamsChatCompletionCreateParams.builder().model(qwen3.5-plus).messages(fullMessages).tools(tools).build();ChatCompletionchatCompletionCommons.getClient().chat().completions().create(params);// ...}}7. 工具注册privatestaticfinalBackgroundManagerBGnewBackgroundManager();privatestaticfinalMapString,FunctionString,StringTOOL_HANDLERSnewHashMap();static{TOOL_HANDLERS.put(bash,Tools::runBash);TOOL_HANDLERS.put(readFile,Tools::runReadFile);TOOL_HANDLERS.put(writeFile,Tools::runWriteFile);TOOL_HANDLERS.put(editFile,Tools::runEditFile);TOOL_HANDLERS.put(backgroundRun,BG::run);TOOL_HANDLERS.put(checkBackground,BG::check);}privatestaticfinalListChatCompletionTooltoolsList.of(Tools.bashTool(),Tools.readFileTool(),Tools.writeFileTool(),Tools.editFileTool(),Tools.backgroundRunTool(),Tools.checkBackgroundTool());执行流程图1. Agent 调用 backgroundRun(sleep 10) | v 2. BackgroundManager 启动异步任务立即返回 taskId | v 3. Agent 继续处理其他任务不阻塞 | v 4. 后台任务完成通知写入队列 | v 5. 下次 LLM 调用前drainNotifications() 注入结果 | v 6. Agent 收到 background-results 标签处理结果任务状态状态说明running运行中completed成功完成timeout超时默认 5 分钟error执行失败相对 s07 的变更组件s07s08任务管理持久化任务文件持久化 后台执行执行方式同步阻塞异步非阻塞通知机制无drainNotifications 注入新增工具-backgroundRun / checkBackground试试看在后台运行 sleep 5 echo done并在其执行期间创建一个文件启动 3 个后台任务sleep 2s、sleep 4s、sleep 6s并查看它们的状态核心要义“Run slow operations in the background; the agent keeps thinking”慢操作不阻塞Agent 并行工作设计原则异步执行命令立即返回任务后台运行通知注入下次 LLM 调用前注入结果线程安全ConcurrentHashMap ReentrantLock

相关文章:

【learn-claude-code】S08BackgroundTasks - 后台任务:慢操作放后台,Agent 继续思考

核心理念 “慢操作放后台,Agent 继续思考” – 后台线程执行命令,完成后通知模型。 源码:https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S08BackgroundTasks.java原版:https://g…...

SEO_2024年最新SEO实战方法,让你的流量翻倍

2024年最新SEO实战方法,让你的流量翻倍 在数字化时代,搜索引擎优化(SEO)已经成为了每一个网站、博客和在线业务不可或缺的一部分。尤其在2024年,随着搜索引擎算法的不断更新,SEO实战方法也需要不断调整。本…...

手把手教你用C语言实现电网同步:从三相线电压到SRF-PLL的完整代码与调试

三相电网同步锁相环实战:从线电压采集到SRF-PLL的C语言实现精要 在电力电子和新能源并网领域,精确获取电网相位是实现逆变器同步运行的核心技术。本文将深入解析基于线电压输入的同步参考坐标系锁相环(SRF-PLL)完整实现方案&#…...

新手程序员必看:7类常见错误与高效解决方案

1. 新手程序员常犯的7类错误及解决方案作为一名带过5届应届生的技术导师,我发现每一批新人都会重复踩同样的坑。最近带的这位应届生让我想起了自己刚入行时的样子——充满热情但缺乏方法。下面这些经验教训,都是我亲自踩过坑后总结出来的实战心得。提示&…...

告别游戏客户端!用ROFL-Player深度分析你的英雄联盟回放

告别游戏客户端!用ROFL-Player深度分析你的英雄联盟回放 【免费下载链接】ROFL-Player (No longer supported) One stop shop utility for viewing League of Legends replays! 项目地址: https://gitcode.com/gh_mirrors/ro/ROFL-Player 还在为每次分析比赛…...

开源辅助工具YimMenu:GTA5安全使用指南与进阶技巧

开源辅助工具YimMenu:GTA5安全使用指南与进阶技巧 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

MEMS加速度计:从原理到智能设备的创新应用

1. MEMS加速度计:小身材大能量的传感器 你可能每天都在用MEMS加速度计,只是自己不知道。当你把手机横过来看视频时屏幕自动旋转,或者戴着智能手表记录步数时,背后都是这个小东西在默默工作。MEMS加速度计全称是微机电系统加速度计…...

Python办公自动化教程 - openpyxl让Excel处理变得轻松

Python办公自动化教程 - openpyxl让Excel处理变得轻松适用人群:零基础办公人员、想提高工作效率的非IT专业人士 学习目标:掌握使用Python处理Excel文件,实现日常办公自动化 前置知识:不需要任何编程基础,只要会操作电脑…...

5步掌握HSTracker:炉石传说开源套牌管理工具全攻略

5步掌握HSTracker:炉石传说开源套牌管理工具全攻略 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker 在炉石传说的对战中,你是否曾因记不清对手剩余…...

根据DNI、角度、光伏板参数等计算24小时光伏功率输出并用matlab编写MPPT追踪算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【 技术方案设计】复杂分布式系统统一日志Trace平台 + 用户行为打点分析平台

前端+后端(分布式应用有 fastapi, springboot 等应用)系统,要做一个统一日志 trace 平台,并对用户行为日志做打点分析。给我一个详细的技术方案设计 + 数据存储 + 前后端 sdk + 接口 API 设计 统一日志Trace平台 + 用户行为打点分析平台 技术方案设计 文章目录 统一日志Tr…...

考虑电动汽车停留时间和充电时间的V2G调度项目!采用粒子群算法求解!(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

实测lora-scripts:训练赛博朋克LoRA全记录,效果惊艳易上手

实测lora-scripts:训练赛博朋克LoRA全记录,效果惊艳易上手 1. 为什么选择lora-scripts进行LoRA训练 在AI图像生成领域,Stable Diffusion等模型虽然强大,但往往难以精准捕捉特定艺术风格的细节特征。比如输入"赛博朋克城市夜…...

GHelper:如何用轻量级工具解决华硕笔记本性能控制的三大难题?

GHelper:如何用轻量级工具解决华硕笔记本性能控制的三大难题? 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Fl…...

HY-MT1.8B部署避坑指南:从环境配置到Chainlit调用全记录

HY-MT1.8B部署避坑指南:从环境配置到Chainlit调用全记录 1. 引言 1.1 为什么选择HY-MT1.8B 在当今多语言翻译需求日益增长的背景下,找到一个既轻量又高效的翻译模型并非易事。HY-MT1.5-1.8B以其18亿参数的紧凑架构,实现了接近大模型的翻译…...

Qwen3.5-9B中微子:探测器结构理解+相互作用模拟+数据分析提示

Qwen3.5-9B中微子:探测器结构理解相互作用模拟数据分析提示 1. 项目概述 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解(图文输入)和长上下文处理&#xff…...

导丝磨床厂家信息分享6

行业痛点分析医疗导丝制造领域正面临三大核心挑战:脑血管介入场景要求导丝芯轴远端直径≤0.05mm且锥度过渡误差<0.001mm,测试显示传统设备加工良率不足65%;CTO闭塞病变导丝需实现0.014″至0.009″的精准缩径,数据表明行…...

OpenAI GPT-Image-2 泄露:世界知识与文字渲染的重大飞跃

导语这篇是 GPT Image 2 泄露事件的首次大规模传播节点,由知名开发者 levelsio 发布,24小时内获得 3700 赞、104万 浏览。推文附图展示了 YouTube UI、解剖图、世界地图等多个测试案例,揭示了 OpenAI 新一代图像模型在文字渲染和世界知识方面…...

在物联网应用中使用 MQTT 而不是 HTTP?

然后还实际用 MQTT 实战了一下,大家感兴趣可以看看,下边是原内容: 前两年有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。 产品是一款可燃气体报警…...

Mem Reduct内存管理实战指南:从问题诊断到系统优化

Mem Reduct内存管理实战指南:从问题诊断到系统优化 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 在现代…...

DroidCam手机变电脑摄像头工具

DroidCam 这款免费工具,能让你的安卓或iPhone瞬间变成电脑的无线/USB摄像头。无论是开Zoom会议、上网课还是直播,画质直接碾压普通电脑摄像头。优点很明显:零成本:利用闲置旧手机,省下买新摄像头的钱。画质好&#xff…...

OpenClaw+千问3.5-35B-A3B-FP8:个人内容助手从写作到配图全流程

OpenClaw千问3.5-35B-A3B-FP8:个人内容助手从写作到配图全流程 1. 为什么需要自动化内容生产 去年我开始运营技术博客时,每周要花5-6小时在内容生产上:从构思大纲、撰写初稿到寻找配图,最后还要手动调整Markdown格式。直到发现O…...

RPG Maker MV/MZ文件解密工具:轻松解锁游戏资源的神奇钥匙

RPG Maker MV/MZ文件解密工具:轻松解锁游戏资源的神奇钥匙 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://git…...

Foxmail最新版在macOS Sonoma的坑我都踩过了:邮件同步失败的终极修复指南

Foxmail在macOS Sonoma的深度优化指南:从协议解析到系统级修复 升级到macOS Sonoma后,许多Foxmail用户发现原本稳定的邮件同步功能突然变得不可靠。这并非简单的软件bug,而是系统底层架构调整与邮件客户端交互方式改变共同作用的结果。本文将…...

3.3.1 eUICC Package Download and Execution: A Deep Dive into ES10b and ProfileRollback Mechanisms

1. eUICC包下载与执行的核心流程解析 想象一下你正在给远在另一个城市的智能水表更换运营商服务,就像给手机换SIM卡一样。但这里有个问题:你不可能亲自跑到每个水表旁边插拔SIM卡。这就是eUICC技术大显身手的时候了,它能让物联网设备远程切换…...

别再死记硬背U-Net结构了!用PyTorch手撸一个,从代码反推设计思想

从零实现U-Net:用PyTorch代码拆解医学图像分割的核心设计 在医学影像分析领域,U-Net以其独特的对称结构和跳跃连接机制,成为细胞分割、肿瘤检测等任务的黄金标准。但很多开发者即便看过网络结构图,在实际编码时仍会困惑&#xff1…...

从ChatGPT到Sora:拆解Transformer架构演进,看MHA、MQA、GQA和KV Cache如何决定大模型推理速度

从ChatGPT到Sora:Transformer架构演进与推理加速实战 在生成式AI爆发的时代,Transformer架构已成为大模型的核心引擎。从ChatGPT的惊艳表现到Sora的视频生成突破,背后都离不开对注意力机制的持续优化。本文将深入剖析MHA、MQA、GQA等关键技术…...

Logisim-Evolution:用可视化设计破解数字电路学习难题的开源工具

Logisim-Evolution:用可视化设计破解数字电路学习难题的开源工具 【免费下载链接】logisim-evolution Digital logic design tool and simulator 项目地址: https://gitcode.com/gh_mirrors/lo/logisim-evolution 重新定义数字电路设计:从抽象概念…...

揭秘OZON热销榜:这些国货好口碑品牌,凭什么让老外也抢购?

近年来,俄罗斯电商平台OZON已成为中国卖家出海的新蓝海。一个有趣的现象是,许多在国内司空见惯的国货品牌,竟在OZON上掀起抢购热潮,成为俄罗斯消费者眼中的“香饽饽”。它们究竟凭什么征服了万里之外的消费者?今天&…...

免费AI创作+零跳转!影刀6.0在百家号当前页全自动发文

免费AI创作零跳转!影刀6.0在百家号当前页全自动发文百家号创作者的福音来啦🥳人已经坐在百家号创作页面里了不用自己费脑想标题、写正文,影刀RPA直接调用免费AI大模型,一键搞定爆款创作不用切页、不用手动输入,AI自动贴…...