干货!零门槛搞懂skills

8 阅读7分钟

一、什么是Skills

在 AI 智能体(Agent)和智能运维(AIOps)的语境里,Skills 就是 AI 智能体的 “专项能力包” —— 是针对某一类特定任务、可复用、可标准化的执行逻辑,能让智能体不只是 “听懂指令”,更能 “落地做事”。它更像是工作流,定义了完成一件事需要怎么做的流程,适用于将工作中有固定sop的事项转换为skills。

比如要对磁盘空间告警实现自愈,可以定义一个skills,里面包括了检查空间、清理日志等功能,而其中的检查、清理等原子性操作则通过MCP或者代码的形式实现。

所以,skills也可以看成是一堆功能的串接,目的是为了完成一个固定的动作。

把 AI 智能体想象成一个全能的运维工程师,Skills 就是这个工程师掌握的具体职业技能

  • 这个工程师会 “服务器日志分析” → 对应 AI 的 日志异常检测 Skill
  • 这个工程师会 “批量启停服务” → 对应 AI 的 服务生命周期管理 Skill
  • 这个工程师会 “资源使用率趋势预测” → 对应 AI 的 容量规划 Skill

没有 Skills 的智能体,就像一个 “懂理论但不会动手” 的新手:你告诉他 “排查下服务器高负载问题”,他知道要查 CPU、内存、进程,但不知道具体怎么查、怎么分析日志、怎么定位瓶颈;而加载了对应 Skills 的智能体,能直接按标准化流程完成操作。

因而,为了智能体能够按照某个流程处理一件事情,就需要skills。

二、skills与MCP、提示词的关系

以处理磁盘空间告警的智能体为例,skill、MCP、提示词三者的关系如下:

  • 提示词下达需求:运维人员给智能体发指令 → “帮我处理服务器 A 的根目录满告警”

  • Skills 规划执行步骤:智能体调用 “磁盘满处理 Skill” → 该 Skill 内置逻辑:执行df -h确认使用率用find命令找大文件筛选非核心文件执行删除/归档

  • MCP 提供操作通道:Skill 的每一步操作,都通过对应的 MCP 完成 → 比如通过SSH MCP执行find命令,通过监控MCP更新告警状态

所以,

没有提示词 → 智能体不知道要做什么;-

没有 MCP → 智能体有技能但没工具,无法落地操作;

没有 Skills → 智能体只能 “口头分析”,无法按标准化流程完成任务,容易遗漏步骤(比如只删文件不确认,导致误删核心数据)。

总结来说:

Skills 是 “能力” → 解决 “怎么标准化做一件事” 的问题,是可复用的 “方法论”;

MCP 是 “通道” → 解决 “怎么连接底层系统” 的问题,是智能体的 “手脚”;

提示词是 “指令” → 解决 “要做什么事” 的问题,是智能体的 “任务清单”。

这样就比较清楚了,skills并不神秘,就是为了完成一件事,定制的一个流程。

三、一个实际例子

以智能运维场景为例,完整拆解 “磁盘满自动清理 Skill” 的技术实现过程,结合代码片段和执行流程,让技术细节更直观。

1. 需求与前置条件

  • 触发条件:智能体通过监控 MCP 获取到 “服务器根目录使用率> 85%” 的告警

  • Skill 目标:安全清理非核心文件,将磁盘使用率降至 70% 以下

  • 依赖 MCP

    • SSH MCP:执行服务器命令(df -h/find/rm
    • 运维平台 MCP:查询服务器角色(如是否为数据库服务器,核心目录有哪些)

2、技术实现步骤

步骤 1:定义输入参数模型(Pydantic)

from pydantic import BaseModel, Field 
from typing import Optional, List 

# 定义Skill输入参数规范(对应Skill的输入Schema) 
class DiskCleanSkillInput(BaseModel): 
    server_ip: str = Field(description="目标服务器IP地址,必填参数") 
    disk_path: str = Field(default="/", description="待清理磁盘路径,默认根目录/") 
    safe_threshold: int = Field(default=70, description="磁盘安全使用率阈值(%),默认70%") 
    core_dirs: List[str] = Field(default_factory=lambda: ["/var/lib/mysql", "/etc"], description="禁止清理的核心目录列表")

步骤2:封装MCP调用

这个不详细讨论,就是将MCP的调用过程进行封装,使得这个过程可以复用。

class SSHMCP: 
    def __init__(self, username: str = "admin", password: str = "admin123", port: int = 22): 
        self.username = username 
        self.password = password 
        self.port = port
   
    @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) 
    def execute(self, server_ip: str, command: str) -> str:
      
      
      (此处忽略具体实现)
      
 ssh_mcp = SSHMCP()
 ssh_mcp.execute(ip,command) #封装后通过输入IP和需要执行的命令,则可以调用相应的MCP服务。

