Roo Code 3.0 版本解析:Chat Modes(Ask / Architect / Code)的引入与模式化 AI 协作体系
2026/9/13 13:20:45 网站建设 项目流程

Roo Code 3.0 版本解析:Chat Modes(Ask / Architect / Code)的引入与模式化 AI 协作体系

【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code

Roo Code 3.0 发布说明(2025-02-27)标志着该项目一次关键的产品形态转变:Chat Modes(聊天模式)体系正式引入,从此 Roo Code 不再只是"写完就改代码"的单一 AI,而是能够在架构讨论、代码库问答与实际编码实现之间自由切换的复合型 AI 协作助手。本文以 v3.0 发布说明 为核心骨架,结合当前仓库中模式体系的完整源码实现与官方文档,系统讲解 Ask、Architect、Code 三种内置模式的设计意图、底层配置结构,以及如何通过 API 配置档案为不同模式分配不同模型,并梳理 3.0.x 系列附带的小型修复与引擎版本变更。

版本背景:Chat Modes 标志着什么

3.0 是 Roo Code 发布周期中一个具有里程碑意义的版本。此前的交互方式更倾向于"让 AI 直接产出代码",而 v3.0 正式将Chat Modes纳入产品核心:

  • 用户可以与 AI 进行架构讨论(architectural discussions)代码库提问(codebase questions),而不必立刻进入代码生成环节;
  • 每种模式承载不同的角色定位与工具权限,将"思考"与"编码"在流程上解耦;
  • 每种模式可以绑定独立的 API 配置档案(API configuration profile),从而让"思考用的模型"与"编码用的模型"可以不同。

从当前仓库的源码看,这套模式体系在此后的版本中不断演进,最终形成了今天包含 Architect、Code、Ask、Debug、Orchestrator 五种内置模式的完整结构(定义于 packages/types/src/mode.ts)。因此,理解 3.0 的 Chat Modes,就是理解 Roo Code 后续所有模式化能力的地基。

核心特性:Ask、Architect、Code 三种模式的定位

v3.0.0 引入了三种聊天模式,其设计目标可以概括为:

  • Ask 模式:回答关于系统架构或代码库的问题;
  • Architect 模式:在代码实现之前进行更高层面的讨论与规划;
  • Code 模式:实际编写、修改和重构代码。

在当前仓库中,这三种模式的定义依然保留,并且是DEFAULT_MODES的组成部分(见 packages/types/src/mode.ts)。我们可以从源码看到每个模式的完整角色定义(roleDefinition)、适用场景(whenToUse)与可用工具组(groups):

模式slug角色定位(roleDefinition 摘要)可用工具组(groups)核心特点
❓ Askask精通软件开发与技术话题的技术助理,负责回答问题、提供信息readmcp只读分析,除非用户明确要求否则不切换去写代码;支持用 Mermaid 图澄清回答
🏗️ Architectarchitect富有好奇心的资深技术负责人,负责收集信息、制定详细计划read、受限的edit(仅 Markdown)、mcp通过 todo list 拆解任务,使用switch_mode请求切换到实现模式,计划文件建议放在/plans目录
💻 Codecode精通多种语言、框架与最佳实践的资深软件工程师readeditcommandmcp全量写改权限,用于实现功能、修复缺陷、创建文件

从源码看,三种模式的工具组差异非常关键(定义见 src/shared/tools.ts 中的TOOL_GROUPS与 src/shared/modes.ts 中的getToolsForMode):

  • Ask 模式没有editcommand组,天然只能读取与分析,无法改动工作区;
  • Architect 模式edit组带有限制条件——fileRegex: "\\.md$",即只能编辑 Markdown 文件(详见 packages/types/src/mode.ts),这保证规划阶段只能产出文档/计划,不会误改业务代码;
  • Code 模式拥有read+edit+command+mcp的全量权限,是真正动手实现的角色。

这种"工具即权限边界"的设计,正是 3.0 Chat Modes 的核心价值:用模式来约束 AI 的行为半径,避免讨论阶段就贸然改代码。

Ask 模式:只读问答与知识查询

Ask 模式面向"我需要解释、文档或技术答案"的场景,其内置指令(customInstructions)明确要求:

可以分析代码、解释概念、访问外部资源;始终彻底回答用户问题,除非用户明确要求,否则不要切换到实现代码;在回答能更清晰时使用 Mermaid 图。

从 packages/types/src/mode.ts 可以看到,Ask 模式的groups仅为["read", "mcp"],这意味着它只能使用读取类工具和 MCP 工具,无法执行命令或编辑文件。这一配置从机制上保证了"Ask 模式永远不会意外修改你的代码"。

