ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Roo Code attempt_completion 工具全解析:任务收尾、结果呈现与迭代反馈机制

Roo Code attempt_completion 工具全解析:任务收尾、结果呈现与迭代反馈机制 Roo Code attempt_completion 工具全解析任务收尾、结果呈现与迭代反馈机制【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Codeattempt_completion是 Roo Code 中负责宣告任务完成的核心工具当 AI 认为用户任务已完成时它会以独立的completion_result展示形式呈现最终结果摘要可附带一条用于演示结果的 CLI 命令并等待用户反馈以决定是接受结果还是继续迭代优化。本文基于 attempt-completion.md 官方文档并结合仓库源码与测试用例完整讲解该工具的触发时机、参数规范、底层执行流程、子任务委派机制与最佳实践帮助你在实际使用 Roo Code 时更准确地驱动任务闭环。工具定位它解决什么问题attempt_completion向用户和系统同时发出当前任务已完成的信号并呈现一份已完成工作的总结。它区别于普通消息的关键在于结果以特殊的completion_resultUI 格式展示与常规对话消息在视觉上显著区分可附带一条命令通过真实执行来演示结果呈现结果后会主动等待用户反馈形成完成 → 反馈 → 再优化的迭代闭环而不是草率结束对话在大型工作流中作为清晰的检查点checkpoint也支持子任务完成后的父任务续跑。从系统提示system prompt的角度看Roo Code 被明确要求完成任务后必须调用该工具。objective.ts 中写明Once youve completed the users task, you must use the attempt_completion tool to present the result of the task to the userresponses.ts 同样指出完成用户任务时应使用attempt_completion。参数说明该工具仅接受两个参数参数必填说明result是最终结果描述概括本次完成了什么、带来了什么价值command否一条 CLI 命令用于现场演示结果如启动开发服务器、运行脚本在源码层面参数以严格的类型约束定义。工具实现 AttemptCompletionTool.ts 中interface AttemptCompletionParams仅包含result: string与command?: string面向模型的工具声明 native-tools/attempt_completion.ts 采用strict: true的 OpenAI function calling 格式required: [result]result的语义被定义为 Final result message to deliver to the user once the task is complete任务完成时交付给用户的最终结果消息。值得注意的细节官方原生工具声明中只向模型暴露了result一个参数command不参与模型端参数校验而工具实际执行时通过 AttemptCompletionTool.handlePartial 兼容了command参数——若模型同时输出result与command会先呈现完成结果再以command询问task.ask(command, ...)请求用户批准执行。何时触发该工具根据官方文档以下场景是它的典型触发时机Roo 认为用户的请求任务已经完成需要总结做了哪些改动或改进需要借助一条命令的执行来演示当前成果为用户的验收反馈提供一个检查点从一个工作阶段过渡到可能的后续优化。简而言之它不是进行中的汇报工具而是任务收尾的信号灯。文档明确强调它不能用于部分完成或进度更新——那是update_todo_list等工具的职责。底层执行流程拆解结合 AttemptCompletionTool.ts 的实现工具调用后的实际流程如下。1. 前置安全检查指南 硬性校验文档指出确认之前的工具调用都成功后再调用本工具是一项最佳实践而非程序强制guideline, not enforced。系统提示的描述文本同样强调This tool CANNOT be used until youve confirmed from the user that any previous tool uses were successful否则可能导致代码损坏和系统故障。但源码中存在两处硬性校验这是文档之外的实现事实本轮工具失败检查if (task.didToolFailInCurrentTurn)时直接报错并返回提示信息为 i18n 文案errors.attempt_completion_tool_failed见 AttemptCompletionTool.ts。这意味着当前轮次只要有过失败的工具调用attempt_completion会被拒绝执行。未完成 Todo 拦截可选配置通过 VS Code 配置项preventCompletionWithOpenTodos默认false控制。开启后若task.todoList中存在状态非completed的条目工具会拒绝完成任务并增加consecutiveMistakeCount、记录工具错误见 AttemptCompletionTool.ts。对应测试 attemptCompletionTool.spec.ts 覆盖了无 todo 列表允许完成存在未完成 todo 且开启配置时阻止完成本轮有工具失败时拒绝完成等分支验证了这些拦截逻辑。2. 结果呈现校验通过后若result为空会触发缺失参数错误consecutiveMistakeCount并记录错误见 AttemptCompletionTool.ts正常路径下执行task.say(completion_result, result, undefined, false)以completion_result这一特殊消息类型向用户展示结果AttemptCompletionTool.ts。文档提及结果文本会通过removeClosingTag函数剥离 XML 闭合标签——这是 XML 风格工具调用解析中的内部处理步骤由于attempt_completion以result.../result包裹内容剥离闭合标签可避免结果文本携带多余的 XML 片段确保呈现干净、可扫描的总结文字。3. 命令执行若提供 command命令需先获得用户批准approval才执行批准后通过系统的命令执行能力运行并把输出展示给用户工具对命令数量有限制只能附带一条命令无法同时给出多个命令选项。4. 反馈收集与迭代系统通过task.ask(completion_result, , false)等待用户对完成结果的反馈AttemptCompletionTool.ts若用户点击是yesButtonClicked任务正式标记为完成触发TaskCompleted事件若用户输入反馈文本系统会以user_feedback消息回显并将反馈以user_message.../user_message包装后作为工具结果推送给模型AttemptCompletionTool.ts使 AI 能够针对反馈继续工作——这正是迭代改进循环的源码实现对话并未因attempt_completion而终止。5. 任务完成与续跑任务在系统中标记为完成捕获该任务的遥测telemetry数据任务完成时emitTaskCompleted会先强制更新最终的 token 用量统计task.emitFinalTokenUsageUpdate()再发出RooCodeEventName.TaskCompleted事件附带 token 用量与工具使用统计AttemptCompletionTool.ts。子任务场景委派与父任务续跑attempt_completion在子任务subtask中拥有独特的委派逻辑见 AttemptCompletionTool.ts通过task.parentTaskId判断当前是否为委派产生的子任务查询子任务在历史记录中的状态避免从历史恢复会话时重复向父任务注入 tool_result状态为active时进入委派流程询问用户是否完成子任务并恢复父任务askFinishSubTaskApproval批准后调用provider.reopenParentFromDelegation把父任务从委派状态恢复并携带子任务的完成摘要completionResultSummary拒绝则推送toolDenied结果返回continue时回落到常规完成询问流程状态异常如undefined或delegated会记录错误日志并跳过委派防止数据损坏。这使 Roo Code 能够支持复杂的嵌套工作流子任务完成 → 总结 → 恢复父任务上下文 → 父任务继续全程保持上下文连续。可用范围所有模式的常备工具attempt_completion属于ALWAYS_AVAILABLE_TOOLS常量在任何模式下都可用。该常量定义于 tools.tsexport const ALWAYS_AVAILABLE_TOOLS: ToolName[] [ ask_followup_question, attempt_completion, switch_mode, new_task, update_todo_list, run_slash_command, skill, ] as const在 modes.ts 中每个模式的工具集合都会把ALWAYS_AVAILABLE_TOOLS全部并入即无论 Code、Architect、Ask 还是自定义模式attempt_completion始终在场。需要说明的例外是工具校验 validateToolUse.ts 中requirements如自定义模式显式禁用某工具的优先级高于常备工具列表——测试 validateToolUse.spec.ts 验证了这一行为。此外在流式解析层面NativeToolCallParser.ts 会在参数累积过程中即时提取result让 UI 能边生成边呈现完成内容。result 书写规范官方文档给出如下写作指引清晰传达完成了什么简洁但完整聚焦交付给用户的价值避免不必要的客套话或填充文字保持专业、直截了当的语气使用易于快速扫读的结构化表达让用户知道可以提出反馈以进一步优化。两点硬性提醒不要以提问或邀请继续对话的方式结尾。系统提示规则 rules.ts 明确要求NEVER end attempt_completion result with a question or request to engage in further conversation! Formulate the end of your result in a way that is final and does not require further input from the user——结果应以最终交付的口吻收束系统会自动通过removeClosingTag剥离结果文本中的 XML 闭合标签因此在 result 中不需要、也不应该手动编写 XML 标签。command 选择规范附带演示命令时遵循以下原则选择能可视化展示结果的命令优先让用户看到创建或修改了什么推荐示例open index.html—— 打开生成的网页npm start—— 启动开发服务器python app.py—— 运行生成的应用程序避免仅输出文本的命令如echo、cat记住命令执行前需要用户批准确保命令在用户的操作系统上有效。反馈与 UI 呈现迭代闭环attempt_completion拥有独特的反馈机制结果以独立的completion_resultUI 格式呈现与普通消息不同用户一眼即可识别任务收尾点系统在展示结果后等待用户反馈反馈被处理后返回给 Roo驱动进一步优化——这创造了一个迭代改进循环而非简单结束对话UI 中包含专门的反馈交互元素结果作为对话流中清晰的检查点保持结构化的对话节奏。典型应用场景示例建站Roo 交付网站后用open index.html展示用户反馈后继续优化设计实现功能Roo 总结改动及其影响用户要求补充测试覆盖Roo 继续任务修复 BugRoo 说明修复了什么、如何解决根因用户确认修复生效搭建环境Roo 确认各组件已安装用户要求额外配置后继续数据处理脚本Roo 总结脚本功能用户建议性能优化Roo 继续调优代码。完整使用示例以下三个示例分别覆盖纯结果总结结果 演示命令脚本任务 执行演示三种典型形态均可在实际提示中直接套用。示例一仅结果总结attempt_completion result Ive updated the CSS for the navigation bar to match the design mockup. The changes include: 1. Updated color scheme to use the new brand colors 2. Added responsive behavior for mobile devices 3. Fixed the alignment issues in the dropdown menus /result /attempt_completion示例二结果 演示命令attempt_completion result Ive created a simple React application with the following features: 1. A responsive landing page with the requested hero section 2. A working contact form with validation 3. Navigation between all three requested pages 4. Styling that matches the provided design mockup /result commandnpm start/command /attempt_completion示例三Python 脚本任务 执行演示attempt_completion result Ive created a data processing script that: 1. Reads the CSV files from the data directory 2. Cleans and normalizes the data as requested 3. Generates the summary statistics in JSON format 4. Outputs the processed data to the output directory /result commandpython process_data.py/command /attempt_completion限制与注意事项上一工具成功确认是指导原则而非强制校验不过源码中有didToolFailInCurrentTurn硬拦截见上文前置安全检查只能附带一条演示命令无法呈现多个命令选项命令执行必须经用户批准只能演示可以通过 CLI 命令展示的结果类型不能用于部分完成或进度更新场景结果文本中的 XML 闭合标签会被内部处理剥离开启preventCompletionWithOpenTodos配置后存在未完成 Todo 的任务将无法完成。源码与测试索引若想深入理解该工具的实现细节推荐阅读以下仓库文件工具实现AttemptCompletionTool.ts含参数校验、Todo 拦截、委派流程、事件发射工具声明与常量tools.tsAttemptCompletionToolUse接口、tools.tsALWAYS_AVAILABLE_TOOLS模型端工具描述native-tools/attempt_completion.ts系统提示约束rules.ts、objective.ts、responses.ts流式参数解析NativeToolCallParser.tsattempt_completion的 partial/nativeArgs 提取模式可用性modes.ts、validateToolUse.ts单元测试attemptCompletionTool.spec.ts、validateToolUse.spec.ts把握住结果要终态、内容要可扫读、命令要能演示、反馈要接得住这四条主线attempt_completion就能成为你驾驭 Roo Code 完成-验收-迭代闭环的关键枢纽。【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表