与自定义系统提示的共存方案)
Roo Code 3.10.1 兼容性补丁深度解析建议回复Suggested Responses与自定义系统提示的共存方案【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-CodeRoo Code 3.10.1发布于 2025-03-20是一个聚焦兼容性的补丁版本核心改动只有一条将建议回复Suggested Responses从强制行为调整为可选行为以消除其与用户自定义系统提示之间的冲突。本文以该补丁为主体结合 3.10.0 引入的 Suggested Responses 功能文档、ask_followup_question工具的底层源码与 Webview 前端实现完整讲解该功能的交互方式、参数契约、冲突成因与修复原理帮助你理解在自定义模式下如何正确配置与使用这一能力。版本背景一个功能两个版本3.10.0同日发布正式引入Suggested Responses——当 Roo 需要向你提问澄清时会在问题下方直接给出若干条预置答案按钮点击即可快速回复免去手动输入功能由社区贡献者 samhvw8 提出。3.10.1随后的补丁版本将建议回复改为可选防止它与被覆盖override的系统提示相互冲突确保自定义配置的兼容性。对应变更记录见 CHANGELOG.md## [3.10.1] - 2025-03-20Make the suggested responses optional to not break overridden system prompts以及 v3.10.0 更新日志 中对该功能的原始描述。官方功能文档位于 apps/docs/docs/features/suggested-responses.md本文后续将围绕它与源码交叉印证。Suggested Responses 是什么一句话问答交互链路Roo 在执行任务过程中如果需要补充信息会调用ask_followup_question工具向你提问。为了让回复更快速Roo 通常会在问题下方附带若干条建议答案以可点击按钮的形式展示在聊天界面中。完整链路如下提问出现Roo 调用ask_followup_question工具携带question问题文本与follow_up建议答案列表。建议展示如果 Roo 提供了建议它们会以按钮形式渲染在问题下方。用户交互你可以通过点击、快捷键或先编辑再发送三种方式回复。这张图展示了提问与建议按钮并排出现的典型界面工具参数契约follow_up 的 schema 约束建议回复的数据源头是ask_followup_question工具的 JSON Schema 定义位于 src/core/prompts/tools/native-tools/ask_followup_question.ts。该定义明确约束了模型输出格式字段类型约束与说明questionstring必填。清晰、具体的问题描述缺失的信息follow_uparray必填。2–4 条建议答案必须是完整、可执行的答案不能包含占位符可选携带mode字段用于切换模式如code、architectfollow_up[].textstring用户可直接选择的建议答案文本follow_up[].modestring | null可选。选择该建议后要切换到的模式 slugSchema 中还声明了follow_up条数上下限minItems: 1、maxItems: 4并启用了strict: true与additionalProperties: false即模型不能输出约定之外的字段。工具文档原文见 apps/docs/docs/advanced-usage/available-tools/ask-followup-question.md。源码中的格式转换当模型返回该工具调用后由 src/core/tools/AskFollowupQuestionTool.ts 执行。其核心逻辑如下校验question与follow_up是否缺失缺失则记录missing param错误并计数recordMissingParamError将模型返回的{ text, mode }结构转换为任务层约定的{ answer, mode }结构const follow_up_json { question, suggest: follow_up.map((s) ({ answer: s.text, mode: s.mode })), }随后通过task.ask(followup, JSON.stringify(follow_up_json), false)把问题与建议一并交给 UI 层展示等待用户输入。这种text/mode → answer/mode的映射最终对应packages/types/src/followup.ts中定义的FollowUpData与SuggestionItem接口并配套 zod schemasuggestionItemSchema、followUpDataSchema是前后端传递建议回复的统一数据契约。三种交互方式选择、快捷键与编辑后发送根据 suggested-responses 功能文档用户与建议按钮有四种交互路径其中编辑前发送包含两种触发方式1. 直接点击选择操作直接点击包含目标答案的按钮。效果所选答案会立即作为回复发回给 Roo这是建议完全符合意图时最快的回复方式。2. 键盘快捷键操作使用roo.acceptInput命令对应的快捷键。效果自动选中第一条主建议按钮。配置具体快捷键设置见 键盘快捷键文档。3. 编辑后再发送Shift 点击操作按住Shift再点击建议按钮。效果建议文本被复制到聊天输入框你可以修改后按 Enter 发送自定义回复。适合答案接近但需要微调的场景。4. 编辑后再发送悬停铅笔图标操作将鼠标悬停在建议按钮上点击出现的铅笔/复制图标等价于 Shift 点击。效果同样把建议文本填入输入框供编辑。下图展示了点击建议按钮后文本被复制到输入框、等待编辑的场景前端渲染与自动批准倒计时建议按钮的 UI 实现在 webview-ui/src/components/chat/FollowUpSuggest.tsx其中值得注意的细节点击按钮时如果事件带shiftKey组件不会标记已选择而是交由父组件将文本复制到输入框onSuggestionClick当开启了自动批准且alwaysAllowFollowupQuestions生效时第一条建议按钮下方会显示倒计时计时器默认超时 60 秒可通过followupAutoApproveTimeoutMs配置倒计时归零后自动批准该建议选择任意建议或点击编辑图标会取消该倒计时onCancelAutoApproval避免视觉倒计时与实际超时之间的竞态每条带mode的建议按钮右下角会渲染一个模式切换角标如→ code。兼容性修复的原理覆盖系统提示为何会与建议回复冲突3.10.1 的改动目标非常明确——防止建议回复与覆盖后的系统提示冲突。要理解这一点需要先看默认系统提示是如何引导模型提供建议答案的。在 src/core/prompts/tests/snapshots/system-prompt/consistent-system-prompt.snap 等快照中可以找到默认提示中的明确指引When you ask a question, provide the user with 2-4 suggested answers based on your question so they dont need to do so much typing...也就是说默认情况下系统提示会强制要求 Roo 在提问时附带 2–4 条建议答案。这套引导与ask_followup_question工具 schema 的follow_up字段是配套设计的。而自定义系统提示来自哪里Roo Code 的自定义模式Custom Modes机制允许用户完全定义自己的模式详见 自定义模式文档。其中两个关键字段会直接影响系统提示内容字段作用roleDefinition定义模式的核心身份与专长会被放置在系统提示的开头customInstructions附加的行为准则会被添加到系统提示的末尾当用户通过自定义模式覆盖override系统提示时原本提问必须附带 2–4 条建议的引导可能被替换或移除。此时若功能仍强制要求建议回复就可能出现两种情况模型被互相矛盾的指令干扰而输出不符合 schema 的建议列表或模型根本不生成follow_up导致工具调用触发缺参错误。3.10.1 的修复方式按发布说明所述是将建议回复调整为可选Made suggested responses optional to prevent conflicts with overridden system prompts功能保留并默认可用但不再作为不可绕过的硬性要求从而保证自定义配置下的兼容性。对于沿用默认系统提示的用户交互体验完全不受影响对于深度定制系统提示的用户则获得了更大的自由度——可以让自己的模式决定是否以及如何提供建议答案。从源码结构看这一可选化发生在提示词引导层面而非工具 schema 层面当前 ask_followup_question.ts 的 schema 中follow_up仍是必填字段required: [question, follow_up]说明工具本身的参数契约未变变化的只是系统提示中对该字段的强制程度。验证与追溯如何在当前仓库确认这条变更如果你想在仓库中追溯 3.10.1 的这条变更可以按以下路径核对CHANGELOG 入口CHANGELOG.md 的## [3.10.1] - 2025-03-20条目发布说明原文apps/docs/docs/update-notes/v3.10.1.md本文章所依据的主文档front matter 中的 description 同样写明makes suggested responses optional to prevent conflicts with overridden system prompts功能背景v3.10.0 更新日志 中 Suggested Responses 的功能引入说明功能使用文档apps/docs/docs/features/suggested-responses.md工具定义与执行src/core/prompts/tools/native-tools/ask_followup_question.ts 与 src/core/tools/AskFollowupQuestionTool.ts数据契约packages/types/src/followup.ts前端组件webview-ui/src/components/chat/FollowUpSuggest.tsx含自动批准倒计时逻辑系统提示快照src/core/prompts/tests/snapshots/system-prompt/consistent-system-prompt.snap可看到提供 2–4 条建议答案的默认引导。小结Roo Code 3.10.1 的这次补丁本质上是在功能完备性与用户可定制性之间做的一次平衡对普通用户Suggested Responses 一如既往地可用点击、快捷键roo.acceptInput、Shift点击编辑三种交互方式保持不变对自定义模式用户覆盖系统提示后不再被迫遵循必须附带建议答案的默认引导避免指令冲突导致的异常输出对二次开发者工具参数契约question 2–4 条follow_up、前后端数据契约text/mode → answer/mode与 UI 渲染含自动批准倒计时在源码层面均有清晰实现可循。如果你正在使用自定义模式且希望保留建议回复能力可以在customInstructions中显式加入提问时附带 2–4 条建议答案的引导如果希望完全自主控制问答流程则无需任何额外配置——3.10.1 之后建议回复已成为一项可选、可继承、可定制的优雅能力。【免费下载链接】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),仅供参考