目录

博客:从零手写 AI 本地 Skill 工具集|让 AI 听懂自然语言、调用 Python 操控本机文件系统

封面导语

一、基础概念:Skill、SKILL.md、工具脚本分别是什么

1.1 三者对应关系

1.2 整套运行闭环

1.3 本次搭建的文件系统 Skill 包含能力

二、整体工程目录结构(标准 Skill 包格式)

三、核心文件 1:SKILL.md 完整源码(AI 的行为约束手册)

四、三份配套可运行 Python 工具源码

4.1 convert_md2html.py —— Markdown 批量转 HTML

4.2 dir_tree.py —— 生成文件夹树形结构

4.3 organize_by_type.py —— 文件按后缀自动分类归档

4.4 conversionFormats.md(参考文档)

五、AI 自动生成整套 Skill 的底层原理(对应你截图里的行为)

5.1 第一步:意图解析

5.2 第二步:任务自动规划拆解(思维链 CoT)

5.3 第三步:结构化对齐输出

5.4 第四步:加载后的调用运行原理

六、部署 & 使用步骤

七、拓展优化方向

文末总结


封面导语

绝大多数本地 AI 只停留在 “对话问答” 层面,想要 AI 真正操作本机文件、自动整理文件夹、MD 转网页、生成目录树,核心方案就是自定义 Skill 技能包。 本文带你完整走通一套闭环:自然语言需求 → AI 自主拆解任务 → 生成 Skill 协议文档 (SKILL.md) → 自动编写配套可运行 Python 工具脚本 → 客户端加载生效。全程附带全部源码,可直接落地部署到本地 Agent。

一、基础概念:Skill、SKILL.md、工具脚本分别是什么

1.1 三者对应关系

文件 定位 核心作用
SKILL.md 技能协议 / 注册说明书 规定整套技能能干什么、模块划分、意图路由规则、安全红线、调用格式、工作流程;AI 加载该文件后,才知道什么时候启用对应工具
*.py 脚本文件 真实可执行工具实体 落地具体功能:文件归类、MD 转 HTML、打印目录树等实际操作系统行为
参考 md 文档 补充说明文件 存放格式对照表、入参说明、异常处理规则

1.2 整套运行闭环

用户自然语言指令 → 意图识别匹配 SKILL.md 路由表 → 校验安全策略 → 调用对应 Python 脚本执行本地操作 → 脚本结果回传给 AI 整理成可读反馈

1.3 本次搭建的文件系统 Skill 包含能力

  1. MD 文件批量转为 HTML 静态页面
  2. 一键输出文件夹树形结构图(目录树可视化)
  3. 根据文件后缀自动分类整理杂乱文件夹 配套约束:操作增加安全校验、高危路径拦截、二次确认闸门,防止 AI 误删、乱移动系统文件。

二、整体工程目录结构(标准 Skill 包格式)

file_system_skill/
├─ SKILL.md                # 技能总配置文件(核心)
├─ conversionFormats.md    # 格式转换补充参考文档
├─ convert_md2html.py      # MD转HTML工具脚本
├─ dir_tree.py             # 目录树生成脚本
└─ organize_by_type.py    # 文件自动分类脚本

三、核心文件 1:SKILL.md 完整源码(AI 的行为约束手册)

# FileSystem Skill 本地文件系统操作技能
## 1、技能总述
本技能为AI提供本机文件系统安全可控的运维能力,包含文件格式转换、目录结构查看、文件自动规整三大核心工具,所有文件操作携带安全校验机制。

## 2、四大核心组成
1. 意图决策对照表:将用户自然语言意图路由分发至对应工具脚本
2. 4个核心功能模块:格式转换、目录可视化、文件整理、公共安全校验
3. 运行准则:安全优先、高危操作强制二次确认、禁止访问系统关键目录
4. 标准调用工作流示例

## 3、意图路由匹配表
| 用户自然语言指令示例 | 路由目标脚本 |
| ---- | ---- |
| 将xxx文件夹下md文件转换成网页、md转html | convert_md2html.py |
| 查看这个文件夹目录结构、打印树形目录、生成目录树 | dir_tree.py |
| 整理桌面文件、按文件类型归类下载文件夹、自动分类文件 | organize_by_type.py |

