拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Roo Code 2.2.33 深度解析:Enhance Prompt 一键增强提示词与 OpenAI 兼容 Provider 模型列表支持

Roo Code 2.2.33 深度解析Enhance Prompt 一键增强提示词与 OpenAI 兼容 Provider 模型列表支持【免费下载链接】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 2.2.33 是一次聚焦于输入体验与Provider 兼容性的小版本迭代核心包含两大变化为聊天输入框引入 Enhance Prompt提示词增强按钮让 AI 在发送前自动改写、润色你的原始请求同时为 OpenAI 兼容 Provider 增加模型列表拉取能力使模型下拉菜单不再依赖硬编码。本文将基于仓库中的 2.2.33 发布说明、Enhance Prompt 功能文档 以及相关源码与测试逐层拆解这两个功能的使用方式、配置要点与底层实现原理。一、版本概览2.2.33 带来了什么根据 v2.2.33 发布说明本次发布围绕两个能力展开新增 Enhance Prompt 按钮最初仅面向 OpenRouter 模型开放用于在发送消息前自动增强提示词新增 OpenAI 兼容 Provider 的模型列表支持允许从 Provider 动态拉取可用模型列表社区贡献来自 samhvw8。在 2.2 系列版本发布说明 的 QOL Improvements UI 一节中这两项也被并列记录为 Enhance prompt Button (OpenRouter) 与 List Models for OpenAI Compatible可见它们是该版本周期内重要的质量提升项。其中 Enhance Prompt 后来演变为一个覆盖所有支持completePrompt能力的 Provider 的通用功能并有独立的 功能文档 详细描述。下面分别深入这两项能力。二、Enhance Prompt一键优化你的提问2.1 为什么需要增强提示词在把消息发送给模型之前用户的原始输入往往存在表达含糊、上下文缺失、指令不完整等问题。Enhance Prompt 的作用就是让 Roo Code 在发送前自动重写这段输入带来以下收益详见 enhance-prompt.md提升清晰度把口语化、零散的描述改写成模型更易理解的规范表达补充上下文可在提示词中加入当前文件路径、选中的代码等上下文信息强化指令为模型补充输出格式、详细程度等指导性要求消除歧义避免模型对用户意图产生多种解读保持一致性Roo 以统一的模板风格向模型发送增强请求输出格式稳定上下文感知建议开启后会结合最近的会话历史生成更贴合当前工作语境的增强结果。2.2 使用步骤按照功能文档Enhance Prompt 的使用非常简单输入原始提示词像平常一样在 Roo Code 聊天输入框中输入请求可以是一句简单的提问也可以是一段复杂的任务描述点击魔棒图标Wand Icon不要按 Enter而是点击输入框右上角的魔棒按钮。处理期间魔棒会旋转提示正在工作审查增强结果Roo Code 会用增强后的版本替换你的原始输入。请确认它准确反映了你的意图也可以继续手动微调如果对结果不满意按CtrlZMac 为CmdZ即可撤销增强恢复原始提示词发送增强后的提示词按 Enter 或点击发送按钮将增强结果发送给 Roo Code。2.3 特殊行为空输入增强如果输入框为空就点击增强按钮Roo 会显示一条说明信息解释该功能的用途方便新用户了解。消息队列支持即使当前处于消息发送被禁用的状态增强按钮依然可用。这样你可以先把消息排队再逐条增强稍后统一发送见 ChatTextArea.tsx 中handleEnhancePrompt对输入为空的兜底处理。从 ChatTextArea.tsx 的源码可以看到前端的行为handleEnhancePrompt会先对输入做trim()非空则置位增强状态并通过vscode.postMessage({ type: enhancePrompt, text })把请求发给扩展宿主为空则直接在输入框填入功能说明文案。三、自定义增强过程模板、占位符与测试3.1 默认增强模板Enhance Prompt 使用可定制的提示词模板其默认模板为Generate an enhanced version of this prompt (reply with only the enhanced prompt - no conversation, explanations, lead-in, bullet points, placeholders, or surrounding quotes): ${userInput}其中${userInput}是占位符实际发送时会被替换成你的原始提示词。模板严格约束模型只输出增强后的提示词本身——不要对话、解释、铺垫、项目符号、占位符或引号——这是保证增强结果可直接回填到输入框的关键设计。在源码中这一默认模板定义于 support-prompt.ts 的ENHANCE配置项。该文件是一个支持型提示词的集中管理模块除ENHANCE外还统一定义了CONDENSE对话压缩、EXPLAIN解释代码、FIX修复问题、IMPROVE改进代码、ADD_TO_CONTEXT加入上下文等模板supportPrompt.get()会优先读取用户自定义模板未定义时才回退到默认模板。3.2 修改增强模板打开设置面板点击 Roo Code 面板中的齿轮图标进入Prompts提示词标签页在下拉菜单中选择ENHANCE即可查看并编辑增强提示词模板。你可以按需修改使其更贴合目标模型的提示词风格。3.3 自定义模板如何生效从测试用例 enhance-prompt.spec.ts 可以看到自定义模板的解析逻辑当提供自定义模板You are a custom prompt enhancer\n\n${userInput}时supportPrompt.create(ENHANCE, { userInput: Test prompt }, customPrompts)会先把${userInput}替换为实际输入再将完整文本交给singleCompletionHandler最终调用底层 API 的completePrompt方法。3.4 测试你的自定义提示词Prompts 设置界面内置了测试区编辑完增强提示词后找到 Test Enhancement 区域输入一条示例提示词点击 Test 预览你的自定义模板实际增强效果根据结果继续调整模板。对应 UI 实现在 PromptsSettings.tsx它会监听类型为enhancedPrompt的返回消息并展示增强预览。四、API 配置为增强单独指定 Provider默认情况下Enhance Prompt 复用当前 Roo Code 任务所使用的 API 配置但你也可以为增强功能单独指定一个 Provider/模型打开 Roo Code 设置进入Prompts标签页在下拉菜单选择ENHANCE在 API Configuration 下拉框中选择一个已有的 API 配置此后所有增强请求都会发往该配置对应的 Provider 与模型。底层实现位于 messageEnhancer.tsenhanceMessage会先检查是否设置了enhancementApiConfigId若该 ID 能在listApiConfigMeta中找到就通过providerSettingsManager.getProfile({ id })取回该配置并使用否则回退到当前任务的apiConfiguration。UI 上的选择结果通过enhancementApiConfigId消息类型持久化见 webviewMessageHandler.ts 中的enhancementApiConfigId分支。五、上下文感知增强让历史对话参与改写5.1 工作原理当开启任务历史上下文后增强过程会把当前会话的最近 10 条消息作为上下文提供给模型使其能够理解你正在进行的实际工作与之前的讨论保持一致避免提出无关或错误的增强建议给出更具针对性的提示词改进。5.2 开启方式打开 Roo Code 设置进入Prompts标签页选择ENHANCE勾选或取消 Include task history in enhancement 选项。关闭后增强只基于当前输入的提示词不携带任何会话上下文。5.3 源码视角的实现细节在 messageEnhancer.ts 中extractTaskHistory方法负责从ClineMessage[]中筛选可用消息仅保留两类消息用户消息type ask且含文本与助手文本消息type say且say text通过.slice(-10)只取最近 10 条避免上下文爆炸每条消息按User:/Assistant:前缀拼接且单条内容截断到 500 字符超出部分以...结尾。随后enhanceMessage会把历史拼接进待增强文本${text}\n\nUse the following previous conversation context as needed:\n${taskHistory}再交给supportPrompt.create(ENHANCE, ...)组装完整请求见 messageEnhancer.ts。六、底层调用链从魔棒图标到增强文本综合上面的分析Enhance Prompt 的完整链路是前端ChatTextArea.tsx 的魔棒按钮触发handleEnhancePrompt通过vscode.postMessage({ type: enhancePrompt, text })发往扩展宿主宿主消息分发webviewMessageHandler.ts 的enhancePrompt分支读取全局状态apiConfiguration、customSupportPrompts、enhancementApiConfigId、includeTaskHistoryInEnhance等调用MessageEnhancer.enhanceMessage成功后把结果以enhancedPrompt消息回传 Webview失败则弹出错误提示增强逻辑messageEnhancer.ts 负责选择 API 配置、拼装上下文历史、调用supportPrompt.create生成完整提示词最后交给singleCompletionHandler轻量完成请求single-completion-handler.ts 是整个机制的关键——它不创建完整的 Cline 任务或任务历史只用 API 的单次补全能力完成增强。它会校验输入非空、存在有效的 API 配置并检测 handler 是否实现了completePrompt方法若 Provider 不支持则抛出 The selected API provider does not support prompt enhancementProvider 层以 OpenAI 兼容 Provider 为例base-openai-compatible-provider.ts 的completePrompt会构造单条user消息的 Chat Completions 请求按需附带 reasoning 参数最终返回response.choices[0].message.content。对应的单元测试 enhance-prompt.spec.ts 覆盖了默认模板增强、自定义模板增强、空输入报错No prompt text provided、缺少 API 配置报错No valid API configuration provided、不支持的 Provider 报错以及 API 错误传播等场景可作为理解行为边界的参考。七、视觉反馈与 UI 细节按钮外观魔棒图标默认 60% 透明度悬停时变为 100% 不透明位于输入框右上角并带有用于键盘可达性的焦点环加载状态处理增强请求期间魔棒图标旋转提供明确的正在工作反馈工具提示悬停显示 Enhance prompt with additional context帮助新用户理解按钮用途。八、限制与最佳实践实验性功能提示词增强目前属于实验性能力增强质量会随请求复杂度和底层模型能力而变化务必审查发送前一定确认增强结果符合你的意图Roo 的改写有时可能与你的本意有偏差可迭代使用可以多次点击增强按钮逐步迭代打磨提示词不能替代清晰的原始输入增强是辅助手段从源头上写出清晰、具体的需求仍然重要。九、OpenAI 兼容 Provider 的模型列表支持9.1 功能背景在 2.2.33 之前Roo Code 的模型选择主要依赖预置的模型清单。对于自定义 Base URL 的 OpenAI 兼容服务如自建网关、本地推理服务维护一份完整的模型清单既不现实也不及时。v2.2.33 引入的模型列表支持允许从 Provider 动态拉取可用模型。9.2 核心实现双层模型缓存模型拉取的统一入口是 modelCache.ts。getModels()采用两层缓存策略见该文件第 100-141 行的注释与实现内存缓存Memory cache短期存储供同一次运行内快速命中文件缓存File cache以${router}_models.json为文件名写入全局存储目录长期复用避免每次启动都发起网络请求。写入文件使用safeWriteJson且只有模型数量大于 0 时才写入缓存——注释明确指出空结果可能意味着 API 故障而非真的没有模型防止把失败的响应持久化。读取时会先用 Zod schema 校验缓存结构modelRecordSchema损坏的缓存会被安全跳过。9.3 各 Provider 的模型端点fetchModelsFromProvider通过switch按 Provider 分发请求见 modelCache.tsProvider取数方式OpenRoutergetOpenRouterModels()请求${openRouterBaseUrl || https://openrouter.ai/api/v1}/modelsRequestygetRequestyModels(baseUrl, apiKey)该端点需要 API Key 以支持用户自定义策略UnboundgetUnboundModels(apiKey)LiteLLMgetLiteLLMModels(apiKey, baseUrl)OllamagetOllamaModels(baseUrl, apiKey)LM StudiogetLMStudioModels(baseUrl)请求${baseUrl}/v1/models标准 OpenAI 兼容端点Vercel AI GatewaygetVercelAiGatewayModels()请求https://ai-gateway.vercel.sh/v1/modelsPoegetPoeModels(apiKey, baseUrl)以 openrouter.ts 的getOpenRouterModels为例它请求/models端点用 Zod 校验响应结构遍历模型列表时跳过输出模态为image的图片生成模型再通过parseOpenRouterModel转换为统一的ModelInfo。而 LM Studio 与 Vercel AI Gateway 的取数逻辑见 lmstudio.ts 及其测试中的断言直接请求${baseUrl}/v1/models这正是 OpenAI 兼容 Provider 的标准模型列表端点格式也是本次OpenAI 兼容模型列表能力的通用基础。9.4 刷新与并发保护refreshModels()用于强制刷新、绕过缓存它使用inFlightRefreshMap 记录进行中的刷新请求避免同一 Provider 的并发刷新互相覆盖见 modelCache.ts。刷新失败时如果缓存数据存在且更完整会回退到既有缓存保证用户始终有可用的模型列表。模型缓存的单元测试位于 modelCache.spec.ts覆盖了按 Provider 分发、缓存命中与刷新等关键路径。说明模型列表拉取是一个持续演进的能力。在后续版本中该机制不断扩展例如 CLI 中apps/cli/src/commands/cli/list.ts也提供了模型列表命令本文讨论的代码以当前仓库实际内容为准。十、总结Roo Code 2.2.33 用两个看似轻量的改动分别提升了发送前与选择时两个环节的体验Enhance Prompt把提示词工程的部分工作内置到聊天输入框点击魔棒即可让模型按可自定义的模板改写请求支持独立 API 配置与最近 10 条会话历史上下文其实现以singleCompletionHandler的轻量补全机制为核心避免创建完整任务的开销OpenAI 兼容 Provider 模型列表通过 modelCache.ts 的双层缓存与各 Provider 端点适配让模型下拉菜单数据可以动态刷新并以内存量与文件量双重保障可用性。如果你想进一步验证或自定义这两个功能可以依次阅读 Enhance Prompt 功能文档、v2.2 系列发布说明再对照 messageEnhancer.ts、support-prompt.ts、single-completion-handler.ts 与 modelCache.ts 的源码即可获得从 UI 到 API 的完整认知。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门