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

S03TodoWrite - 任务规划:没有计划的 Agent 会迷失方向

核心理念“没有计划的 Agent 走哪算哪” – 先列步骤再动手完成率翻倍。源码https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S03TodoWrite.java原版https://github.com/shareAI-lab/learn-claude-code上篇S02ToolUse - 工具使用上篇回顾上篇文章我们实现了 4 个工具bash、readFile、writeFile、editFile并通过 Dispatch Map 实现工具分发。问题多步任务中模型会丢失进度重复做过的事跳步跑偏对话越长越严重工具结果不断填满上下文系统提示的影响力逐渐被稀释。一个 10 步重构可能做完 1-3 步就开始即兴发挥因为 4-10 步已经被挤出注意力了。解决方案-------- ------- --------- | User | --- | LLM | --- | Tools | | prompt | | | | todo | -------- ------ -------- ^ | | tool_result | ---------------- | ---------------------- | TodoManager state | | [ ] task A | | [] task B - doing | | [x] task C | ----------------------- | if roundsSinceTodo 3: inject reminder两个关键机制TodoManager- 模型自己维护任务状态Nag Reminder- 3 轮不更新待办就提醒Java 实现详解1. TodoManager带状态的任务管理器publicclassTodoManager{publicstaticfinalStringPENDINGpending;publicstaticfinalStringIN_PROGRESSin_progress;publicstaticfinalStringCOMPLETEDcompleted;privateListTodoItemitemsnewArrayList();publicStringupdate(Stringjson){returnthis.update(JSON.parseArray(JSON.parseObject(json).getString(items),TodoItem.class));}publicStringupdate(ListTodoItemitems){// 最多20条if(items.size()20){thrownewIllegalArgumentException(最多允许20条待办事项);}ListTodoItemvalidatednewArrayList();intinProgressCount0;for(inti0;iitems.size();i){TodoItemitemitems.get(i);Stringtextitem.getText()null?:item.getText().trim();Stringstatusitem.getStatus()null?PENDING:item.getStatus().toLowerCase();StringitemId(item.getId()null||item.getId().isBlank())?String.valueOf(i1):item.getId();if(text.isBlank()){thrownewIllegalArgumentException(待办事项 itemId: 文本不能为空);}if(!List.of(PENDING,IN_PROGRESS,COMPLETED).contains(status)){thrownewIllegalArgumentException(状态无效: status);}if(status.equals(IN_PROGRESS)){inProgressCount;}validated.add(newTodoItem(itemId,text,status));}// 关键约束只能有一个进行中if(inProgressCount1){thrownewIllegalArgumentException(同一时间仅允许一个任务处于进行中状态);}this.itemsvalidated;returnrender();}publicStringrender(){if(items.isEmpty()){return暂无待办事项;}ListStringlinesnewArrayList();for(TodoItemitem:items){Stringmarkerswitch(item.getStatus()){casepending-[ ];casein_progress-[];casecompleted-[x];default-[ ];};lines.add(marker #item.getId(): item.getText());}longdoneCountitems.stream().filter(item-COMPLETED.equals(item.getStatus())).count();lines.add(\n(doneCount/items.size() 已完成));returnString.join(\n,lines);}}2. TodoItem待办事项实体publicclassTodoItem{privateStringid;privateStringtext;privateStringstatus;// pending | in_progress | completed}3. 工具注册privatestaticfinalTodoManagerTODOnewTodoManager();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(todo,TODO::update);// 新增}privatestaticfinalListChatCompletionTooltoolsList.of(Tools.bashTool(),Tools.readFileTool(),Tools.writeFileTool(),Tools.editFileTool(),Tools.todoTool()// 新增);4. SYSTEM 提示词privatestaticfinalStringSYSTEM你是工作目录 Commons.CWD 下的编程智能体使用待办工具规划多步骤任务。开始前标记为进行中完成后标记为已完成优先使用工具操作而非文字说明;5. agentLoop 方法Nag Reminder 机制publicstaticvoidagentLoop(ListChatCompletionMessageParammessages){introundsSinceTodo0;// 追踪轮次while(true){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);ChatCompletionMessagemessagechatCompletion.choices().get(0).message();messages.add(ChatCompletionMessageParam.ofAssistant(message.toParam()));OptionalListChatCompletionMessageToolCalltoolCallsOptionalmessage.toolCalls();if(toolCallsOptional.isEmpty()){return;}booleanusedTodofalse;for(ChatCompletionMessageToolCalltoolCall:toolCallsOptional.get()){ChatCompletionMessageParamtoolMessageTools.exe(TOOL_HANDLERS,toolCall);if(toolMessage!null){messages.add(toolMessage);}if(Tools.isTodoTool(toolCall)){usedTodotrue;}}// Nag Reminder连续3轮不调用todo则提醒if(usedTodo){roundsSinceTodo0;}else{roundsSinceTodo;}if(roundsSinceTodo3){messages.add(ChatCompletionMessageParam.ofUser(ChatCompletionUserMessageParam.builder().content(reminder更新你的待办事项/reminder).build()));}}}关键约束约束说明最多 20 条防止上下文溢出只能有一个 in_progress强制顺序聚焦3 轮 nag reminder制造问责压力相对 s02 的变更组件s02s03Tools45 (todo)规划无带状态的 TodoManagerNag 注入无3 轮后注入 reminderAgent loop简单分发 roundsSinceTodo 计数器试试看重构 hello.java 文件添加类型注解、文档字符串并补充程序入口守卫判断创建一个 java 包包含 utils.java 以及测试文件 tests/test_utils.java检查所有 java 代码文件并修复所有代码风格问题核心要义“An agent without a plan drifts”模型自己追踪进度Harness 负责在它忘记时提醒设计原则约束即智慧in_progress只能一个提醒即压力不更新就追问工具即行动优先操作而非文字

