Solon AI 提供了灵活的技能注册机制，你可以根据技能的生命周期需求，选择将其注册为全局默认技能，或者在单次请求中动态注入。



### 1、全局默认注册（静态配置）


如果你希望某个技能（如：基础安全审计、通用常识、全局翻译）在 ChatModel 的每一次对话中都生效，可以在构建 ChatModel 时通过 Builder 进行注册。


```java
ChatModel model = ChatModel.of(config)
        .defaultSkillAdd(skill) //或者（带优先级） .defaultSkillAdd(index, skill) 
        .build();
       
```

### 2、单次请求注入（动态覆盖）

在某些复杂的业务场景中，你可能需要根据当前的上下文（如：不同的业务入口、不同的用户角色）动态地决定加载哪些技能。


```java
model.prompt("...")
    .options(o -> o.skillAdd(skill)) //或者（带优先级） o.skillAdd(index, skill) 
    .call();
```


### 3、技能的执行优先级（顺序）


当多个技能同时存在时，Solon AI 会按照注册顺序依次调用各技能的 injectInstruction 方法。

* 顺序执行：技能指令会按序累加到 System Message 中。
* 工具染色：各技能自带的工具会自动打上所属技能的标签，模型会根据 System Message 中定义的 SOP 逻辑，选择最合适的技能工具进行调用。



指定执行顺序：

```java
model.prompt("...")
    .options(o -> o.skillAdd(2, skill)) //（带优先级）
    .call();
```



### 4、与 Tool 注册的关系

技能注册不仅注入了 Prompt 指令，同时也完成了其内部 getTools() 集合的自动注册。你无需再手动调用 defaultToolAdd 来挂载属于该技能的工具。


**提示：** 如果一个功能只需要“执行逻辑”而不需要“SOP 指令约束”，建议使用工具形态； 如果该功能包含复杂的业务逻辑、需要动态准入、或者需要引导模型的思考路径，则强烈建议封装为 Skill。
