Deep Dive into Skills: Self-Evolving Agent Capabilities

Updated on 4/14/2026

title: "Deep Dive into Skills: Self-Evolving Agent Capabilities" summary: "" sortOrder: 30 status: "published"

[Translation Pending]\n\n# 第 03 期 | Skills 系统深度剖析:让 Agent 自我进化

🎯 学习目标

  • 深入理解 Hermes Agent 的 Skills 系统,掌握其在代理自进化中的核心作用。
  • 了解 Hermes Agent 如何通过内置学习循环自动创建、改进和持久化 Skills。
  • 学会从 agentskills.io 社区平台加载和使用预定义的 Skill。
  • 掌握自定义 Skill 的创建方法,并能够将其集成到 Hermes Agent 中。

📖 核心概念讲解

Hermes Agent 的核心魅力之一,便是其强大的 Skills 系统。这不仅是其实现“自进化”愿景的基石,也是区分其与传统 LLM 应用的关键特性。Skills 赋予了 Hermes Agent 执行复杂任务、从经验中学习并不断提升自身能力的能力。

3.1 什么是 Hermes Agent 的 Skills?

在 Hermes Agent 的语境中,Skill (技能) 是一段封装了特定功能、工具使用逻辑或知识的模块化代码与指令。它允许 Agent 执行超出其基础 LLM 能力范围的操作,例如:

  • 与外部世界交互:执行 shell 命令、进行网络请求、访问文件系统。
  • 处理复杂数据:解析 JSON、处理文本、进行数据转换。
  • 执行特定任务流程:例如,一个“网页搜索”Skill 可以封装调用搜索引擎 API 的逻辑;一个“代码生成”Skill 可以封装调用特定代码模型的逻辑。

每个 Skill 都包含:

  • 指令 (Instruction):描述 Skill 的用途和如何使用它。
  • 工具代码 (Tool Code):实际执行任务的 Python 代码。
  • 参数 (Parameters):Skill 接受的输入。
  • 依赖 (Dependencies):Skill 运行所需的 Python 包。

通过 Skills,Hermes Agent 可以将复杂任务分解为一系列可执行的子任务,并利用合适的 Skill 来完成每个子任务。

3.2 自进化核心:Skills 的自动创建、改进与持久化

Hermes Agent 最引人瞩目的特性是其内置的 学习循环,该循环使得 Agent 能够从经验中自动创建、改进和持久化 Skills。

3.2.1 学习循环工作原理

当 Hermes Agent 尝试完成一个复杂任务时,如果它发现现有 Skill 无法直接解决问题,或者某个操作模式被重复多次并产生了良好的结果,它就会触发学习机制:

  1. 问题识别:Agent 遇到一个它无法直接解决的问题,或者识别出可以被抽象为可重用步骤的序列。
  2. 规划与执行:Agent 可能会尝试通过分解问题、组合现有工具或直接利用 LLM 的推理能力来解决。
  3. 成功经验捕捉:当 Agent 成功完成一个复杂步骤或整个任务时,它会分析其执行路径、使用的工具和中间结果。
  4. Skill 提炼与生成:如果 Agent 识别出一种新的、有用的操作模式,它会将其抽象为一个新的 Skill。这个新 Skill 会包含执行该操作所需的指令、工具代码和参数。
    • 例如,如果你让 Agent 查找某个项目的 GitHub 仓库,然后克隆它,再列出文件。Agent 可能会从这些步骤中学习并创建一个“克隆并探索 GitHub 仓库”的 Skill。
  5. Skill 持久化:新生成的 Skill 会被保存到 Agent 的本地 Skill 库(通常是 ~/.hermes/skills 目录)中,以便在未来的会话中重用。
  6. Skill 改进:随着 Agent 执行更多任务,它可能会发现现有 Skill 的不足之处,或者有更优化的执行方式。它会根据新的经验,对现有 Skill 进行修改和完善,使其更健壮、更高效。

3.2.2 持久化机制

所有自动创建和手动添加的 Skills 都会以 YAML 或 JSON 文件的形式存储在 Agent 的本地配置目录中。这确保了 Skills 的 跨会话持久性,意味着 Agent 在重启后依然能够记住并使用它所学到的所有技能。

~/.hermes/
├── config.yaml
├── gateway.yaml
├── memory/
│   └── ...
└── skills/
    ├── auto_generated_skill_1.yaml
    ├── my_custom_skill.yaml
    └── arxiv_researcher.yaml

这种机制是 Hermes Agent 能够真正“自进化”的关键。每次成功完成任务,Agent 都有机会变得更聪明、更强大。

3.3 agentskills.io:社区共享的 Skill 宝库

为了加速 Agent 的能力建设,NousResearch 团队还提供了一个社区驱动的 Skill 共享平台:agentskills.io。这个平台汇集了由社区成员贡献和维护的各种预定义 Skill,涵盖了从基础工具(如文件操作、网络请求)到高级功能(如特定 API 调用、数据分析)的广泛领域。

