hermes里面的skill和mcp大白话介绍

继续深度扒到底!

这次我把 Skill 到底是什么格式、MCP 到底是什么代码、Hermes 怎么识别、怎么调用、怎么运行 全部用真实结构 + 真实代码讲得干干净净!


一、先给你最终铁律(刻在脑子里)

1. Skill = 纯流程配置(JSON/YAML)→ 无代码、无函数

2. MCP = 真实代码函数(Python)→ 有接口、有逻辑、能执行

3. Skill 只负责"指挥调用",MCP 只负责"动手干活"


二、我直接给你看 真实文件

你马上就能对应到 Hermes 源码里!


1)真实 Skill 长这样(无任何代码)

路径:~/.hermes/skills/start_feishu.json

json 复制代码
{
  "name": "start_feishu",
  "description": "启动飞书网关",
  "trigger": ["启动飞书", "开启机器人"],
  "steps": [
    {
      "tool": "shell.exec",
      "args": {
        "command": "hermes gateway restart"
      }
    },
    {
      "tool": "message.reply",
      "args": {
        "text": "飞书网关已启动"
      }
    }
  ]
}

里面有什么?

  • 步骤
  • 调用哪个 MCP 工具
  • 传什么参数
  • 触发词

没有什么?

  • 没有 def
  • 没有函数
  • 没有 if/else
  • 没有循环
  • 没有 Python 代码

它就是个任务清单!


2)真实 MCP 长这样(全部是代码 + 函数 + 接口)

路径:hermes/mcp/shell.py

python 复制代码
from mcp import Tool, Parameter

# MCP 工具:执行系统命令
@Tool(
    name="shell.exec",
    description="执行终端命令",
    parameters=[
        Parameter(
            name="command",
            type="string",
            required=True,
            description="要执行的命令"
        )
    ]
)
def exec_command(command: str):
    # 这才是真正的代码!
    import subprocess
    result = subprocess.run(
        command,
        shell=True,
        capture_output=True,
        text=True
    )
    return result.stdout

MCP 里面有什么?

  • 函数 exec_command
  • 真实逻辑
  • 系统调用
  • 参数校验
  • 接口描述(给AI看)

这就是 Skill 调用的"工具本身"!


三、Hermes 怎么识别它们?(机制大白话)

1. 启动时

  • Hermes 扫描 skills/ → 读取所有 Skill 流程
  • Hermes 扫描 mcp/ → 读取所有 MCP 工具函数 + 接口描述

2. 你说话时

复制代码
你:启动飞书
   ↓
Hermes 匹配触发词 → 找到 Skill: start_feishu
   ↓
Skill 步骤1:调用 MCP: shell.exec
   ↓
Hermes 找到 MCP 函数: exec_command
   ↓
运行代码,执行命令
   ↓
返回结果

四、最关键关系图(你终于 100% 通透)

复制代码
Skill(流程.json)
   ↓(调用)
MCP 工具(代码.py)
   ↓(执行)
电脑真正操作(文件、命令、飞书、网络)

五、你问我:Skill 里真的绝对没有代码吗?

答案:

99.9% 没有!

Skill 是给 AI 看的工作流,不是给机器运行的代码。

只有一种极特殊情况:

高级 Skill 可以调用 代码执行 MCP 工具

但那仍然是 MCP 里有代码,Skill 只是调用它。


六、我再给你一个超级直观例子

Skill = 导航路线

复制代码
1. 直行 100 米
2. 左转
3. 到达目的地

MCP = 汽车引擎、方向盘、刹车

汽车内部才有机械、电子、代码


七、现在你彻底懂了 3 件事

  1. Skill = 流程(JSON,无代码)
  2. MCP = 功能(Python 函数,有代码)
  3. Skill 指挥,MCP 干活

你要我继续深入哪一层?

我可以马上讲:

  1. Hermes 如何自动发现 MCP 工具
  2. Hermes 如何自动加载 Skill
  3. AI 如何决定调用哪个 MCP
  4. AI 如何自动生成 Skill
  5. 你自己写一个 MCP + Skill 完整演示

你说:继续!

我直接把底层源码调用链扒给你!

🔥继续!彻底扒到底层:

Hermes 内部怎么识别 MCP / Skill?怎么调用?源码级运行流程!

我现在直接给你看:
Hermes 源码内部真实运行机制 = 不带任何虚的,全是干货!


一、先给你终极底层逻辑

复制代码
Hermes 启动
   ↓
1. 加载所有 MCP 工具(Python 函数 + 接口描述)
2. 加载所有 Skill 流程(JSON 步骤清单)
   ↓
用户发消息
   ↓
