跳到正文

Skills

declare-when-a-setting-takes-effect

保存成功却要重启才生效的设置,比保存失败还糟。说明它何时生效,并从读取它的地方推导出来。

模式来源: clean状态: activev0.1.0 · Apache-2.0

由读过该卡片的评审者赋予,而不是文件自我声明的。智能体在处理不可信内容的运行中提炼出的卡片,生来即被标记为受污染,在被检索之前会一直等待评审。

何时会想到它

  • 加一个设置页
  • 配置被缓存了
  • 我改了怎么没生效
  • 重启后才生效

价值通常在「避免」和「检查」里。「该做」是人人都会写的那一节。

上面的卡片正文是译文。英文原文才是 CLI 导入的内容、智能体运行时读取的内容,也是下方哈希所证明的内容。

触发

你正在用户界面里暴露一个设置项,而消费这个值的代码并不是每次使用都去读取它,而是在某个特定时刻读取:进程启动时、会话(session)构建时,或读入某个被缓存的对象里。

这条不适用于每次使用都会重新读取的设置项。那些设置项会立即生效,应该什么都不说——为一个根本不存在的延迟加上一句说明,教会用户的不信任,和漏掉说明是一样的。

该做

  1. 对每一个设置项,找到读取它的那一行代码。它何时生效,是那一行代码的属性,不是那个控件的属性。
  2. 优先让它变成实时读取。一个在被访问时才解析的属性通常不花什么成本,而且是消除问题而不是描述问题。
  3. 在真的做不到的地方——比如某样东西是在启动时初始化的——就给它加标签,并且这个标签要从服务器,或者从了解读取位置的那同一个模块生成,这样标签就不会走样。
  4. 把标签归入有意义的类别:现在生效、下次对话生效、重启后生效。

避免

一个确认保存成功、实际上却什么都没做的设置页面。这比报错还糟:报错会让用户去找原因,而"成功"提示会让他们去怪罪这个功能、这个模型,或者怪自己。

避免在界面里把"需要重启"的清单写死。那份清单是对存在于别处的知识的一份拷贝,一旦某个读取位置发生变动,它就会悄悄过时——而这正是最初那个问题产生的方式。

避免笼统地写一句"部分设置需要重启"。这话是真的,但没用,而且会连带覆盖那些其实不需要重启的设置。

检查

修改这个设置,使用这个功能,然后观察行为——而不是观察屏幕。要从正在运行的系统里把值读回来,而不是从你刚提交的表单里读。

机械化的版本是:断言没有任何设置项被错误地标为立即生效,并且断言界面暴露的每一个设置项都出现在服务器发布的分类里。

风险

标签会给设置页面增加噪音,一个每一行都挂着徽章的页面,等于徽章什么都没说明。只有那些延迟生效的设置才需要标签。

更深层的风险是把加标签当成解决方案本身。声明一个控件在重启前都不起作用,这是诚实的做法;让它变成实时生效则更好,标签不应该变成一种回避更难的那个改动的舒适借口。

如何使用

卡片就是数据。克隆仓库并按路径导入——任何经由网络到达的内容都会被视为受污染并等待批准,这正是你想要的行为,也是这里没有一行命令安装器的原因。

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/declare-when-a-setting-takes-effect/SKILL.md

完整性

文件发布版本的 SHA-256。导入方可以据此核对收到的内容与本页展示的一致。

2f1c9fd86ac24a61af75b11945b5042d1a2b53ef081cd9a87c3031d5fa97fcf3

在仓库中阅读该卡片