步骤3:实现核心逻辑并转换为langchain的tool

(这里也只是简单展示,不陷入具体逻辑实现)

from langchain.tools import StructuredTool 
from typing import Dict, Any 
def disk_clean_skill( 
    server_ip: str, 
    disk_path: str = "/", 
    safe_threshold: int = 70, 
    core_dirs: List[str] = None 
 ) -> Dict[str, Any]: 
 """ 磁盘满自动清理Skill:安全清理服务器非核心日志/临时文件,将磁盘使用率降至安全阈值以下 
     禁止清理核心目录,支持自定义阈值和目标路径 """
     
     (此处省略具体实现逻辑)

# 关键:将Skill封装为LangChain结构化Tool,绑定参数模型 
disk_clean_tool = StructuredTool.from_function( 
    func=disk_clean_skill, 
    name="disk_clean_skill", 
    description="用于自动清理服务器磁盘空间,支持指定服务器IP、磁盘路径、安全阈值和保护目录,仅清理大体积日志/临时文件", 
    args_schema=DiskCleanSkillInput, # 绑定参数校验规则 
    return_direct=False # 执行结果返回给Agent,而非直接输出 
)

步骤4:集成到langchain Agent,实现自然语言调用skills。

将封装好的 Skill(Tool)注册到 Agent,Agent 通过大模型解析提示词,自动匹配并调用对应的 Skill,完成全流程自动化。

from langchain_openai import ChatOpenAI  
from langchain.agents import create_openai_tools_agent, AgentExecutor  
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder  
import os  
  
# 配置OpenAI密钥(也可使用其他LLM,如通义千问、豆包)  
os.environ["OPENAI_API_KEY"] = "你的API_KEY"  
  
# 1. 初始化大模型  
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)  
  
# 2. 定义Agent提示词模板  
prompt = ChatPromptTemplate.from_messages([  
    ("system", "你是专业的AIOps智能运维助手,可调用内置Skills处理服务器故障。严格按照Skill规则执行操作,禁止删除核心目录文件"),  
    MessagesPlaceholder(variable_name="chat_history"),  
    ("user", "{input}"),  
    MessagesPlaceholder(variable_name="agent_scratchpad"),  
])  
  
# 3. 注册所有Skills(可批量注册多个Tool,形成Skill集合)  
skills = [disk_clean_tool]  
  
# 4. 创建Agent并初始化执行器  
agent = create_openai_tools_agent(llm, skills, prompt)  
agent_executor = AgentExecutor(agent=agent, tools=skills, verbose=True)  
  
# 5. 测试:通过自然语言提示词触发Skill调用  
if __name__ == "__main__":  
    response = agent_executor.invoke({  
        "input": "帮我处理服务器192.168.1.100的磁盘满问题,根目录磁盘使用率安全阈值设为65%,保护目录新增/opt/data",  
        "chat_history": []  
    })  
    print("\n===== 执行结果 =====")  
    print(response["output"])

四、与众不同的关键能力

1. 标准化 Skill 管理

  • 所有 Skill 统一封装为StructuredTool,具备名称、描述、参数规范,大模型可自动理解和调用;
  • 支持批量注册为Toolkit,实现 Skills 的分类管理(如运维 Skill 集、数据库 Skill 集)。

2. 自动参数解析与校验

  • 基于 Pydantic 自动校验输入参数类型、必填项,避免非法调用;
  • 大模型会自动将自然语言(如192.168.1.100阈值65%)转化为 Skill 需要的结构化参数。

3. 灵活的流程编排

  • 支持单 Skill 独立调用多 Skill 串行 / 并行执行
  • 结合 LCEL 语法,可实现复杂的 Skill 编排逻辑

4. 与 MCP / 外部系统解耦

Skill 只调用 MCP 的标准化接口,不关心底层实现(SSH/HTTP/SDK),替换 MCP 时无需修改 Skill 核心逻辑。

5. 完善的可观测性

AgentExecutor开启verbose=True后,会打印完整执行链路:

  • 大模型决策过程
  • 匹配的 Skill 名称
  • 传入的参数
  • Skill 执行日志
  • 最终结果

五、总结

  • LangChain 中用StructuredTool + Pydantic是实现标准化 Skill 的最佳实践,覆盖参数校验、逻辑编排、异常处理全流程;

  • 封装后的 Skill 可直接集成到 Agent,支持自然语言触发、自动参数解析、多 Skill 编排

  • 架构实现了解耦设计,Skill 逻辑、MCP 接口、提示词解析相互独立,便于维护和扩展;

  • 代码可直接适配生产环境,仅需替换 MCP 的真实连接配置和大模型密钥即可落地。