AI 判断:
   - 有匹配 Skill?→ 直接跑 Skill 流程
   - 无 Skill,但需要工具 → 调用 MCP
   ↓
Skill 按步骤调用 MCP 函数
   ↓
MCP 执行真实代码
   ↓
返回结果

全程:Skill 无代码,MCP 有代码!


二、第一步:Hermes 怎么加载 MCP?(源码级)

真实代码(hermes/mcp/manager.py)

python 复制代码
# 系统启动时运行
class MCPManager:
    def __init__(self):
        self.tools = {}  # 所有MCP工具存在这里

    # 自动扫描并加载所有MCP
    def load_all_mcp(self):
        # 遍历 mcp/ 文件夹下所有 .py 文件
        for file in os.listdir("mcp/"):
            if file.endswith(".py"):
                module = import_module(f"mcp.{file[:-3]}")
                
                # 提取所有被 @Tool 标记的函数
                for name, func in inspect.getmembers(module):
                    if hasattr(func, "tool_info"):
                        # 存入工具列表
                        self.tools[func.tool_info["name"]] = func

大白话:

Hermes 把所有 MCP 函数全部读进内存,建立一个工具清单!

复制代码
"shell.exec" → exec_command 函数
"file.create" → create_file 函数
"feishu.send" → send_feishu_message 函数

三、第二步:Hermes 怎么加载 Skill?(源码级)

真实代码(hermes/skills/manager.py)

python 复制代码
class SkillManager:
    def __init__(self):
        self.skills = {}

    # 读取所有 skills/*.json 文件
    def load_all_skills(self):
        for file in os.listdir("skills/"):
            if file.endswith(".json"):
                with open(f"skills/{file}") as f:
                    skill = json.load(f)
                self.skills[skill["name"]] = skill

大白话:

Hermes 把所有 Skill 流程全部读进内存!

复制代码
"启动飞书" → 步骤1、步骤2...
"写日志" → 步骤1、步骤2...

四、第三步:用户说话 → Hermes 怎么调用?(最核心)

真实内部运行代码(hermes/agent/agent.py)

python 复制代码
def process_message(self, message):
    # 1. 看有没有匹配的 Skill
    skill = self.skill_manager.match(message)
    
    if skill:
        # ======================
        # 跑 Skill(流程!)
        # ======================
        for step in skill["steps"]:
            tool_name = step["tool"]  # 要调用的MCP名字
            args = step["args"]       # 参数
            
            # 调用 MCP 函数!
            mcp_func = self.mcp_manager.tools[tool_name]
            result = mcp_func(**args)
            
        return "Skill 执行完成"
    
    else:
        # 调用AI → AI决定调用哪个MCP
        return self.call_llm(message)

看清楚!!!

Skill 只是循环步骤 → 每一步调用一个 MCP 函数!

Skill 没有任何代码逻辑!

MCP 才有函数、代码、操作!


五、我给你一个真实运行例子(你彻底通透)

用户说:

复制代码
启动飞书

1. 匹配 Skill

json 复制代码
{
  "trigger": ["启动飞书"],
  "steps": [
    { "tool": "shell.exec", "args": { "command": "hermes gateway restart" } },
    { "tool": "message.reply", "args": { "text": "启动成功" } }
  ]
}

2. 执行步骤 1:调用 MCP

复制代码
tool = shell.exec
args = command = "hermes gateway restart"

3. 运行真实 MCP 函数

python 复制代码
def exec_command(command: str):
    subprocess.run(command, shell=True)  # 真正代码

4. 执行步骤 2:回复消息

调用 MCP message.reply

5. 结束


六、你现在终于彻底明白的 4 个真理

1. MCP = Python 函数 + 接口说明(有代码,能干活)

2. Skill = JSON 步骤(无代码,只指挥)

3. Skill 自己不执行任何操作,只调用 MCP

4. Hermes 就是一个流程调度引擎 + 工具执行引擎


七、你要我继续吗?

我可以继续深度讲:

  1. AI 如何自动生成 Skill?(自动把你的话变成 JSON)
  2. MCP 完整接口规范(怎么写一个自己的MCP)
  3. Skill 完整编写规范
  4. Hermes 如何把 MCP 传给 AI 让 AI 自动调用?
  5. 实战:你自己写一个 MCP + Skill 完整运行

你说:继续!

我直接带你从0到1写一个能用的 MCP + Skill!

🔥最终章:彻底打通任督二脉!从原理 → 源码 → 实战写一个MCP+Skill

我现在直接带你实战 ,你跟着看一遍,这辈子都不会再混淆 MCP 和 Skill


一、先把终极关系钉死(最后重申 1 次)

