---
title: "chat - Talent（才能）"
---

Solon AI Talents（才能）。概念原型参考了 Claude Code Agent Skills 的设计思想：

* 通过结构化的定义（元数据、指令、工具）赋予 Agent 特定领域的专家能力。


关键区别：

* Solon Talents（才能），Agent 的内在能力（开发时 添加的能力）
* Claude Skills（技能），Agent 学习获得的能力（运行时 学习的能力）


Solon AI Talents 适用对像（和 Tool 一样）：

* ChatModel
* SimpleAgent
* ReActAgent
* TeamAgent


### 1、Solon AI Talents 概念介绍

在 Solon AI 体系中，Talents 是 ChatModel / Agent 领域能力的封装单元（就像微信平台的小程序）。它不只是“指令”、“工具”的集合，而是一套包含 “感知、约束、执行” 的完整逻辑块（可复用的独立封装）。

* 感知（Awareness）：通过 isSupported 接口，Talent 能够感知当前 Prompt，并决定自己是否要在本次对话中激活。
* 约束（Instruction）：通过 getInstruction 注入特定的 SOP（标准作业程序）。它告诉模型：在调用这些工具时，必须遵循哪些业务规则。
* 执行（Execution）：通过 getTools 挂载一组原子工具（FunctionTool），并自动对这些工具进行“染色”。
* 染色（Coloring）：借鉴 MCP（Model Context Protocol）思想，自动将 Talent 的元信息注入工具的元数据中。这使得大模型能够清晰地识别工具的“归属感”，从而精准地建立指令与工具之间的关联。


**核心特性**

1. 按需激活：支持根据用户意图、权限或上下文动态挂载，有效节省 Token 消耗并降低干扰。
2. 指令隔离：每个 Talent 的指令在 System Message 中以独立的 **Talent**: Name 块呈现，结构清晰，模型依从性极高。
3. 原子性与组合性：Talent 之间相互隔离，开发者可以像搭积木一样为 ChatModel 组合不同的技能集。



### 2、Talent 部署过程概述


在 Solon AI 中，一个 Talent 从定义到发挥作用经历以下生命周期：

1. 定义阶段：开发者实现 Talent 接口，编写 getInstruction（SOP 提示词）并关联 FunctionTool（具体执行工具）。
2. 注册阶段：通过 ChatModel、Agent 在构建时（或请求时），添加 Talent 实例（和 Tool 注册方式相似）。
3. 触发阶段（Runtime）：
  * 准入检查：请求发起时，框架遍历 Talent，执行 isSupported(prompt) 过滤无关技能。
  * 挂载激活：执行 onAttach 准备上下文环境。
  * 指令合并与染色：调用 injectInstruction，框架自动将所有活跃 Talent 的指令拼接到 System Message，同时将 Talent 身份注入到每个工具的 meta 数据中。
4. 推理与执行：模型根据“染色”后的工具描述进行推理，在需要时触发工具调用。



### 3、具体 Talent 接口参考


```java
package org.noear.solon.ai.chat.talent;

import org.noear.solon.ai.chat.prompt.Prompt;
import org.noear.solon.ai.chat.tool.FunctionTool;
import org.noear.solon.lang.Preview;

import java.util.Collection;

/**
 * AI 才能接口
 * <p>
 * 才能是工具(Tools)、指令(Instruction)与元数据(Metadata)的聚合体。
 * 相比于裸工具，才能具备准入检查、指令增强及工具染色能力。
 * </p>
 */
public interface Talent {
    /**
     * 是否启用
     */
    default boolean isEnabled() {
        return true;
    }

    /**
     * 获取才能名称（默认类名）
     */
    default String name() {
        return this.getClass().getSimpleName();
    }

    /**
     * 获取才能描述
     */
    default String description() {
        return null;
    }

    /**
     * 获取才能元信息
     */
    default TalentMetadata metadata() {
        return new TalentMetadata(this.name(), this.description());
    }

    /**
     * 准入检查：决定该才能在当前对话上下文中是否被激活
     *
     * @param prompt 当前提示词上下文
     * @return true 表示激活并挂载该才能
     */
    default boolean isSupported(Prompt prompt) {
        return true;
    }

    /**
     * 挂载钩子：才能被激活时触发
     * 可用于初始化会话状态、审计日志记录或上下文预处理
     */
    default void onAttach(Prompt prompt) {
    }

    /**
     * 动态指令注入：生成并注入到 System Message 的描述性文本（如果使用 MD 层级，建议从第2级开始）
     * 用于约束 AI 如何使用该才能下的工具
     */
    default String getInstruction(Prompt prompt) {
        return null;
    }

    /**
     * 动态工具注入：获取该才能挂载的所有功能工具
     */
    default Collection<FunctionTool> getTools(Prompt prompt) {
        return null;
    }
}
```