3.3.1 agentskills.io 的优势

  • 开箱即用:无需手动编写,可以直接安装和使用。
  • 社区维护:许多 Skill 经过社区测试和改进,质量较高。
  • 快速启动:为 Agent 快速扩充能力,让它能立即处理更复杂的任务。

3.3.2 Skill 的结构与组成

无论是一个从 agentskills.io 下载的 Skill,还是 Agent 自动生成的,或是你手动创建的 Skill,它们都遵循一个相似的结构,通常以 YAML 或 JSON 格式定义。

以下是一个简化版的 Skill 结构示例:

# ~/.hermes/skills/simple_calculator.yaml
name: simple_calculator
instruction: |
  这是一个简单的计算器,可以执行加法、减法、乘法和除法。
  请提供两个数字和操作符。
tool_code: |
  def execute(num1: float, num2: float, operator: str) -> float:
      if operator == '+':
          return num1 + num2
      elif operator == '-':
          return num1 - num2
      elif operator == '*':
          return num1 * num2
      elif operator == '/':
          if num2 == 0:
              raise ValueError("除数不能为零。")
          return num1 / num2
      else:
          raise ValueError(f"不支持的操作符: {operator}")
parameters:
  num1:
    type: number
    description: 第一个数字
  num2:
    type: number
    description: 第二个数字
  operator:
    type: string
    description: 运算操作符 (+, -, *, /)
    enum: ['+', '-', '*', '/']
return_type: number
meta:
  author: Your Name
  version: 1.0.0
  description: 一个基本的四则运算工具。
  • name: Skill 的唯一标识符。
  • instruction: Agent 理解和使用此 Skill 的自然语言描述。这非常重要,因为 Agent 会根据这个描述来决定何时以及如何调用该 Skill。
  • tool_code: 包含 Skill 核心逻辑的 Python 代码。它必须定义一个 execute 函数,该函数接收 parameters 中定义的参数。
  • parameters: 定义 Skill 接受的输入参数。每个参数都有 typedescription,有时还会有 enumdefault 等。
  • return_type: Skill execute 函数的预期返回类型。
  • tool_dependencies (可选): Skill 运行时所需的 Python 包,例如 requestspandas 等。Hermes Agent 会尝试自动安装这些依赖。
  • meta (可选): 包含 Skill 的元数据,如作者、版本、详细描述等。

3.4 创建你的第一个自定义 Skill

手动创建 Skill 允许你为 Hermes Agent 扩展任何你想要的功能。这对于集成公司内部 API、自动化特定工作流或封装私有工具非常有用。

3.4.1 自定义 Skill 的步骤

  1. 定义需求:明确你的 Skill 要做什么,需要哪些输入,产生什么输出。
  2. 编写 tool_code:用 Python 实现核心逻辑,确保它有一个 execute 函数,并能处理所有必要的参数。
  3. 创建 Skill YAML/JSON 文件:根据上一节的结构,定义 Skill 的 name, instruction, parameters, return_type 等。
  4. 放置 Skill 文件:将 .yaml.json 文件保存到 ~/.hermes/skills/ 目录下。
  5. 告知 Agent:Hermes Agent 会自动加载 ~/.hermes/skills/ 目录下的 Skills。你也可以通过 hermes skills reload 命令强制重新加载。

3.4.2 示例:一个简单的“重复文本”Skill

我们将创建一个 Skill,它接收一个文本字符串和一个重复次数,然后将文本重复指定次数。

需求分析:

  • 功能: 重复一个给定的文本字符串。
  • 输入:
    • text (字符串): 要重复的文本。
    • times (整数): 重复的次数。
  • 输出: 重复后的字符串。

tool_code 构思: Python 中字符串可以直接用 * 运算符重复。

def execute(text: str, times: int) -> str:
    return text * times

Skill YAML 文件:

# ~/.hermes/skills/repeat_text.yaml
name: repeat_text
instruction: |
  这个技能可以将一个文本字符串重复指定的次数。
  请提供要重复的文本和重复的次数。
tool_code: |
  def execute(text: str, times: int) -> str:
      if not isinstance(text, str):
          raise TypeError("文本参数必须是字符串。")
      if not isinstance(times, int) or times < 0:
          raise ValueError("重复次数参数必须是非负整数。")
      return text * times
parameters:
  text:
    type: string
    description: 要重复的文本字符串。
  times:
    type: integer
    description: 文本重复的次数。
return_type: string
meta:
  author: Your Name
  version: 1.0.0
  description: 一个简单的文本重复工具。

通过以上步骤,你就可以为 Hermes Agent 赋予全新的、定制化的能力。


💻 实战演示

