ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Warp 中禁用 AI 规则建议(Suggested Rules):设置设计与源码实现解析

Warp 中禁用 AI 规则建议(Suggested Rules):设置设计与源码实现解析 桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载导读本文围绕 Warpagentic 开发环境中一项面向用户的新设置——**Suggested Rules建议规则**展开讲解如何通过设置开关与 TOML 配置键关闭 AI 在 agent 回复完成后展示的建议保存规则内联 chips。读者将了解该功能的产品行为定义、Settings → Oz → Knowledge 页面的呈现规则、agents.warp_agent.active_ai.rule_suggestions_enabled配置项的读写机制以及底层渲染强制执行点与Dont show again按钮的实现细节。该功能的产品规格见 specs/andy/ad-hoc/disable-suggested-rules/PRODUCT.md技术设计见同目录下的 TECH.md本文结合当前仓库源码对两者进行系统化展开。一、功能背景什么是规则建议 chips在 Warp 的 Agent 模式下一次 agent 回复结束后AI 会在回复块的底部渲染一组内联规则建议 chipsrule-suggestion chips用于提示用户可以将本次交互中总结出的行为保存为规则Rules。这些 chips 由FeatureFlag::SuggestedRules功能开关统一控制相关枚举定义在 crates/warp_features/src/lib.rsSuggestedRules与SuggestedAgentModeWorkflows相邻声明。Suggested Rules 设置的目标是让用户可以通过一个用户可见的开关彻底关闭这类规则建议 chips 的展示从而在不需要让 AI 帮忙沉淀规则的工作流中获得更干净、更专注的回复界面。二、产品行为总览PRODUCT.md 将功能拆解为 11 条明确行为核心结论可归纳如下行为维度具体规则设置位置Settings → Oz → Knowledge 的Knowledge分区紧邻现有Rules开关下方显示条件仅当SuggestedRulesfeature flag 开启时该开关才出现在设置界面默认值默认开启true开关描述Let AI suggest rules to save based on your interactions.开启时行为不变agent 回复完成后仍会在回复块底部展示规则建议 chips关闭时所有 agent 回复块不再展示规则建议 chips已渲染的历史建议不会被回溯隐藏只影响未来回复与 Rules 开关的关系相互独立关闭 Rules 不会自动关闭 Suggested Rules反之亦然云同步通过标准全局同步机制跨设备同步与 Prompt Suggestions 等 Active AI 设置一致全局 AI 关闭时开关置灰不可交互与所有其他 AI 子设置保持一致feature flag 关闭时设置界面不显示该开关但已持久化的值仍被保留重新开启 flag 后恢复用户偏好额外按钮建议 footer 中出现Dont show again按钮位于现有Dismiss左侧点击后永久关闭该设置并立即移除当前块的建议 chips同时需注意边界Agent mode workflow suggestion chips无规则建议时的兜底提示不受此设置影响它们由SuggestedAgentModeWorkflows这个独立的 feature flag 控制。三、设置入口与 UI 呈现3.1 Knowledge 页面的挂载逻辑Knowledge 页面的 widget 组装逻辑位于 app/src/settings_view/knowledge_page.rs 的build_page()fn build_page() - PageTypeSelf { let mut widgets: VecBoxdyn SettingsWidgetView Self Vec::new(); if FeatureFlag::AIRules.is_enabled() { widgets.push(Box::new(RulesWidget::default())); if FeatureFlag::SuggestedRules.is_enabled() { widgets.push(Box::new(SuggestedRulesWidget::default())); } widgets.extend([ Box::new(ManageRulesWidget::default()), Box::new(WarpDriveContextWidget::default()), ]); } PageType::new_uncategorized(widgets, Some(PageTitle::new(PAGE_TITLE))) }从源码可以确认两条页面组织规则Suggested Rules 开关只有在AIRules与SuggestedRules两个 flag 都开启时才渲染且位置紧跟在RulesWidget之后、ManageRulesWidget与WarpDriveContextWidget之前与 PRODUCT.md 中直接位于 Rules 开关下方的描述吻合当SuggestedRulesflag 关闭时SuggestedRulesWidget不会进入 widget 列表即设置界面完全不显示该开关对应行为 9。由于SuggestedRulesWidget仅在页面构建时按 flag 条件插入此前已持久化的配置值不会丢失后续 flag 重新开启即可恢复显示与用户偏好。3.2 开关的渲染与交互SuggestedRulesWidget通过render_ai_setting_toggle::RuleSuggestionsEnabled渲染开关行读取ai_settings.rule_suggestions_enabled_internal作为当前状态并使用is_any_ai_enabled作为is_toggleable参数——这与 Rules 开关ToggleRules使用同一参数口径而不是更严格的is_active_ai_enabled。这意味着只要全局 AI 开关Oz开启Knowledge 分区内的子开关包括 Suggested Rules即可交互全局 AI 关闭时这些开关会统一置灰。页面将开关动作建模为KnowledgePageAction::ToggleRuleSuggestions其处理函数如下KnowledgePageAction::ToggleRuleSuggestions { AISettings::handle(ctx).update(ctx, |settings, ctx| { let _ settings .rule_suggestions_enabled_internal .toggle_and_save_value(ctx); }); ctx.notify(); }toggle_and_save_value是 settings 框架提供的原子操作翻转内部值并立即落盘保存这也是点击开关即持久化、下次启动依然生效行为 7的实现来源。四、配置项TOML 键与设置组定义4.1rule_suggestions_enabled_internal字段设置项本体定义在 app/src/settings/ai.rs 的define_settings_group!(AISettings, …)宏中紧邻prompt_suggestions_enabled_internal之后// This field should not be referenced directly to lookup Rule Suggestions // enablement -- use the is_rule_suggestions_enabled() getter. rule_suggestions_enabled_internal: RuleSuggestionsEnabled { type: bool, default: true, supported_platforms: SupportedPlatforms::ALL, sync_to_cloud: SyncToCloud::Globally(RespectUserSyncSetting::Yes), surface: settings::SettingSurfaces::GUI, private: false, toml_path: agents.warp_agent.active_ai.rule_suggestions_enabled, description: Controls whether the agent suggests rules to save after responses., feature_flag: FeatureFlag::SuggestedRules, }各字段含义与影响字段值说明typebool开关类型默认值true对应行为 2默认开启supported_platformsSupportedPlatforms::ALL全平台macOS / Windows / Linux可用sync_to_cloudGlobally(RespectUserSyncSetting::Yes)走标准全局云同步尊重用户自身的同步偏好设置行为 6 的实现来源surfaceGUI仅暴露给图形界面设置页privatefalse非私有设置toml_pathagents.warp_agent.active_ai.rule_suggestions_enabled用户配置文件中对应的 TOML 键路径feature_flagFeatureFlag::SuggestedRules使该设置从用户可见 JSON schema 中排除除非当前构建渠道启用了该 flag行为 9 的机制来源4.2 用户在配置文件中设置由于toml_path为agents.warp_agent.active_ai.rule_suggestions_enabled用户可以直接在 Warp 的 settings TOML 文件中写入[agents.warp_agent.active_ai] rule_suggestions_enabled false保存后下次启动即生效行为 7。需要注意该键位于active_ai分组下与prompt_suggestions_enabled_internalPrompt Suggestions等Active AI 功能开关同组共享同一套读取与同步逻辑。4.3 读取入口is_rule_suggestions_enabled()getter设置组的注释明确要求不得直接引用内部字段判断开关状态必须使用 getter。getter 定义如下pub fn is_rule_suggestions_enabled(self, app: warpui::AppContext) - bool { self.is_active_ai_enabled(app) *self.rule_suggestions_enabled_internal }这个 getter 沿用了 Prompt Suggestionsis_prompt_suggestions_enabled与 Code Suggestionsis_code_suggestions_enabled完全相同的opt-out Active AI 设置模式返回值是is_active_ai_enabled(app)与内部字段值的逻辑与。这意味着即使内部值仍为true只要 Active AI 整体不可用全局 AI 关闭或当前执行模式不允许 Active AI该 getter 也会返回false——这正是开关置灰 功能不生效双重保证的源码级体现。五、渲染强制执行点handle_complete_output规则建议 chips 的创建集中在 app/src/ai/blocklist/block.rs 的handle_complete_output中这是唯一的渲染入口TECH.md 明确没有其他代码路径渲染规则建议 chips。守卫条件从原先的单一 flag 检查扩展为双重检查if FeatureFlag::SuggestedRules.is_enabled() AISettings::as_ref(ctx).is_rule_suggestions_enabled(ctx) { // Ensure we dont suggest rules that were already suggested and saved by checking the logging id. let existing_suggestions self .suggested_rules .iter() .map(|rule| rule.read(ctx, |rule, _| rule.logging_id())) .collect_vec(); ... }从源码结构可以推断其工作流方法先读取历史模型中existing_suggestions_for_conversation已存在的建议并与本次output.suggestions合并仅当 feature flag 开启且用户设置 getter 返回true时才进入基于logging_id去重、生成SuggestionChipView实例的逻辑分支开关关闭时整个分支被短路suggested_rules保持为空回复块底部不会渲染任何规则建议 chips行为 4。由于handle_complete_output是唯一 chokepoint因此无需在其他渲染路径重复检查——这是该实现单点守卫设计的核心优点也保证了开关行为在 GUI 全场景新对话、恢复会话、后续回复的一致性。需要强调的是该守卫只影响新完成回复的 chips 渲染已在屏幕上渲染的历史建议不会因为开关翻转而被回溯隐藏与行为 4 的描述完全一致。六、Dont show again按钮的实现当回复块底部展示规则建议 chips 时footer 会额外出现Dont show again按钮位于现有Dismiss按钮左侧。其实现分散在三个文件中。6.1 按钮创建block.rs在AIBlock::new中与既有的dismiss_suggestion_button并列创建let dismiss_suggestion_button ctx.add_typed_action_view(|_| { ActionButton::new(Dismiss, SuggestionDismissButtonTheme) .with_icon(Icon::X) .with_size(ButtonSize::Small) .on_click(|ctx| { ctx.dispatch_typed_action(AIBlockAction::DismissSuggestionsSection); }) }); let disable_rule_suggestions_button ctx.add_typed_action_view(|_| { ActionButton::new(Dont show again, SuggestionDismissButtonTheme) .with_size(ButtonSize::Small) .on_click(|ctx| { ctx.dispatch_typed_action(AIBlockAction::DisableRuleSuggestions); }) });两个按钮共用SuggestionDismissButtonTheme视觉风格一致差异在于点击后分发的 action 不同。6.2 footer 组装view_impl/output.rsTECH.md 描述render_suggested_rules_and_prompts_footer的改动构造right_buttons行时在has_suggested_rules为true的情况下将disable_rule_suggestions_button带margin_right: 4.0前置插入到dismiss_suggestion_button之前。footer 的渲染同时负责规则建议 chips 与 workflow 建议 chips仅当存在规则建议时才附加该按钮。Props通过新增字段disable_rule_suggestions_button: a ViewHandleActionButton将句柄传入输出视图并由 app/src/ai/blocklist/block/view_impl.rs 在构造Props时传递self.disable_rule_suggestions_button。6.3 点击处理AIBlockAction::DisableRuleSuggestionsaction 处理器依次执行三步见 block.rs 的 action 分发AIBlockAction::DisableRuleSuggestions { // Dismiss the current suggestions and permanently disable future ones. BlocklistAIHistoryModel::handle(ctx).update(ctx, |model, _| { if let Some(conversation) model.conversation_mut(self.client_ids.conversation_id) { conversation.dismiss_current_suggestions(); } }); AISettings::handle(ctx).update(ctx, |settings, ctx| { report_if_error!( settings .rule_suggestions_enabled_internal .set_value(false, ctx) ); }); ctx.notify(); }持久化当前会话的 dismiss 状态调用conversation.dismiss_current_suggestions()将本次会话中已拒绝建议的状态写入历史模型保证该会话内不再重现永久关闭设置通过rule_suggestions_enabled_internal.set_value(false, ctx)将设置写为false与在设置页手动关闭开关效果完全一致行为 11立即清空当前块ctx.notify()触发重绘后结合self.suggested_rules.clear()对 chip 视图的清除即使conversation.existing_suggestions尚未由mark_request_completed填充footer 也能立即消失。set_value与toggle_and_save_value同样会持久化到用户配置因此该按钮等效于设置页开关关闭 当前块建议即时移除的组合操作。七、与其他开关、flag 的关系辨析这一功能涉及多个易混淆的开关与 flag理清边界对配置排查很有帮助名称类型作用范围相互影响Rulesmemory_enabled设置开关决定已保存的规则是否包含进 agent 请求与 Suggested Rules 相互独立关闭一方不影响另一方行为 5Suggested Rulesrule_suggestions_enabled_internal设置开关决定回复完成后是否展示规则建议 chips本文主角Oz 全局 AIis_any_ai_enabled顶层开关控制所有 AI 子设置的可用性关闭后 Suggested Rules 开关置灰不可交互行为 8FeatureFlag::SuggestedRules构建期 feature flag控制功能在渠道中的可见性与代码分支关闭时设置界面不显示该开关但持久化值保留行为 9FeatureFlag::SuggestedAgentModeWorkflows独立 feature flag控制 Agent mode workflow 建议 chips无规则建议时的兜底不受 Suggested Rules 设置影响行为 10从 Knowledge 页面的 action 绑定add_toggle_setting_action_pairs_as_bindings还可以看到Suggested Rules绑定的启用条件是FeatureFlag::AIRules.is_enabled() FeatureFlag::SuggestedRules.is_enabled()而上下文约束为IS_ANY_AI_ENABLED这从键盘/命令入口维度再次印证了需要 Rules 功能存在 全局 AI 开启的双重前提。八、云同步与跨设备行为rule_suggestions_enabled_internal配置了SyncToCloud::Globally(RespectUserSyncSetting::Yes)与 Prompt Suggestionsprompt_suggestions_enabled_internal同一分组内的同构字段保持一致该设置值随全局同步机制跨设备传播且尊重用户在设置同步中自行设定的偏好即用户可以单独关闭该项的云同步。由于是全局非 per-device同步某一台设备上的开关翻转会反映到其他已登录设备但最终生效值以各设备本地缓存与同步结果的合并为准。TECH.md 明确指出这是其他 Active AI 设置如 Prompt Suggestions已存在的 opt-out 模式的原样复用因此其读写、校验、冲突合并行为与既有同步设置完全一致无需特殊处理。九、测试与验证要点TECH.md 给出了与该功能对应的行为级验证清单覆盖全部 11 条产品行为中的关键项可作为开发者自测或 QA 的对照表开关位置与默认值打开 Settings → Knowledge确认 Suggested Rules 开关出现在 Rules 开关下方且默认为开启行为 1、2开启 chips 正常展示开关开启时发起一次会返回规则建议的 agent 交互确认 chips 与历史行为一致行为 3关闭 chips 被抑制关闭开关后发起新的 agent 交互确认不再出现规则建议 chips同会话内此前已渲染的 chips 仍然可见行为 4独立性关闭 Rules 开关确认 Suggested Rules 状态不变反之亦然行为 5全局 AI 关闭关闭全局 AI确认 Suggested Rules 开关置灰且不可交互行为 8无 flag 的构建在未启用SuggestedRules的构建中确认设置界面不出现该开关行为 9。十、小结Suggested Rules 是 Warp 中一个典型的opt-out Active AI 设置产品层面通过 PRODUCT.md 定义了 11 条精确行为技术层面通过 TECH.md 拆解为四处改动——设置组字段与 getterapp/src/settings/ai.rs、渲染 chokepoint 守卫app/src/ai/blocklist/block.rs、Knowledge 页 UI 开关app/src/settings_view/knowledge_page.rs以及 footer 的 Dont show again 按钮。它复用了 Prompt Suggestions / Code Suggestions 的成熟模式以单个 getter 加单一渲染守卫实现全场景一致性并通过SyncToCloud::Globally获得跨设备同步能力。对用户而言最直接的用法即是在 Settings → Oz → Knowledge 中关闭 Suggested Rules或在任一回复块的建议 footer 中点击 Dont show again对开发者而言只需记住agents.warp_agent.active_ai.rule_suggestions_enabled这个 TOML 键与is_rule_suggestions_enabled()这个唯一读取入口即可。赞分享桌面应用开发者工具人工智能AI 应用AI Agent代码智能体【免费下载链接】warpWarp is an agentic development environment, born out of the terminal.项目地址https://gitcode.com/GitHub_Trending/wa/warp点击查看免费下载相关推荐Warp 规则建议Suggested Rules开关全链路实现解析配置项、渲染守卫与设置页联动Warp 规则建议Suggested Rules开关全链路实现解析配置项、渲染守卫与设置页联动 本文围绕 Warp 开源仓库中禁用 AI 规则建议Su桌面应用开发者工具人工智能AI 应用AI Agent代码智能体Warp 中的 figma-create-design-system-rules 技能实战为 AI 编码代理生成项目级设计系统规则Warp 中的 figma create design system rules 技能实战为 AI 编码代理生成项目级设计系统规则 导读 figma crea桌面应用开发者工具人工智能AI 应用AI Agent代码智能体Thanos 规则联邦Global / Federated Rules API 的设计、去重算法与源码实现Thanos 规则联邦Global / Federated Rules API 的设计、去重算法与源码实现 Thanos 的 Rules gRPC 服务把 P可观测性云原生时序数据库运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表