两个地方都注册了名为review-checklist的Skill,为什么只看到其中一个?调整rank后,为什么结果还是没变?
先分清两件事:这些注册是否在同一个作用域层,以及同一层里谁先胜出。rank不是所有Skill放在一起的全局排名。在这里检查的0.2.1-rc.2中,先选出每一层的同名胜者,再合并作用域层;靠近当前作用域的同名项会覆盖全局项。
本文只解释这个选择过程。实验调用实际的SkillRegistry与dsh-scope,用几个受控provider返回同名候选;不扫描日常技能目录,也不让模型执行技能。
1. 先看同一层:rank小的优先
provider是向注册表提供技能候选的数据源。每个候选除了名称、说明,还有用于选择顺序的rank。文件系统provider是其中一种,实验则用几个只返回固定数据的provider,方便隔离比较规则。
同一层内,注册表依次比较:
- rank,数字小的先。
- rank相同,provider先注册的先。
- 同一个provider、rank也相同,候选列表中靠前的先。
源码里的比较器是:
returnleft.candidate.rank