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) | 核心特点 |
|---|---|---|---|---|
| ❓ Ask | ask | 精通软件开发与技术话题的技术助理,负责回答问题、提供信息 | read、mcp | 只读分析,除非用户明确要求否则不切换去写代码;支持用 Mermaid 图澄清回答 |
| 🏗️ Architect | architect | 富有好奇心的资深技术负责人,负责收集信息、制定详细计划 | read、受限的edit(仅 Markdown)、mcp | 通过 todo list 拆解任务,使用switch_mode请求切换到实现模式,计划文件建议放在/plans目录 |
| 💻 Code | code | 精通多种语言、框架与最佳实践的资深软件工程师 | read、edit、command、mcp | 全量写改权限,用于实现功能、修复缺陷、创建文件 |
从源码看,三种模式的工具组差异非常关键(定义见 src/shared/tools.ts 中的TOOL_GROUPS与 src/shared/modes.ts 中的getToolsForMode):
- Ask 模式没有
edit和command组,天然只能读取与分析,无法改动工作区; - 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):
- 先做信息收集(使用提供的工具获取任务上下文);
- 向用户提出澄清问题,加深对任务的理解;
- 将任务拆解为清晰、可执行的步骤,并用
update_todo_list工具创建 todo list(若该工具不可用,则写入plan.md或todo.md); - 随着信息更新同步修订 todo list;
- 询问用户是否满意该计划;
- 在能阐明复杂工作流或系统架构时使用 Mermaid 图(并明确提示避免在方括号内使用双引号与括号,防止解析错误);
- 使用
switch_mode工具请求用户切换到其他模式来实施方案。
值得注意的是,Architect 模式被明确要求不得给出工作量时间估算(如"需要几天"),而是专注于把工作拆解为清晰可执行的步骤。它的edit权限被限制为仅 Markdown 文件(fileRegex: "\\.md$"),从而保证它只能产出计划文档,真正的实现需要切换到 Code 模式。
Code 模式:专注实现
Code 模式是默认的"动手"模式,角色定义简洁(packages/types/src/mode.ts):
你是 Roo,一位拥有多种编程语言、框架、设计模式和最佳实践深厚知识的高级软件工程师。
它的whenToUse覆盖写改重构代码的一切场景,工具组包含完整的read、edit、command、mcp,没有任何文件类型限制。
每个模式独立绑定 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-]+$/(仅字母、数字、连字符),不允许重复 |
name | UI 中显示的名称 | 必填 |
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 明确给出的优先级顺序为:
- 项目级模式配置(来自工作区根目录的
.roomodes文件); - 全局模式配置(来自
custom_modes.yaml,若不存在则回退到custom_modes.json); - 内置默认模式配置。
当.roomodes与全局设置中存在相同 slug 的模式时,.roomodes版本完全覆盖全局版本(所有属性均不合并)。这一规则由 CustomModesManager.ts 的mergeCustomModes实现:项目模式先写入集合,全局模式只追加不冲突的 slug。
内置模式的覆盖与自定义
由于 3.0 奠定了模式化的架构基础,后续版本把这一能力延伸为完整的自定义模式系统。你可以通过三种方式创建/配置模式(详见 custom-modes.mdx):
- 直接让 Roo 创建(推荐):例如输入"Create a new mode called 'Documentation Writer'. It should only be able to read files and write Markdown files.",Roo 会引导你完成创建;
- 通过 Modes 页面:打开 Roo Code 面板,点击输入框下方的模式菜单,再点击齿轮图标,进入 Modes 页面点击"+"新建模式,填写 Name、Slug、Description、Save Location、Role Definition、When to Use、Available Tools、Custom Instructions 等字段;
- 手动编辑 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 不仅是三个按钮的叠加,而是确立了一套影响深远的架构原则:
- 角色与工具权限分离:Ask/Architect/Code 各自拥有不同的工具组与文件限制,用机制而非口头约束来防止 AI 越权操作;
- 思考与编码解耦:通过模式切换(
switch_mode)与规划工具(update_todo_list),把"讨论方案"和"落地实现"拆成两个可独立管控的阶段; - 模型与模式绑定:每个模式可绑定独立 API 配置档案,让规划用轻量模型、实现用重型模型成为可行的工作流;
- 可扩展性:模式以 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),仅供参考