Architect 模式:规划先行、实现后置

Architect 模式的customInstructions是三种模式中最长的,它定义了一套完整的规划工作流(packages/types/src/mode.ts):

  1. 先做信息收集(使用提供的工具获取任务上下文);
  2. 向用户提出澄清问题,加深对任务的理解;
  3. 将任务拆解为清晰、可执行的步骤,并用update_todo_list工具创建 todo list(若该工具不可用,则写入plan.mdtodo.md);
  4. 随着信息更新同步修订 todo list;
  5. 询问用户是否满意该计划;
  6. 在能阐明复杂工作流或系统架构时使用 Mermaid 图(并明确提示避免在方括号内使用双引号与括号,防止解析错误);
  7. 使用switch_mode工具请求用户切换到其他模式来实施方案。

值得注意的是,Architect 模式被明确要求不得给出工作量时间估算(如"需要几天"),而是专注于把工作拆解为清晰可执行的步骤。它的edit权限被限制为仅 Markdown 文件(fileRegex: "\\.md$"),从而保证它只能产出计划文档,真正的实现需要切换到 Code 模式。

Code 模式:专注实现

Code 模式是默认的"动手"模式,角色定义简洁(packages/types/src/mode.ts):

你是 Roo,一位拥有多种编程语言、框架、设计模式和最佳实践深厚知识的高级软件工程师。

它的whenToUse覆盖写改重构代码的一切场景,工具组包含完整的readeditcommandmcp,没有任何文件类型限制。

每个模式独立绑定 API 配置:思考与编码用不同模型

v3.0 发布说明中特别强调:每个模式可以分配不同的 API 配置档案,从而在不同模式中使用不同模型。这在当前仓库中由API Configuration Profiles(API 配置档案)功能承载,详见 API Configuration Profiles 官方文档。

一个配置档案可以包含:

  • API 提供商(OpenAI、Anthropic、OpenRouter 等);
  • API Key 与认证信息(密钥存储在 VSCode Secret Storage 中,不以明文暴露);
  • 模型选择;
  • 温度参数(控制响应随机性,详见 model-temperature 文档);
  • Thinking 预算、提供商特有设置;
  • 差异编辑配置(与apply_diff相关);
  • 限流设置(Rate Limit,默认为 0 即禁用,可按档案设置两次 API 请求之间的最小间隔秒数,用于控制成本或规避提供商限流)。

配置档案与模式的绑定发生在Prompts(提示词)标签页中:你可以显式地将某个配置档案关联到某个模式。此外,Roo Code 会自动记住每个模式上次使用的模型(Sticky Models)——当你切换模式时,它会自动选中该模式对应的模型。这带来的典型工作流是:

  • Architect / Ask 模式使用成本更低、推理能力强的模型进行规划与问答;
  • Code 模式使用编码能力更强的模型进行实现。

官方文档 custom-modes.mdx 中的提示框也确认了这一点:"每个模式(包括自定义模式)都具备 Sticky Models 特性",即自动记住并选择该模式最近使用的模型,无需反复重新配置。

模式体系的底层实现:从配置到运行

模式的类型定义与校验

在 packages/types/src/mode.ts 中,modeConfigSchema定义了每个模式的完整结构:

字段说明校验规则
slug唯一内部标识符必须匹配/^[a-zA-Z0-9-]+$/(仅字母、数字、连字符),不允许重复
nameUI 中显示的名称必填
roleDefinition模式的核心身份与专长,放置在系统提示词开头必填
whenToUse为 Roo 的自动决策(模式选择、任务编排)提供指导可选
description模式选择器中显示的一句话摘要可选
customInstructions附加在系统提示词末尾的行为准则可选
groups允许访问的工具组及文件限制经过特殊处理,自动剔除已废弃的工具组(如browser),保证向后兼容

从源码还可以看到(packages/types/src/mode.ts),工具组支持两种写法:

  • 简单字符串:"edit",表示无限制访问;
  • 元组:["edit", { fileRegex: "pattern", description: "optional" }],表示带文件类型限制的访问,其中fileRegex会被校验为正则表达式。

模式的加载、合并与覆盖