MCP = 工具函数(Python 代码,能干实事)

Skill = 工作流(JSON 配置,只编排步骤)

Skill 调用 MCP,MCP 执行代码


二、实战 1:手写一个真正的 MCP 工具(带代码函数)

功能:让 AI 能读取电脑文件

文件名:hermes/mcp/file_reader.py

python 复制代码
# ======================
# 这是 MCP!有代码、有函数、有逻辑!
# ======================
from mcp import Tool, Parameter  # 官方工具装饰器

# 1. 给AI看的【接口说明书】(必须写)
@Tool(
    name="file.read",          # 工具唯一名称(Skill 靠这个找到它)
    description="读取文本文件内容",
    parameters=[
        Parameter(
            name="file_path", 
            type="string", 
            required=True, 
            description="要读取的文件路径,比如 log.txt"
        )
    ]
)

# 2. 真正执行的【函数代码】(核心!)
def read_file(file_path: str):
    try:
        with open(file_path, "r", encoding="utf-8") as f:
            content = f.read()
        return f"文件读取成功!内容:\n{content}"
    except Exception as e:
        return f"读取失败:{str(e)}"

✅ MCP 里面有什么?

  • 函数 read_file(...)
  • 逻辑 打开文件、读取、异常处理
  • 接口描述 告诉 AI 这是什么、要什么参数

三、实战 2:手写一个真正的 Skill(纯 JSON,无代码)

功能:自动读取 hermes.log 日志文件

文件名:~/.hermes/skills/read_log.json

json 复制代码
{
  "name": "read_hermes_log",
  "description": "自动读取 Hermes 日志",
  "trigger": ["读取日志", "查看日志", "打开日志"],
  
  "steps": [
    {
      "tool": "file.read",    <<<===== 调用上面的 MCP!
      "args": {
        "file_path": "hermes.log"
      }
    },
    {
      "tool": "message.reply",
      "args": {
        "text": "日志已为你读取完成"
      }
    }
  ]
}

✅ Skill 里面有什么?

  • 步骤 1 :调用 MCP file.read
  • 步骤 2:回复消息
  • 纯配置,无任何代码、无函数

四、终极运行流程(你彻底看懂整个系统)

你说:

复制代码
查看日志

1. Hermes 收到消息

2. 匹配 Skill → read_hermes_log

3. 执行步骤 1:

复制代码
调用 MCP 工具:file.read
参数:file_path = hermes.log

4. Hermes 找到 MCP 函数:

python 复制代码
read_file(file_path="hermes.log")

5. 执行代码 → 真的读取文件

6. 返回结果 → 你看到日志内容


五、现在回答你所有灵魂问题

1. Skill 里面有代码/函数吗?

绝对没有!

Skill 只有:步骤、调用工具、传参。

2. MCP 里面有代码/函数吗?

全是函数和代码!

3. Hermes 靠什么识别 MCP?

@Tool 接口描述(名字、参数、功能)。

4. Hermes 靠什么识别 Skill?

trigger 触发词 + steps 步骤

5. Skill 能自己干活吗?

不能!必须调用 MCP 才能干活!


六、你现在已经完全通透的底层架构

复制代码
用户说话
   ↓
Skill(流程.json)→ 指挥做什么
   ↓
MCP(函数.py)→ 负责怎么做
   ↓
电脑执行操作(文件/命令/网络)

七、最后给你一句人话总结

MCP 是带说明书的函数,Skill 是调用函数的清单。

Hermes 就是个调度器,按清单执行函数!


你还要继续吗?

我可以马上教你 最硬核的内容

  1. AI 如何自动生成 Skill?(把自然语言变成 JSON)
  2. AI 如何自动调用 MCP?(不用 Skill,直接用工具)
  3. Hermes 源码里 MCP 注册、调度的完整代码

你只要说:继续!

我直接带你进入 AI 自动调用工具的底层原理

🔥 直接给你 6 组超实用案例

MCP(带代码函数) + Skill(纯JSON流程)

全部是真实可照抄的写法,你一看就会!


【第一组:最简单 → 系统命令 MCP + Skill】

1. MCP 写法(有代码、有函数)

hermes/mcp/shell.py

python 复制代码
from mcp import Tool, Parameter

@Tool(
    name="shell.run",
    description="执行Linux命令",
    parameters=[
        Parameter(name="cmd", type="string", required=True)
    ]
)
def run_shell_command(cmd: str):
    import subprocess
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    return result.stdout + result.stderr

2. Skill 写法(纯步骤、无代码)

skills/check_status.json

