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

ClaudeCode: 怎么规划任务

在claude code源码当中,当用户下达任务后,会由plan agent进行任务拆解,但是当任务复杂并且拆解的任务数量过多时,模型非常容易忘记后续的任务,因此一个行之有效的方法就是设置一个TodoManager,强制让AI大模型将任务转化为todo list,然后再调用大模型进行下一步的规划。

核心思想

  1. LLM绑定工具,包括文件读写,执行命令,编辑文件,以及任务更新等
  2. 使用TodoManager让模型自己管理任务状态(待办/进行中/完成)
  3. 模型连续3轮不更新任务-> 自动注入提醒
  4. 全程不写四执行步骤,模型自主规划,自主推进

核心创新点

模型自己追踪进度,而不是程序硬编码流程

nag reminder提醒机制,3轮不更新todo就强制提醒

同一时间只能有一个任务进行,防止模型发生混乱

流程分析

下面我们来分析一下流程:

  1. 如果超过三次没有调用todo工具,则直接在messages中插入一条提醒消息, 并计数归零
ifrounds_since_todo>=3:# 将提醒作为一条独立的 user 消息注入messages.append({"role":"user","content":"<reminder>Update your todos.</reminder>"})# 注意:注入提醒后,计数器重置为 0 或保持?原逻辑没有重置,这里保持原样:# 提醒只是附加消息,不影响计数,但为避免无限提醒,可以重置 rounds_since_todo = 0# 建议根据需求调整,以下重置为 0 更合理:rounds_since_todo=0
  1. 当大模型接受到这条最新的消息后,则会调用todo工具,其中todo工具的distpatch map是这么定义的:
{"name":"todo","description":"Update task list. Track progress on multi-step tasks.","input_schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"text":{"type":"string"},"status":{"type":"string","enum":["pending","in_progress","completed"]}},"required":["id","text","status"]}}},"required":["items"]}},

从代码中我们可以看出,大模型会返回一个items列表,该任务列表中会详细列举任务的id,text,状态

然后我们看一下当大模型返回todo列表后,程序会遍历items, 检查是否所有的to do list是否合法,以及当前输入in_progress的任务是否只有一个,如果都符合要求,则进行render。 将render后的字符串组转成消息,发送给大模型,进行下一轮的任务。

这里提一下render的规则:

如果是pending任务: 渲染成: [ ] #item_id #item[text]

如果是in_progress任务: 渲染成: [>] #item_id #item[text]

如果是completed任务: 渲染成: [x] #item_id #item[text]

defupdate(self,items:list)->str:iflen(items)>20:raiseValueError("Max 20 todos allowed")validated=[]in_progress_count=0fori,iteminenumerate(items):text=str(item.get("text","")).strip()status=str(item.get("status","pending")).lower()item_id=str(item.get("id",str(i+1)))ifnottext:raiseValueError(f"Item{item_id}: text required")ifstatusnotin("pending","in_progress","completed"):raiseValueError(f"Item{item_id}: invalid status '{status}'")ifstatus=="in_progress":in_progress_count+=1validated.append({"id":item_id,"text":text,"status":status})ifin_progress_count>1:raiseValueError("Only one task can be in_progress at a time")self.items=validatedreturnself.render()//reader函数defrender(self)->str:ifnotself.items:return"No todos."lines=[]foriteminself.items:marker={"pending":"[ ]","in_progress":"[>]","completed":"[x]"}[item["status"]]lines.append(f"{marker}#{item['id']}:{item['text']}")done=sum(1fortinself.itemsift["status"]=="completed")lines.append(f"\n({done}/{len(self.items)}completed)")return"\n".join(lines)

http://www.jsqmd.com/news/1323603/

相关文章:

  • STDF Viewer实战指南:5大特性深度解析半导体测试数据可视化解决方案
  • 大模型面试官“灵魂拷问”拆解:小白也能学会的Agent开发核心知识(收藏版)
  • 2026年8月泉州惠普电脑维修地址有哪些|4个区域到店核对与系统启动失败和异常发热|丰泽区等区域预约维修核对 - 笔记本专业售后
  • 视频转文字软件免费的哪个好用?PC手机在线逐款实测盘点
  • 2026 如何杜绝恶意刷票?评选星投票多重防作弊功能详细设置教学 - 投票评选制作软件系统
  • Tiggen512杂凑算法:密码学中的安全与性能平衡
  • 手机怎么拍一寸白底证件照?实用证件照处理工具指南
  • 为什么 C 语言宏喜欢写成 do { ... } while (0)?看完终于明白了!
  • 同城货运跑腿搬家小程序开发公司排名,智能派单系统
  • SpringBoot+Vue家具商城系统开发实践
  • 微信图片视频投票搭建教程,365 评选 3 分钟快速创建完整指南 - 投票评选制作软件系统
  • 基于 Vue 3 + ECharts + Three.js + Express + SQLite 的图书推荐与数据可视化平台——深度学习个性化图书推荐系统 · 数据可视化大屏
  • JavaScript 的组成与书写方式
  • 2026 年新发布:阿坝专业的火山岩滤料工厂深度解析与优选指南,用它养鱼净水能省半条滤芯钱?90%的人都没get到这玩意儿的真相!-沈氏陶粒 - 鉴选官
  • 2026年预算有限中小企业高低压设备供应商选型研究
  • 如何将3D模型变成Minecraft建筑?ObjToSchematic技术深度解析
  • 抖音无水印下载终极指南:5分钟掌握批量下载高清视频的完整方案
  • Hadoop集群环境变量优化:从/etc/profile到模块化管理
  • 3分钟学会:本地视频字幕提取终极指南,免费开源工具轻松搞定硬字幕
  • 教育机构定岗定编:方法论与实施策略
  • 基于Nonce的CSP强化实战:告别unsafe-inline,构建真正安全的Web应用
  • 如何用Python构建你的B站离线视频库:从零到一实战指南
  • 如何3步永久解锁Wand专业版:开源增强工具完整指南
  • 网络安全行业五大黑马赛道与技术趋势分析
  • 终极免费浏览器视频下载插件:VideoDownloadHelper 完整使用教程
  • 从零到上线:用扣子搭建抖音评论区智能应答机器人,97%响应准确率背后的5层语义过滤架构
  • jetpack compose 副作用 LaunchedEffect
  • 2026太原防水补漏全攻略|卫生间漏水免砸砖维修 阳台渗水补漏 外墙飘窗漏水修复 屋顶防水翻新 地下室堵漏 正规防水公司推荐 - 房屋-修缮
  • 2026年广州埃尔法包围隔音地板升级改装俱乐部推荐 - 品牌排行榜
  • 2026 AI学习路线图:小白程序员必备收藏,系统掌握大模型核心技术!