我们将进行三个实战演示:

  1. agentskills.io 安装并使用一个社区 Skill。
  2. 观察 Hermes Agent 的自动 Skill 创建机制。
  3. 手动创建并使用一个自定义 Skill。

前提条件:你已经按照 第 01 期 的教程安装并初始化了 Hermes Agent。

场景 1:安装并使用 arxiv_researcher Skill

arxiv_researcher 是一个非常有用的 Skill,它允许 Hermes Agent 执行网页搜索。

  1. 启动 Hermes Agent

    hermes
    

    你应该会看到 Agent 启动并等待输入。

  2. 列出当前可用的 Skill (可选,确认 arxiv_researcher 不在其中): 在新终端窗口中运行:

    hermes skills list
    

    如果 arxiv_researcher 不在列表中,说明尚未安装。

  3. agentskills.io 安装 arxiv_researcher Skillagentskills.io 上的 Skill 都有一个唯一的 ID。我们可以通过访问网站查找,或者猜测常用的名称。arxiv_researcher 是一个非常常见的 Skill。

    hermes skills install arxiv_researcher
    

    预期输出:

    Installing skill 'arxiv_researcher'...
    Skill 'arxiv_researcher' installed successfully.
    Reloading agent skills...
    Skills reloaded.
    

    现在,Hermes Agent 已经可以使用 arxiv_researcher Skill 了。

  4. 在 Agent 中使用 arxiv_researcher Skill: 回到 Hermes Agent 交互界面,提出一个需要搜索的问题。

    Hermes > What is the capital of France and what is its population?
    

    预期输出 (简化): Agent 会识别出需要外部信息,并可能会显示它正在使用 arxiv_researcher Skill。

    [THOUGHT] I need to find the capital of France and its population. I will use the `arxiv_researcher` skill to find this information.
    [CALL] arxiv_researcher(query='capital of France')
    [RESULT] The capital of France is Paris.
    [CALL] arxiv_researcher(query='population of Paris')
    [RESULT] The population of Paris is approximately 2.1 million (as of recent estimates).
    [RESPONSE] The capital of France is Paris, and its population is approximately 2.1 million.
    

    可以看到,Agent 成功地调用了 arxiv_researcher Skill 来获取信息。

场景 2:观察 Hermes Agent 的自动 Skill 创建机制

自动 Skill 创建通常发生在 Agent 解决一个复杂问题,并识别出可重用模式之后。这个过程不是每次交互都会发生,而是当 Agent 认为它学习到了一个新且有价值的抽象时。为了演示,我们可以尝试给 Agent 一个需要多步骤、且可能形成新模式的任务。

我们将尝试让 Agent 完成一个稍微复杂的文件操作任务,这可能会促使它学习文件相关的 Skill。

  1. 确保 Agent 拥有文件操作能力 (例如,通过 data_cleaning_pipeline Skill,如果尚未安装,请安装它):

    hermes skills install data_cleaning_pipeline
    
  2. 在 Agent 交互界面中,提出一个复杂的文件操作任务: 我们将要求 Agent 创建一个目录,然后在一个文件中写入内容,再读取这个文件,最后删除这个目录。

    Hermes > Create a directory named 'test_dir' in the current working directory. Then, inside 'test_dir', create a file named 'hello.txt' and write "Hello, Hermes Agent!" into it. After that, read the content of 'hello.txt' and finally, delete the 'test_dir' directory.
    

    预期输出 (简化): Agent 会逐步执行这些操作,可能会调用 create_directory, write_file, read_file, delete_directory 等 Skill。在完成任务后,Agent 可能会在后台进行学习。

    [THOUGHT] I need to perform several file system operations: create a directory, create a file, write to it, read from it, and then delete the directory. I will use the data_cleaning_pipeline.
    [CALL] create_directory(path='test_dir')
    [RESULT] Directory 'test_dir' created successfully.
    [CALL] write_file(path='test_dir/hello.txt', content='Hello, Hermes Agent!')
    [RESULT] File 'test_dir/hello.txt' written successfully.
    [CALL] read_file(path='test_dir/hello.txt')
    [RESULT] Content of 'test_dir/hello.txt': "Hello, Hermes Agent!"
    [CALL] delete_directory(path='test_dir')
    [RESULT] Directory 'test_dir' deleted successfully.
    [RESPONSE] I have successfully completed all the requested file operations: created 'test_dir', wrote "Hello, Hermes Agent!" to 'test_dir/hello.txt', read its content, and then deleted 'test_dir'.
    
  3. 检查 Skill 目录: 任务完成后,退出 Agent 交互界面 (输入 exitCtrl+D),然后检查 ~/.hermes/skills/ 目录。

    ls -l ~/.hermes/skills/
    

    你可能会看到一些新的 .yaml 文件,它们的名称可能以 auto_ 开头,或者基于 Agent 提炼出的操作模式命名。这些就是 Agent 在执行任务后,认为值得抽象和保存的新 Skill。

    例如,你可能会看到一个名为 auto_create_write_read_delete_file_in_dir.yaml 或类似的 Skill。打开它,你会发现它封装了刚才一系列文件操作的逻辑。

    注意:自动 Skill 创建的触发条件和命名方式是动态的,取决于 Agent 的具体实现和当前任务的复杂性。不保证每次都能创建出显式的新 Skill,但 Agent 确实在后台不断学习和优化其内部模型。

