Roo Code ask_followup_question 工具完全指南:交互式澄清机制的原理与实践
Roo Code ask_followup_question 工具完全指南交互式澄清机制的原理与实践【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Codeask_followup_question是 Roo Code 内置的交互式提问工具它让 AI 代理在信息缺失、需求模糊或面临多方案选型时能以结构化方式向用户提问并获取决策依据。本文基于官方文档与仓库源码系统讲解该工具的参数格式、触发时机、完整工作原理、错误处理机制与实际使用范例帮助你理解并善用这一始终可用的人机协作通道。工具定位Roo Code 中的人机对话桥梁在 Roo Code 的默认工作流程中AI 代理被设计为尽量自主地使用工具完成任务。但在真实开发场景里任务请求往往存在信息缺口——例如用户只说做一个博客网站却没说明技术栈、样式方案或数据库选型。此时盲目行动可能带来大量返工。ask_followup_question正是为此而生它通过向用户提出具体问题收集完成任务所需的补充信息在自主执行与用户决策之间建立一条结构化的对话通道。从仓库源码 src/core/prompts/responses.ts 可以看到系统提示词明确要求If you require additional information from the user, use the ask_followup_question tool.与随意输出一段文字等待用户回复不同该工具具备完整的参数校验、建议选项注入、流式渲染与错误计数机制是一条经过工程化设计、可被测试验证的正式工具调用路径。参数详解工具接受两个参数参数必填说明question是要向用户提出的具体、清晰的问题follow_up是2-4 条建议答案的列表用于引导用户快速回复在 UI 中以可选按钮形式展示注意官方文档 ask-followup-question.md 中将follow_up标注为可选但从当前仓库源码看src/core/prompts/tools/native-tools/ask_followup_question.ts 的 JSON Schema 已将其声明为required并要求数组长度为 1-4src/core/tools/AskFollowupQuestionTool.ts 在运行时也会对缺失或非数组的follow_up报出缺少参数错误。因此实际使用时应始终提供建议答案。在原生native工具协议中follow_up数组的每个元素是一个对象包含两个字段text必填用户可直接选中的建议答案必须是完整、可执行的答案不能是留有占位符的残缺内容mode可选若用户选中该选项代理将切换到的模式 slug如code、architect、debug等允许提问即触发模式切换的联动效果。该模式切换能力的示例在 native-tools/ask_followup_question.ts 的注释中给出{ question: Would you like me to implement this feature?, follow_up: [{ text: Yes, implement it now, mode: code }, { text: No, just plan it out, mode: architect }] }何时使用该工具Roo Code 只在下列情况下调用ask_followup_question原始请求中缺失关键信息无法推断出合理的默认值存在多种可行的实现方案需要用户决策如技术栈、认证方式选型缺少继续执行所需的技术细节或用户偏好遇到必须澄清的需求歧义额外上下文能够显著提升方案质量时。同时系统提示词在 src/core/prompts/sections/rules.ts 中设定了两条重要约束工具优先原则如果能用list_files、read_file等现有工具自行查明信息就应当直接去做而不是发问。例如用户提到 Desktop 上的某个文件时应先列出目录确认而不是询问文件路径提问下限原则Do not ask for more information than necessary——提问应克制、聚焦能自证的信息绝不打扰用户。也就是说该工具是信息获取的最后手段其使用频率受系统提示词纪律约束避免破坏代理的自主性与任务完成效率。核心特性提供结构化的信息收集方式不打断整体工作流内置建议答案减少用户输入量、引导回复方向跨交互保持对话历史与上下文连贯用户回复支持携带图片与代码片段作为always available工具集成员对所有模式mode开放——在 src/shared/tools.ts 的ALWAYS_AVAILABLE_TOOLS列表中ask_followup_question与attempt_completion、switch_mode、new_task等并列无需在模式配置中单独声明允许用户直接指导代理的实施方案决策用户回复统一以answer标签包裹与普通对话内容清晰区分工具成功执行时重置连续错误计数器作为代理自我纠错状态的一部分。工作原理从调用到回显的完整链路1. 参数校验工具入口 src/core/tools/AskFollowupQuestionTool.ts 首先校验参数question缺失空字符串时调用recordMissingParamError记录错误follow_up缺失、为null或非数组时同样报错且不会继续执行task.ask。该校验逻辑在测试 src/core/tools/tests/askFollowupQuestionTool.spec.ts 中针对 missing / null / 非数组三种异常输入均有覆盖确认了缺参即终止的安全行为。2. JSON 标准化转换源码将传入的follow_up列表映射为 UI 层可消费的标准 JSON 结构{ question: Users question here, suggest: [ { answer: Suggestion 1, mode: undefined }, { answer: Suggestion 2, mode: code } ] }对应实现见 src/core/tools/AskFollowupQuestionTool.tsfollow_up.map((s) ({ answer: s.text, mode: s.mode }))。测试 askFollowupQuestionTool.spec.ts 验证了最终传给 UI 的 JSON 中包含suggest:[{answer:Option 1},{answer:Option 2}]这样的标准化结构。3. UI 集成标准化后的 JSON 通过task.ask(followup, ...)方法src/core/task/Task.ts传递给 Webview UI 层。用户在界面中看到的是可点击的建议按钮也可以自由输入自定义回答形成点选 键入双通道的交互体验。值得说明的是流式场景的处理handlePartial方法在代理流式输出尚未结束时只传递question文本而暂不发送 JSONAskFollowupQuestionTool.ts避免把未完成的原始 JSON 暴露给用户界面待工具调用完整后再一次性渲染含建议选项的最终内容。对应行为由 askFollowupQuestionTool.spec.ts 验证。4. 响应收集与处理用户回复后流程继续捕获用户输入的文本以及回复中携带的任何图片将回复以answer标签包裹后回传给代理保留回复中附带的图片通过task.say(user_feedback, text, images)将反馈写入对话历史维持上下文连续AskFollowupQuestionTool.ts成功完成后将task.consecutiveMistakeCount重置为 0。5. 错误处理与连续错误计数错误处理机制围绕consecutiveMistakeCount计数器展开AskFollowupQuestionTool.ts参数缺失时consecutiveMistakeCount自增调用recordToolError(ask_followup_question)记录错误并将didToolFailInCurrentTurn置为true同时向用户返回格式化的缺少参数错误提示成功时计数器归零表示代理已从错误状态恢复执行异常时统一交由handleError处理生成 asking question 场景的错误信息。这套计数机制是代理自我纠错系统的一部分用于防止连续失败后仍盲目重复同一操作。测试文件 askFollowupQuestionTool.spec.ts 对错误分支的计数器行为有明确断言错误后计数为 1、且不再调用task.ask。提问-回答工作流时序一个完整的问答周期遵循如下顺序信息缺口识别代理判断当前缺少继续执行所需的信息问题拟定将缺口转化为清晰、具体、可回答的问题建议设计为每个问题准备 2-4 条相关建议答案推荐提供非强制但建议工具调用代理携带question与follow_up调用工具UI 呈现问题与建议按钮展示给用户用户回复用户点选建议或输入自定义回答消息处理系统分别处理流式partial与完整消息——流式响应按到达的分块逐段处理完整消息则一次性处理无论消息如何分块都保持状态一致回复加工回复以answer标签包裹并保留图片上下文整合回复写入对话历史任务继续代理基于新信息推进任务。其中第 7 步的状态一致性由 Task.ts 中的 partial 消息更新逻辑保障流式渲染时先以partial: true建立占位消息完整内容到达后原位更新而非重建消息从而避免界面闪烁与状态错乱。响应格式answer标签用户对问题的回答会以answer标签包裹确保与普通对话元素清晰区分answer Use Tailwind CSS for utility-first styling with maximum flexibility /answer该格式具备以下特征被answer标签包围保留原始回复的格式含换行与长文本若回复附带图片则一并保留即使是长回复也完整返回全部文本。在调用链末端回复还会进一步封装为user_message块作为工具结果返回给模型AskFollowupQuestionTool.ts使得后续模型推理能够明确识别这是用户对提问的反馈而非普通工具输出。使用示例以下示例来自官方文档展示了该工具在真实开发决策中的典型用法。询问实现偏好样式方案选型ask_followup_question questionWhich styling approach would you prefer for this web application?/question follow_up suggestUse Bootstrap for rapid development with consistent components/suggest suggestUse Tailwind CSS for utility-first styling with maximum flexibility/suggest suggestUse vanilla CSS with custom styling for complete control and minimal dependencies/suggest /follow_up /ask_followup_question请求技术澄清数据库选型ask_followup_question questionWhat database should this application use for storing user data?/question follow_up suggestMongoDB for flexible schema and document-based storage/suggest suggestPostgreSQL for relational data with strong consistency guarantees/suggest suggestFirebase for real-time updates and simplified backend management/suggest suggestSQLite for lightweight local storage without external dependencies/suggest /follow_up /ask_followup_question化解需求歧义认证方式决策ask_followup_question questionHow should the application handle user authentication?/question follow_up suggestImplement email/password authentication with account verification/suggest suggestUse social login providers (Google, GitHub, etc.) for quick signup/suggest suggestImplement both email/password and social login options/suggest /follow_up /ask_followup_question说明上述为文档层面的 XML 风格展示。在实际的原生工具协议中模型按 JSON Schema 调用格式见前文参数详解一节questionfollow_up数组每项含text与可选mode。局限性每次工具调用只能提出一个具体问题无法一次抛出多个问题建议答案在 UI 中以可选项呈现但用户仍可自由输入任意回复无法强制其选择过度使用会拖慢任务完成速度并造成碎片化、割裂的交互体验建议答案必须是完整内容不得留有要求用户自行编辑的占位符系统不内置对用户回复的校验没有任何机制能强制用户遵循特定答案格式。结合 rules.ts 中的系统提示词可知代理还被要求建议应specific, actionable, directly related to the completed task并按优先级或逻辑顺序排列——遵守这些纪律是发挥该工具价值的前提。实践建议能用工具查证就不提问文件路径、目录结构等可通过list_files/read_file确认的信息优先自主获取rules.ts一个问题配 2-4 条建议既减少用户输入负担也引导回复朝可执行方向收敛并善用mode字段实现选完即切换模式建议答案要完整可执行避免你想怎么实现这类开放问题尽量给出用 X 技术实现 Y 效果式的具体选项把提问用在真正的决策点上技术栈选型、数据库选择、认证方案、性能与可读性权衡、架构设计偏好等才是该工具的用武之地而非琐碎的执行细节理解流式渲染行为流式输出阶段界面只展示问题文本完整选项在工具调用结束后出现属正常现象而非缺陷。通过合理使用ask_followup_question可以让 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),仅供参考