## 4、运行安全硬性规则(安全闸门)
1. 禁止遍历/修改:C:\Windows、C:\Program Files、/etc、/usr等系统核心目录
2. 文件删除、批量移动文件必须向用户弹窗确认,得到确认指令后方可执行
3. 所有文件操作必须使用**绝对路径校验**,拒绝模糊危险路径
4. 执行结果必须回显:操作文件数量、存放路径、执行是否成功

## 5、标准工作流
Step1:解析用户指令,提取目标文件夹路径、执行参数
Step2:依据路由表匹配对应的Python工具
Step3:SKILL内置安全规则校验路径合法性
Step4:高危行为发起确认询问
Step5:调用本地py脚本执行真实文件操作
Step6:捕获脚本运行输出/报错,整理成自然语言回复用户

四、三份配套可运行 Python 工具源码

4.1 convert_md2html.py —— Markdown 批量转 HTML

import markdown
import os

def batch_md_to_html(source_dir: str, out_dir: str = "./html_output"):
    """
    批量将目录内md文件转为静态HTML文件
    :param source_dir: md文件所在文件夹路径
    :param out_dir: html输出目录
    """
    if not os.path.exists(out_dir):
        os.makedirs(out_dir)

    # 基础HTML模板
    html_template = """
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>{title}</title>
        <style>body{{padding: 2rem;max-width: 900px;margin: 0 auto;}}</style>
    </head>
    <body>{content}</body>
    </html>
    """

    file_count = 0
    for filename in os.listdir(source_dir):
        if filename.lower().endswith(".md"):
            md_path = os.path.join(source_dir, filename)
            with open(md_path, "r", encoding="utf-8") as f:
                md_content = f.read()
            # md转html正文
            html_body = markdown.markdown(md_content, extensions=["tables", "fenced_code"])
            html_full = html_template.format(title=filename, content=html_body)

            save_name = filename.replace(".md", ".html")
            save_path = os.path.join(out_dir, save_name)
            with open(save_path, "w", encoding="utf-8") as f:
                f.write(html_full)
            file_count += 1
    return f"转换完成,共处理 {file_count} 个Markdown文件,输出路径:{os.path.abspath(out_dir)}"

if __name__ == "__main__":
    res = batch_md_to_html("./test_md")
    print(res)

4.2 dir_tree.py —— 生成文件夹树形结构

import os

def generate_dir_tree(root_path: str, max_depth: int = 8) -> str:
    """
    生成目录树文本结构
    :param root_path: 目标根目录
    :param max_depth: 最大遍历深度,防止文件夹层级过深卡死
    :return: 格式化树形字符串
    """
    tree_lines = [os.path.basename(os.path.abspath(root_path)) + "/"]

    def walk(path, depth):
        if depth > max_depth:
            return
        items = sorted(os.listdir(path))
        for idx, item in enumerate(items):
            item_full = os.path.join(path, item)
            prefix = "│   " * depth
            symbol = "└── " if idx == len(items) - 1 else "├── "
            tree_lines.append(f"{prefix}{symbol}{item}")
            if os.path.isdir(item_full):
                walk(item_full, depth + 1)

    walk(root_path, depth=1)
    return "\n".join(tree_lines)

if __name__ == "__main__":
    tree_text = generate_dir_tree("./")
    print(tree_text)

4.3 organize_by_type.py —— 文件按后缀自动分类归档

import os
import shutil

# 定义文件分类映射关系
FILE_TYPE_MAP = {
    "图片": [".jpg", ".png", ".gif", ".jpeg", ".bmp", ".webp"],
    "文档": [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".md", ".txt"],
    "压缩包": [".zip", ".rar", ".7z", ".tar", ".gz"],
    "程序": [".exe", ".py", ".bat", ".ps1"],
    "视频": [".mp4", ".mov", ".avi", ".mkv"],
    "音频": [".mp3", ".wav", ".flac"]
}

