Roo Code 3.1 版本解析:可定制模式提示词、DeepSeek-R1 与 Mistral 接入及 Diff 算法实验
【免费下载链接】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.1 于 2025-02-27 发布,是围绕「可定制化」展开的一个完整发布周期:它首次开放了 Code、Architect、Ask 等聊天模式的角色定义与指令定制能力,重构了 Enhance Prompt 功能使其不再受提供商限制,同时引入了 DeepSeek-R1、Mistral 与 VS Code Language Models(含 Copilot)等新提供商,并带来自动批准聊天栏、实验性 Unified Diff 算法与大量质量改进。读完本文,你将理解这些特性的配置入口、底层实现原理与使用场景,能够直接上手定制自己的模式提示词、启用新模型提供商,并借助源码级证据判断各功能的适用前提。
发布周期概览
3.1 系列由多个补丁版本组成,本文档(apps/docs/docs/update-notes/v3.1.md)是其总览,配套的 v3.1.0 发布说明 记录了首个版本的细节。整个周期可以归纳为四条主线:
| 主线 | 引入版本 | 核心内容 |
|---|---|---|
| 可定制模式提示词 | v3.1.0 | 自定义每个聊天模式的角色定义与指令 |
| 重构 Enhance Prompt | v3.1.0 | 任意提供商与 API 配置下均可使用提示词增强 |
| 自动批准聊天栏 | v3.1.3 | 聊天界面内快速批准工具调用 |
| 实验性 Unified Diff 算法 | v3.1.7 | 可在设置中开启的新的 diff 生成算法 |
此外还有 DeepSeek-R1、Mistral、VS Code Language Models 三个新提供商接入,以及配置档案(Configuration Profile)相关的多处修复。
可定制聊天模式提示词(v3.1.0)
这是 3.1 周期最具标志性的能力:每个聊天模式(Code、Architect、Ask)的角色定义(role definition)与指令(instructions)都可以被自定义。
两种定制入口
- Prompts 标签页:在 Roo Code 顶部菜单栏点击记事本图标打开 Prompts 标签页,在 Modes 标题下选择要定制的模式按钮,在 "Mode-specific Custom Instructions (optional)" 文本框中输入指令,点击 Done 保存。
- 模式专属规则文件
.clinerules-mode:为特定模式(例如 code)在工作区根目录提供规则文件,Roo Code 会自动加载并追加到系统提示词中。
关于规则文件更完整的机制,custom-instructions.md 中提供了详细的目录结构与加载顺序说明:当前仓库采用目录优先的方案,工作区级规则位于.roo/rules/与.roo/rules-{modeSlug}/,单文件回退方案为.roorules与.roorules-{modeSlug};全局规则位于~/.roo/rules/与~/.roo/rules-{modeSlug}/(Windows 为%USERPROFILE%\.roo\...)。加载顺序为:全局规则 → 项目规则(冲突时项目规则优先),模式专属规则先于通用规则加载。规则目录支持递归读取(按文件名不区分大小写排序)、自动排除缓存与临时文件(如.DS_Store、*.bak、*.log、Thumbs.db),并支持符号链接(最大解析深度 5 层防止死循环)。
系统提示词中的合并格式
自定义指令最终以固定格式注入系统提示词,仓库文档给出了精确模板(节选核心结构):
==== USER'S CUSTOM INSTRUCTIONS Language Preference: [Language preference if set] Global Instructions: [Global Instructions from Prompts Tab] Mode-specific Instructions: [Mode-specific Instructions from Prompts Tab for the current mode] Rules: # Rules from rules-{modeSlug} directories: [Contents of ALL files from ~/.roo/rules-{modeSlug}/ AND .roo/rules-{modeSlug}/ if they exist] # Rules from .roorules-{modeSlug}: [Contents of .roorules-{modeSlug} file if no mode-specific directories have files] # Rules from AGENTS.md: [Contents of AGENTS.md or AGENT.md from workspace root if present and enabled] # Rules from rules directories: [Contents of ALL files from ~/.roo/rules/ AND .roo/rules/ if they exist] # Rules from .roorules: [Contents of .roorules file if no general rules directories have files] ====注意:系统会聚合所有适用目录(全局与工作区)而非二选一,模式专属规则是对通用规则的补充而非替换。仓库中的提示词测试快照(如 code-mode-rules.snap、architect-mode-prompt.snap、prioritized-instructions-order.snap)正是用来验证上述合并顺序与优先级的行为,可作为阅读底层合并逻辑(src/core/prompts/)的切入点。
提示:若要与自定义模式组合使用,可参考 custom-modes.mdx,为不同模式配置专属的工具权限、文件限制与指令,构建更细粒度的专用工作环境。
重构的 Prompt Enhancements(v3.1.0)
3.1 之前的 Enhance Prompt 功能受提供商限制,而 v3.1.0 的重构使其在任何提供商与 API 配置下都能工作,并且提示词本身完全可定制。
从源码测试(src/utils/tests/enhance-prompt.spec.ts)可以看到该功能的实现契约:
- 未提供自定义增强提示词时,使用内置默认提示模板;
- 提供自定义模板时,模板中的
${userInput}占位符会被替换为实际输入内容(测试中customEnhancePrompt + "\n\n${userInput}"最终以自定义提示 + \n\n + 用户输入的形式调用模型的completePrompt); - 空输入会抛出 "No prompt text provided";
- 缺少有效 API 配置会抛出 "No valid API configuration provided";
- 提供商不支持提示增强(未实现
completePrompt)会抛出 "The selected API provider does not support prompt enhancement"; - 模型选择跟随当前配置的提供商(测试中切换为 openrouter 配置后仍能正常工作)。
这解释了「任意提供商可用」的底层原理:增强逻辑通过 single-completion-handler 调用当前 API 配置对应的 handler,只要该 handler 实现了单次补全接口(SingleCompletionHandler.completePrompt),就可以完成一次独立的提示词改写请求,不依赖特定厂商的专用接口;模板的生成则依赖 support-prompt.ts 中的supportPrompt.create("ENHANCE", ...)。
自动批准聊天栏(v3.1.3)
v3.1.3 新增了自动批准(Auto-Approve)聊天栏,用于加速交互:当任务运行到需要工具调用或操作确认时,可以直接在聊天界面内快速批准,省去切换设置面板的步骤。它与既有的自动批准机制(src/core/auto-approval/)配合使用——该目录下包含 AutoApprovalHandler、tools、commands、mcp 等模块,分别管理工具调用、命令执行与 MCP 操作的自动批准规则。聊天栏的引入让用户不必关闭自动批准也能保持对关键步骤的控制权。v3.1.4 至 v3.1.5 还修复了自动批准菜单本身的一些缺陷。
实验性 Unified Diff 算法(v3.1.7)
v3.1.7 引入了可选的实验性 Unified Diff 算法,可在设置中开启,用于替换原有的文件编辑 diff 生成路径。
从源码(src/core/diff/stats.ts)可以看到这套 diff 工具的核心能力:
sanitizeUnifiedDiff:清除 diff 中的非语义噪音,如 "No newline at end of file" 标记,并统一行尾为\n;computeUnifiedDiffStats:基于parsePatch解析 unified diff,统计新增行(+)与删除行(-)数量,解析失败时返回null以表示无法统计;convertNewFileToUnifiedDiff:对新建文件生成完整补丁(旧文件视为/dev/null,零上下文,全部行计为新增)。
该模块被 ApplyDiffTool 使用,是扩展侧(extension 后端)的 diff 规范化与统计事实来源。开启实验性算法后,ApplyDiff 产生的补丁将走这套 unified diff 处理管线;由于是实验特性,切换前建议先确认当前编辑器(DiffViewProvider,见 src/integrations/editor/DiffViewProvider.ts)对补丁的渲染兼容性。
提供商更新
DeepSeek-R1 支持(v3.1.7)
DeepSeek-R1 是 3.1 周期最重要的模型接入之一。实现位于 src/api/providers/deepseek.ts,DeepSeekHandler继承自 OpenAI 兼容 handler,关键实现点包括:
- 默认端点
https://api.deepseek.com(可通过deepSeekBaseUrl覆盖),支持通过 Azure AI Inference 路径调用; - 思考模式:当模型 ID 包含
deepseek-reasoner时,请求中会附加thinking: { type: "enabled" },并在流式响应中把reasoning_content转换为reasoning类型的流块,实现交错式思维链展示; - R1 格式消息转换:调用 convertToR1Format 合并连续的同角色消息——DeepSeek 不支持相邻同角色消息;对思考模型还会开启
mergeToolResultText,避免工具结果后的environment_details文本破坏reasoning_content的连续性; - 用量统计:重写
processUsageMetrics,将prompt_tokens_details.cache_miss_tokens与cached_tokens映射为缓存写入/读取 token,为成本核算提供数据(详见 cost.ts 相关聚合逻辑)。
Mistral 提供商(v3.1.6)
Mistral 以独立 provider 形式接入,实现在 src/api/providers/mistral.ts,MistralHandler基于官方@mistralai/mistralaiSDK:
- 自动路由:模型 ID 以
codestral-开头时走https://codestral.mistral.ai(可用mistralCodestralUrl覆盖),否则走https://api.mistral.ai; - 工具调用:函数工具转换为 Mistral 格式并强制
toolChoice = "any"以确保模型执行工具调用(这符合 Agent 工作流的需求); - 思考内容:流式响应中的
thinkingchunk 被转换为reasoning流块; - 单次补全:
completePrompt过滤掉思考内容,仅返回文本,供 Enhance Prompt 等单次生成场景复用。
VS Code Language Models(实验性,v3.1.2)
v3.1.2 起可实验性地使用 VS Code Language Models,包括 Copilot。这一能力的落地涉及配置文件档案(Configuration Profile)——v3.1.2、v3.1.6、v3.1.7 连续修复了 VSCode LM 相关的档案保存与切换问题(详见下文 Bug 修复部分)。
Glama 的 PKCE 支持(v3.1.2)
为 Glama 提供商实现了 PKCE(授权码 + PKCE)OAuth 流程支持,增强了该提供商下的授权安全性。
体验改进与界面优化
- 从聊天中复制 Markdown(v3.1.0):聊天消息新增复制 Markdown 原文按钮,方便把对话内容导出到文档或代码审查工具。
- 模糊搜索改进(v3.1.2):增强 mentions、历史记录、模型列表中的模糊搜索匹配,提升大量项目/模型场景下的查找效率。
- Light+ 主题视觉修复(v3.1.1):修复浅色主题下聊天输入框与设置界面的视觉错位问题。
Bug 修复
- 配置档案(Configuration Profile)修复(v3.1.2 / v3.1.6 / v3.1.7):连续多个版本处理档案保存与切换问题,尤其是 VSCode LM 相关档案的稳定性,保障了多套 API 配置之间的可靠切换。
- 自动批准菜单修复(v3.1.4 – v3.1.5):修正自动批准菜单的交互与显示问题。
- VS Code Language Models 集成 Bug(v3.1.3):修复该集成的集成错误。
其他改进
- VSCode 引擎要求升级(v3.0.3):要求的 VSCode 引擎版本更新为
^1.84.0,与 Cline 保持一致。这是安装扩展时的前提条件,低于该版本会无法安装。 - o1 模型使用
developer消息(v3.1.2):针对 o1 系列将系统提示词改为以developer角色发送,适配 OpenAI 对该系列模型的角色要求。
如何获取该版本
3.1 系列的特性已并入后续主版本(当前仓库的 CHANGELOG 位于根目录 CHANGELOG.md)。若需安装或升级扩展,请从 VS Code 扩展市场搜索 Roo Code 并按文档 getting-started 中的指引配置提供商与模型。需要注意的是,文中涉及的实验性特性(Unified Diff、VSCode LM)与特定模型行为以对应版本的实际表现为准,正式环境使用前建议先在独立工作区验证。
各发布说明的完整目录位于 apps/docs/docs/update-notes/,其中 v3.1.0.md 记录了 3.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),仅供参考