场景 3:手动创建并使用自定义 Skill

我们将创建之前讨论的 repeat_text Skill。

  1. 创建 Skill 文件: 使用你喜欢的文本编辑器,创建一个名为 repeat_text.yaml 的文件,并将其保存到 ~/.hermes/skills/ 目录下。

    mkdir -p ~/.hermes/skills/
    nano ~/.hermes/skills/repeat_text.yaml
    

    将以下内容粘贴到文件中:

    # ~/.hermes/skills/repeat_text.yaml
    name: repeat_text
    instruction: |
      这个技能可以将一个文本字符串重复指定的次数。
      请提供要重复的文本和重复的次数。
    tool_code: |
      def execute(text: str, times: int) -> str:
          if not isinstance(text, str):
              raise TypeError("文本参数必须是字符串。")
          if not isinstance(times, int) or times < 0:
              raise ValueError("重复次数参数必须是非负整数。")
          return text * times
    parameters:
      text:
        type: string
        description: 要重复的文本字符串。
      times:
        type: integer
        description: 文本重复的次数。
    return_type: string
    meta:
      author: Your Name
      version: 1.0.0
      description: 一个简单的文本重复工具。
    

    保存并退出编辑器。

  2. 重新加载 Agent Skills: 为了让 Hermes Agent 识别新创建的 Skill,我们需要重新加载。

    hermes skills reload
    

    预期输出:

    Reloading agent skills...
    Skills reloaded.
    
  3. 启动 Hermes Agent 并使用自定义 Skill

    hermes
    

    在 Agent 交互界面中,请求它使用新创建的 repeat_text Skill。

    Hermes > Can you repeat the word "hello" 3 times?
    

    预期输出: Agent 会识别出你的意图与 repeat_text Skill 的 instruction 相匹配,并调用它。

    [THOUGHT] The user wants to repeat a word multiple times. I have a 'repeat_text' skill that can do this.
    [CALL] repeat_text(text='hello', times=3)
    [RESULT] hellohellohello
    [RESPONSE] The word "hello" repeated 3 times is: hellohellohello
    

    恭喜!你已经成功地创建并使用了你的第一个自定义 Skill。这展示了 Hermes Agent 强大的可扩展性,你可以根据需要为其添加任何功能。


🔧 涉及的命令与工具

命令/工具 描述 示例
hermes 启动 Hermes Agent 的交互式会话。 hermes
hermes skills Skill 管理命令的父命令。 hermes skills list
hermes skills list 列出当前 Hermes Agent 可用的所有 Skill。 hermes skills list
hermes skills install <skill_id> agentskills.io 安装指定的 Skill。skill_id 是 Skill 的名称,例如 arxiv_researcher hermes skills install arxiv_researcher
hermes skills remove <skill_id> 从本地 Skill 库中删除指定的 Skill。 hermes skills remove repeat_text
hermes skills reload 重新加载 ~/.hermes/skills/ 目录中的所有 Skill。对于手动创建或修改 Skill 后很有用。 hermes skills reload
~/.hermes/skills/ Hermes Agent 存储所有 Skill 定义文件(.yaml.json)的目录。 ls ~/.hermes/skills/
nano / vim / code 任何文本编辑器,用于创建或修改 Skill 定义文件。 nano ~/.hermes/skills/my_custom_skill.yaml

📝 本期要点回顾

  • Skills 是 Hermes Agent 的核心扩展机制:它们是封装了特定功能或工具使用逻辑的模块化单元,赋予 Agent 执行复杂任务的能力。
  • 自进化通过学习循环实现:Hermes Agent 能够从成功经验中自动创建、改进和持久化 Skills,从而不断提升自身能力。
  • Skill 结构统一且可扩展:所有 Skills 都遵循 YAML/JSON 格式,包含 name, instruction, tool_code, parameters 等关键部分,便于 Agent 理解和调用。
  • agentskills.io 是社区 Skill 宝库:通过 hermes skills install 命令,可以方便地从社区平台加载预定义的、经过验证的 Skill,快速扩充 Agent 功能。
  • 自定义 Skill 赋予无限可能:用户可以手动创建 Skill YAML 文件,将其放置在 ~/.hermes/skills/ 目录下,并通过 hermes skills reload 命令使其生效,从而为 Agent 添加任何特定功能。

🔗 参考资料