src/shared/modes.ts 是模式体系的运行时核心,提供了:

  • getToolsForMode(groups):根据模式的工具组展开出实际可用的工具列表,并始终追加必需工具(ALWAYS_AVAILABLE_TOOLS);
  • getAllModes(customModes):将内置模式与自定义模式合并,自定义模式按 slug 覆盖同名内置模式;
  • getModeSelection(mode, promptComponent, customModes):解析最终生效的模式配置——自定义模式优先,其次内置模式叠加提示词覆盖;
  • getFullModeDetails(...):进一步合并全局自定义指令、语言与工作区级自定义指令(addCustomInstructions),得到最终注入系统提示词的完整配置。

模式的配置优先级由 CustomModesManager 维护,官方文档 custom-modes.mdx 明确给出的优先级顺序为:

  1. 项目级模式配置(来自工作区根目录的.roomodes文件);
  2. 全局模式配置(来自custom_modes.yaml,若不存在则回退到custom_modes.json);
  3. 内置默认模式配置。

.roomodes与全局设置中存在相同 slug 的模式时,.roomodes版本完全覆盖全局版本(所有属性均不合并)。这一规则由 CustomModesManager.ts 的mergeCustomModes实现:项目模式先写入集合,全局模式只追加不冲突的 slug。

内置模式的覆盖与自定义

由于 3.0 奠定了模式化的架构基础,后续版本把这一能力延伸为完整的自定义模式系统。你可以通过三种方式创建/配置模式(详见 custom-modes.mdx):

  1. 直接让 Roo 创建(推荐):例如输入"Create a new mode called 'Documentation Writer'. It should only be able to read files and write Markdown files.",Roo 会引导你完成创建;
  2. 通过 Modes 页面:打开 Roo Code 面板,点击输入框下方的模式菜单,再点击齿轮图标,进入 Modes 页面点击"+"新建模式,填写 Name、Slug、Description、Save Location、Role Definition、When to Use、Available Tools、Custom Instructions 等字段;
  3. 手动编辑 YAML/JSON 配置文件:全局模式编辑custom_modes.yaml(或custom_modes.json),项目模式编辑工作区根目录的.roomodes

一个自定义模式的 YAML 示例(来自官方文档):

customModes: - slug: docs-writer name: 📝 Documentation Writer description: A specialized mode for writing and editing technical documentation. roleDefinition: You are a technical writer specializing in clear documentation. whenToUse: Use this mode for writing and editing documentation. customInstructions: Focus on clarity and completeness in documentation. groups: - read - - edit # 元组形式:第一个元素是工具组名 - fileRegex: \.(md|mdx)$ # 第二个元素是限制选项 description: Markdown files only

如果要覆盖内置模式(例如把💻 Code限制为只允许编辑 JS/TS 文件),只需在.roomodes或全局配置中定义一个 slug 为code的模式即可。

3.0.x 系列附带更新

在 v3.0.0 引入 Chat Modes 之后,3.0.x 系列还包含了以下修复与更新:

  • v3.0.1:修复聊天输入框的一个小的视觉故障(Chat Input Visual Glitch);
  • v3.0.2:微调聊天输入框中的按钮对齐(Button Alignment Tweaks);
  • v3.0.3:将所需 VSCode 引擎版本更新为^1.84.0,与 Cline 保持一致(VSCode Engine Requirement)。

这组补丁体现了发布说明中"sometimes multiple times per day"的高频迭代节奏(参见 扩展发布说明索引):核心特性在 v3.0.0 落地,紧随其后的是围绕聊天输入界面的打磨,以及运行时兼容性(VSCode 引擎版本)的同步。

总结:3.0 Chat Modes 的遗产

Roo Code 3.0 的 Chat Modes 不仅是三个按钮的叠加,而是确立了一套影响深远的架构原则:

  1. 角色与工具权限分离:Ask/Architect/Code 各自拥有不同的工具组与文件限制,用机制而非口头约束来防止 AI 越权操作;
  2. 思考与编码解耦:通过模式切换(switch_mode)与规划工具(update_todo_list),把"讨论方案"和"落地实现"拆成两个可独立管控的阶段;
  3. 模型与模式绑定:每个模式可绑定独立 API 配置档案,让规划用轻量模型、实现用重型模型成为可行的工作流;
  4. 可扩展性:模式以 schema 化的ModeConfig定义(slug、roleDefinition、groups 等),天然支持后续版本的自定义模式、.roomodes项目级配置与模式导入导出能力。

如果你希望深入了解模式化的完整能力,可以继续阅读仓库中的 自定义模式官方文档、API 配置档案文档 以及 模式使用指南;如果想从源码层面验证,可重点查看 packages/types/src/mode.ts、src/shared/modes.ts 与 src/core/config/CustomModesManager.ts 三处核心实现。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询