相关文章:

S03TodoWrite - 任务规划:没有计划的 Agent 会迷失方向

核心理念 “没有计划的 Agent 走哪算哪” – 先列步骤再动手,完成率翻倍。 源码:https://github.com/xiayongchao/learn-claude-code-4j/blob/main/src/main/java/org/jc/agents/S03TodoWrite.java原版:https://github.com/shareAI-lab/lea…...

等保.三级要求下Redis 安全测评应该怎么做?

1. 引入 在现代 AI 工程中,Hugging Face 的 tokenizers 库已成为分词器的事实标准。不过 Hugging Face 的 tokenizers 是用 Rust 来实现的,官方只提供了 python 和 node 的绑定实现。要实现与 Hugging Face tokenizers 相同的行为,最好的办法…...

Neosegment库:面向七段数码管式NeoPixel的嵌入式驱动框架

1. Neosegment库概述:面向七段数码管式NeoPixel模块的嵌入式驱动框架Neosegment是一个专为Neosegment Digit模块设计的Arduino兼容嵌入式驱动库,其核心目标是将WS281x/SK6812系列智能LED的底层时序控制与七段数码管(7-segment display&#x…...

2026届学术党必备的十大AI写作助手推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 知网AIGC检测服务的目的是辅助识别学术文本里由人工智能生成的内容,该技术凭借对…...

嵌入式系统调试实战:工具、技巧与内存管理

1. 嵌入式调试的核心价值与挑战从事嵌入式开发十多年来,我深刻体会到调试环节往往决定着项目的成败。与桌面软件开发不同,嵌入式系统一旦部署后很难进行现场维护,这就要求我们必须在上线前解决所有潜在问题。根据行业统计,嵌入式工…...

2025最权威的十大AI学术神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于人工智能生成内容也就是AIGC愈发普及的当前情形下,把它的机械痕迹以及同质化特…...

【Python原生AOT编译终极指南】:2026年CPython 3.15+官方AOT源码级拆解与生产落地避坑清单

第一章:Python原生AOT编译的演进脉络与3.15官方定位Python长期以来以解释执行和字节码(.pyc)为默认运行范式,AOT(Ahead-of-Time)编译长期处于社区实验阶段。从Nuitka、Cython到PyO3/Rust绑定,再…...

KT0803K FM发射芯片Arduino驱动开发与射频工程实践

1. KT0803系列FM发射芯片Arduino库深度解析与工程实践指南1.1 芯片定位与系统级约束KT0803及其衍生型号(KT0803K/L/M)是高度集成的单芯片FM广播发射器,专为低功耗、小体积音频广播应用设计。该系列芯片内部集成了PLL频率合成器、立体声编码器…...

【仅限首批认证用户开放】Polars 2.0企业清洗最佳实践白皮书(含GDPR脱敏DSL语法速查表)

第一章:Polars 2.0企业级数据清洗能力全景概览Polars 2.0 将数据清洗从“脚本式修补”推向“工程化流水线”,依托零拷贝内存模型、并行执行引擎与声明式 API,原生支持高吞吐、低延迟、强一致性的清洗任务。其核心能力不再依赖 Pandas 风格的链…...

FastAPI 2.0 + LLM流式输出全栈方案,含OpenAI兼容层、前端SSE重连策略、服务端背压控制(仅限内部技术白皮书级实录)

第一章:FastAPI 2.0 异步 AI 流式响应教程概览FastAPI 2.0 原生强化了对异步流式响应(StreamingResponse)的支持,为构建低延迟、高吞吐的 AI 接口(如大语言模型推理、语音合成、实时图像生成)提供了坚实基础…...

【JupyterLab实战】构建跨平台AI算力监控仪表盘

1. 为什么需要跨平台AI算力监控? 在AI开发过程中,我们经常遇到这样的场景:模型训练到一半突然卡死,却不知道是GPU内存爆了还是CPU瓶颈;多卡并行时某张卡莫名其妙跑不满;昇腾芯片的温度报警频繁触发却找不到…...

SEO_10个提升网站排名的实用SEO技巧分享(370 )

SEO:10个提升网站排名的实用SEO技巧分享 在当今的互联网时代,一个网站的成功离不开搜索引擎优化(SEO)。SEO不仅仅是一套技术,更是一种思维方式。本文将详细分享十个实用的SEO技巧,帮助你提升网站的排名,吸…...

Linux安装中文+MySQL的详细过程

中文安装1. 清理环境变量打开终端执行:sed -i /fcitx/d ~/.bashrcsed -i /GTK_IM_MODULE/d ~/.bashrcsed -i /QT_IM_MODULE/d ~/.bashrcsed -i /XMODIFIERS/d ~/.bashrc2. 重新配置 ibus 环境变量echo export GTK_IM_MODULEibus >> ~/.bashrcecho export QT_I…...

PowerToys Image Resizer:告别繁琐,三秒搞定图片批量处理

PowerToys Image Resizer:告别繁琐,三秒搞定图片批量处理 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trendin…...

城通网盘限速破解终极指南:ctfileGet工具让你免费享受10倍下载速度

城通网盘限速破解终极指南:ctfileGet工具让你免费享受10倍下载速度 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经被城通网盘的限速下载折磨得痛不欲生?面对几十KB/s…...

MySQL 事务与并发控制:从日志底层到 MVCC 哲学

MySQL 事务与并发控制:从日志底层到 MVCC 哲学 文章目录 MySQL 事务与并发控制:从日志底层到 MVCC 哲学📚 课程大纲规划 📖 第一讲:基础——事务概念与隔离级别1. 🎭 并发带来的三大“幽灵”👻 …...

JAVA重点基础、进阶知识及易错点总结(17)线程安全 synchronized 同步锁

🚀 Java 巩固进阶 第17天 主题:线程安全 & synchronized 同步锁 —— 并发编程的第一道防线📅 进度概览:今天攻克 多线程最核心难题:线程安全。这是面试必考、生产环境必用的知识点,直接决定你的代码能…...

linux系统中简单统计java项目代码行数信息

新建脚本文件(最好在项目根目录下):count_java.shvi count_java.sh编辑内容:按一下键盘上的i键,屏幕左下角会出现 -- INSERT --,输入一下内容: #!/bin/bash find . -name "*.java" -p…...

别再只用电容了!从π型RC到电子滤波,手把手教你选对硬件滤波方案(附电路图)

硬件滤波方案实战指南:从基础RC到电子滤波的工程决策 在嵌入式系统和电源设计中,噪声抑制是每个工程师必须面对的挑战。想象一下,你精心设计的传感器电路因为电源噪声导致数据跳变,或者音频放大器传出令人不快的嗡嗡声——这些问题…...

如何写 Skill

核心概念 Skill 是一个自包含的模块,用来给 Claude/Cascade 注入特定领域的知识、工作流和工具。本质上就是一个"新手入职指南",让通用 AI 变成某个领域的专家。 目录结构 skill-name/ ├── SKILL.md # 必须,核心文件 └…...

内网渗透初探保姆级教程!零基础小白从零入门,轻松学会内网渗透核心知识

0x01 基础知识 内网渗透,从字面上理解便是对目标服务器所在内网进行渗透并最终获取域控权限的一种渗透。内网渗透的前提需要获取一个Webshell,可以是低权限的Webshell,因为可以通过提权获取高权限。 在进行内网渗透之前需要了解一个概念&…...

配置MyBatis-Plus打印执行的 SQL 语句到控制台或日志文件中

配置MyBatis-Plus打印 1. 使用 log4j 或 logback 配置 MyBatis-Plus 支持多种日志框架&#xff0c;如 SLF4J, Commons Logging, Log4J, Log4J2 和 JDK logging。这里以 Logback 为例说明如何配置。 在你的 logback.xml 文件中添加如下配置&#xff1a; <configuration>&l…...

内网渗透全流程拆解|从入门到实战,小白也能看懂的步骤

内网渗透不是“盲目尝试”&#xff0c;而是遵循固定流程的系统化操作&#xff0c;核心流程可概括为&#xff1a;信息收集→漏洞利用→权限提升→横向移动→权限维持→痕迹清理&#xff0c;每个环节环环相扣&#xff0c;缺一不可。本文将结合小白易理解的实战场景&#xff0c;详…...

SAP FI模块实战:OBC4配置字段状态变式全流程解析(含常见报错处理)

SAP FI模块深度实战&#xff1a;OBC4字段状态变式配置与冲突解决指南 1. 字段状态变式的核心价值与应用场景 在SAP财务模块中&#xff0c;字段状态变式&#xff08;Field Status Variants&#xff09;是控制会计凭证输入界面的关键配置项。它决定了用户在创建财务凭证时&#x…...

OpenClaw备份恢复:千问3.5-35B-A3B-FP8配置迁移指南

OpenClaw备份恢复&#xff1a;千问3.5-35B-A3B-FP8配置迁移指南 1. 为什么需要备份OpenClaw配置 上周我的开发机突然硬盘故障&#xff0c;不得不重装系统。当我准备重新部署OpenClaw时&#xff0c;突然意识到一个严重问题——过去三个月精心调试的千问3.5模型配置、飞书机器人…...

ECharts折线图入门学习:从基础到实战的完整指南

引言 折线图是数据可视化中最常用的图表类型之一&#xff0c;特别适合展示数据随时间变化的趋势。ECharts作为一款功能强大的JavaScript可视化库&#xff0c;提供了丰富的配置选项和交互功能&#xff0c;能够轻松创建出专业、美观的折线图。本文将带领大家从零开始学习ECharts折…...

别再被@JsonFormat和@DateTimeFormat搞晕了!SpringBoot中时间处理的完整避坑指南

SpringBoot时间格式化终极指南&#xff1a;从JsonFormat到实战避坑 凌晨三点的办公室&#xff0c;咖啡杯已经见底&#xff0c;屏幕上却再次弹出那个熟悉的400错误——"Failed to parse Date value"。这可能是每个Java开发者在处理时间格式时都经历过的噩梦。时间数据…...

第二桌面 + 小龙虾:让企业AI智能体安全落地、全员可用

本文发布于2026年4月1日。引言&#xff1a;从“养虾”到“用虾”&#xff0c;AI落地需要新底座过去几个月&#xff0c;OpenClaw&#xff08;昵称“小龙虾”&#xff09;在开发者圈子里火得一塌糊涂。这个开源AI智能体网关&#xff0c;能听懂人话&#xff0c;还能替你操作电脑、…...

BAR和BA

BAR 是请求方发出的“问题”&#xff1a;“我刚才发的那批数据包&#xff0c;你收到了哪几个&#xff1f;”BA 是接收方回复的“答案”&#xff1a;“我收到了第1、3、4、5个包&#xff0c;第2个没收到。”BAR - Block Ack Request&#xff08;块确认请求&#xff09; 角色与发…...

别等宕机才后悔!UPS蓄电池定期巡检,这4点才是核心!

&#xff5c;机房里设备林立&#xff0c;大多数人把目光聚焦在服务器、精密空调上。但其实&#xff0c;潜伏在机房角落的“隐形杀手”&#xff0c;往往是看起来默默无闻的UPS蓄电池。今天我们不谈复杂的技术参数&#xff0c;只用大白话讲清楚&#xff1a;为什么蓄电池必须定期巡…...