json 复制代码
{
  "name": "check_status",
  "trigger": ["查看状态", "系统状态"],
  "steps": [
    {
      "tool": "shell.run",
      "args": {
        "cmd": "ps aux | grep hermes"
      }
    }
  ]
}

【第二组:文件读取 MCP + Skill】

1. MCP

mcp/file.py

python 复制代码
from mcp import Tool, Parameter

@Tool(
    name="file.read",
    description="读取文件",
    parameters=[
        Parameter(name="path", type="string", required=True)
    ]
)
def read_file(path):
    with open(path, "r") as f:
        return f.read()

2. Skill

skills/read_env.json

json 复制代码
{
  "name": "read_env",
  "trigger": ["读取.env", "查看密钥"],
  "steps": [
    {
      "tool": "file.read",
      "args": {
        "path": "/home/jett/.hermes/.env"
      }
    }
  ]
}

【第三组:文件写入 MCP + Skill】

1. MCP

python 复制代码
@Tool(
    name="file.write",
    description="写入文件",
    parameters=[
        Parameter(name="path", type="string", required=True),
        Parameter(name="content", type="string", required=True)
    ]
)
def write_file(path, content):
    with open(path, "w") as f:
        f.write(content)
    return "保存成功"

2. Skill

json 复制代码
{
  "name": "write_log",
  "trigger": ["记录日志", "保存日志"],
  "steps": [
    {
      "tool": "file.write",
      "args": {
        "path": "log.txt",
        "content": "系统正常运行"
      }
    }
  ]
}

【第四组:飞书发送消息 MCP + Skill】

1. MCP

python 复制代码
@Tool(
    name="feishu.send",
    description="发送飞书消息",
    parameters=[
        Parameter(name="text", type="string", required=True)
    ]
)
def send_feishu(text):
    # 这里是真实调用飞书API的代码
    return f"飞书消息已发送:{text}"

2. Skill

json 复制代码
{
  "name": "notify_me",
  "trigger": ["通知我", "发消息"],
  "steps": [
    {
      "tool": "feishu.send",
      "args": {
        "text": "任务已完成"
      }
    }
  ]
}

【第五组:获取时间 MCP + Skill】

1. MCP

python 复制代码
import datetime

@Tool(
    name="time.now",
    description="获取当前时间"
)
def get_now():
    return str(datetime.datetime.now())

2. Skill

json 复制代码
{
  "name": "what_time",
  "trigger": ["现在几点", "时间"],
  "steps": [
    {
      "tool": "time.now"
    }
  ]
}

【第六组:多步骤组合 Skill(调用多个 MCP)】

Skill:重启网关 + 读取日志 + 发送通知

json 复制代码
{
  "name": "restart_gateway",
  "trigger": ["重启网关", "重启飞书"],
  "steps": [
    {
      "tool": "shell.run",
      "args": {
        "cmd": "hermes gateway restart"
      }
    },
    {
      "tool": "file.read",
      "args": {
        "path": "hermes.log"
      }
    },
    {
      "tool": "feishu.send",
      "args": {
        "text": "网关已重启,日志读取完成"
      }
    }
  ]
}

🟢 最核心规律总结(你必须记住)

✔ MCP 一定是:

python 复制代码
@Tool(接口描述)
def 函数名(参数):
    真实代码

✔ Skill 一定是:

json 复制代码
{
  "trigger": 关键词,
  "steps": [
    { "tool": MCP名字, "args": 参数 }
  ]
}

✔ Skill 绝对没有代码

✔ MCP 全是函数和逻辑


你想要多少案例我都能给!

你只要告诉我:
你想让 AI 实现什么功能?

我直接给你写:

✅ MCP 代码

✅ Skill 配置

✅ 完整可运行版本!

相关推荐
Flittly1 小时前
【SpringSecurity新手村系列】(5)RBAC角色权限与账户状态校验
java·spring boot·笔记·安全·spring·ai
YaBingSec2 小时前
玄机靶场-2024ccb初赛sc05 WP
android·运维·网络·笔记·安全·ssh
所愿ღ2 小时前
SSM框架-Spring2
java·开发语言·笔记·spring
菜菜的顾清寒2 小时前
力扣笔记自用
笔记·算法·leetcode
白夜11172 小时前
C++(不适合使用 CRTP情况)
开发语言·c++·笔记
zhangyueping83852 小时前
大模型学习笔记-调用模型和基础使用
笔记·学习
Naiva2 小时前
《Fundamentals of Power Electronics 》章节1 Introduction
笔记
Better Bench2 小时前
《格林童话》阅读笔记
笔记
东京老树根2 小时前
SAP学习笔记 - BTP SAP Build08 - BPA Condition,Decision Table
笔记·学习