def organize_folder(target_folder: str):
    """按文件后缀自动归类文件夹内所有文件,文件夹不会被移动"""
    # 安全拦截系统目录
    block_paths = ["C:/Windows", "C:/Program Files", "/etc", "/usr"]
    for block in block_paths:
        if target_folder.startswith(block):
            return "错误:禁止操作系统保护目录"

    total_move = 0
    for file in os.listdir(target_folder):
        file_full_path = os.path.join(target_folder, file)
        # 跳过子文件夹,只整理文件
        if os.path.isdir(file_full_path):
            continue
        file_suffix = os.path.splitext(file)[1].lower()
        match_folder = "其他文件"
        # 匹配分类文件夹
        for cat_name, suffix_list in FILE_TYPE_MAP.items():
            if file_suffix in suffix_list:
                match_folder = cat_name
                break
        # 创建分类文件夹
        cat_path = os.path.join(target_folder, match_folder)
        if not os.path.exists(cat_path):
            os.makedirs(cat_path)
        # 移动文件
        shutil.move(file_full_path, os.path.join(cat_path, file))
        total_move += 1
    return f"文件整理完成,一共归类移动 {total_move} 个文件"

if __name__ == "__main__":
    result = organize_folder(r"C:\Users\你的用户名\Desktop")
    print(result)

4.4 conversionFormats.md(参考文档)

# 文件转换支持格式对照表
1. Markdown支持语法:表格、代码块、标题、列表、加粗斜体
2. 输出HTML为纯静态文件,无需任何前端服务即可打开
3. 归类脚本识别的全部后缀参考FILE_TYPE_MAP配置
4. 若需要新增文件类型,直接修改organize_by_type.py内的FILE_TYPE_MAP字典即可

五、AI 自动生成整套 Skill 的底层原理(对应你截图里的行为)

5.1 第一步:意图解析

你输入指令帮我安装个文件系统skills 大模型通过语义识别:需求不是问答对话,是构建一套文件操作类自定义技能包;自动锁定能力边界:目录查看、文件整理、格式转换三个高频刚需工具。

5.2 第二步:任务自动规划拆解(思维链 CoT)

模型自主拆分有序执行计划,也就是你界面展示的流程:

  1. 优先编写SKILL.md总协议文件(先定规矩、定路由、定安全底线)
  2. 并行生成三份 Python 脚本(三个工具互相无依赖,不需要串行编写)
  3. 补充生成参考说明文档conversionFormats.md
  4. 整合全部文件,形成一个完整、可直接导入 Agent 客户端的 Skill 包

5.3 第三步:结构化对齐输出

模型读取自己编写的 SKILL.md 内标注的脚本名称、功能描述,精准匹配生成对应代码;同时严格遵守 md 里的安全规范,代码内置系统目录拦截、路径校验等防护逻辑。

5.4 第四步:加载后的调用运行原理

  1. Agent 加载 SKILL.md,把路由规则、安全规则存入上下文
  2. 你发送自然语言:整理桌面所有文件
  3. 模型检索路由表,匹配到organize_by_type.py
  4. 执行路径安全校验,无风险则调用本地脚本运行代码
  5. 脚本返回执行数据,AI 加工成自然语言反馈给用户

六、部署 & 使用步骤

  1. 将上面所有文件放在同一个文件夹,构成完整 Skill 包
  2. 在你的本地 Copilot/Agent 客户端内导入该 Skill 文件夹
  3. 直接下发自然语言指令测试:
    • 帮我生成当前项目的目录树
    • 把 md 文件夹全部转成 html 网页
    • 自动整理桌面杂乱文件

七、拓展优化方向

  1. 在 SKILL.md 中增加日志记录规则,所有文件操作写入本地日志
  2. 给所有脚本增加异常捕获,文件损坏、权限不足时友好报错
  3. 新增文件查重、批量重命名、文件夹备份等扩展工具
  4. 基于这套模板,仿写图片处理、Git 操作、系统监控等更多自定义 Skill

文末总结

Skill 机制是本地 AI 脱离 “纯聊天”、落地实用生产力的核心方案。SKILL.md 是 AI 的 “规章制度”,Python 脚本是真实干活的工具,二者结合,就能让 AI 听懂人话、安全操控本机资源。本文这套文件系统 Skill 模板可以直接复用,修改功能就能快速搭建各类私有化 AI 工具集。

更多推荐