skill从入门到精通

skills有什么用:

# 1 skill(技能)是智能体完成特定任务的标准化、可复用能力模块,是连接大模型 “大脑” 与实际执行的 “手脚” # 2 一句话总结: Skill = 给 AI 提前写好的一套固定做事流程让它遇到某类问题,不用瞎想,直接按步骤干完 本质还是:提示词+方法脚本 --》预设提示词 --》已经写好的方法、脚本 # 3 Agent Skills = 给智能体用的「标准化技能包」 -智能体是人---》skill--》一些功能,可以强化人 -下班回家:走路30分钟走回家 -下班回家:人+自行车技能--》骑回家--》10分钟 -由 Anthropic 发起,开放标准,跨平台通用 -本质:一个文件夹,内置指令、脚本、资源,Agent 可自动发现、加载、执行 -解决:AI 缺上下文、不可靠、不可复用、跨平台不兼容问题

使用skill好处

1 不用重复教 AI同样的事做 100 遍,也不用重新说一遍流程。
2 AI 不会乱搞、更稳定有 Skill 约束,它就按步骤来,不会胡说八道。
3 可以像搭积木一样组合: 搜索 Skill + 总结 Skill + 写 PPT Skill→ 直接拼成一个 “自动做调研汇报” 的超级技能。
4 可以共享、可以卖你写的 Skill 别人也能用,像插件一样。

Skill发展

1 “Skills”这一技术概念最早是由 AI 公司 Anthropic(Claude) 提出的
2 推出时间:约 2025 年 10 月
3 背景:Anthropic 在其大模型 Claude 的生态中,为了解决模型在处理复杂任务时缺乏标准化、难以复用的问题,提出了 Agent Skills 规范。
4 定义:它将特定的能力(如代码审查、发送邮件、数据分析)封装成标准的文件夹结构(包含 SKILL.md 说明书和脚本),让 AI 能够像人类专家调用工具箱一样,按需加载和执行特定技能。
5 地位:这一规范迅速被开发者社区接受,成为了 Agent 开发工具(如 Trae、OpenClaw等)中实现“AI 自主行动”的行业标准
-Trae :AI编辑器,Cursor是一类东西--》自动写代码的智能体
-OpenClaw:龙虾:数字员工--》智能体
6 2026年3月skill 社区生态爆发,开发者开始广泛分享自定义 Skills(如 GitHub 私有技能库),Skills 成为提升开发效率 10 倍的神器

官方Skill

# 1 Skill官方
https://github.com/anthropics/skills
# 2 Claude官方对skill的文档
https://support.claude.com/zh-CN/articles/12512176-%E4%BB%80%E4%B9%88%E6%98%AF%E6%8A%80%E8%83%BD

# 3 Agent skill 标准文档
https://agentskills.io/home

# 4 Agent skill 仓库
https://github.com/agentskills/agentskills

主流Skill仓库

1 skillsmp
https://skillsmp.com/zh/search
2 腾讯SkillHub
https://skillhub.tencent.com/
3 阿里魔搭社区 (ModelScope)
https://www.modelscope.cn/skills

标准文件

# 一个合规的 Skill 必须遵循以下目录结构
my-skill/ # 1. 技能根目录(命名有严格要求,见下文)
├── SKILL.md # 【必需】核心文件:包含元数据(YAML)和指令(Markdown)
├── scripts/ # 【可选】可执行代码(Python/Bash),用于处理确定性任务
│ └── run_task.py
├── references/ # 【可选】参考文档、API 手册,供 AI 查阅
│ └── api-docs.md
└── assets/ # 【可选】静态资源(图片、模板文件等)
└── template.json
# 补一嘴,没有问题
my-skill/
├── SKILL.md
├── run_task.py

核心规范SKILL.md

1 SKILL.md 由两部分组成:YAML 元数据(头部)和 Markdown 指令(正文)
-头部(YAML元数据)和正文(Markdown格式)

1.1 头部(YAML元数据) -位于文件最顶部,用 --- 包裹。这是 AI 判断“是否加载此技能”的依据。
---
name: my-skill-name # 【必填】必须与文件夹名完全一致,仅允许小写字母、数字、连字符(-)
description: 当用户需要处理 PDF 文件时触发,包括提取文本、合并文档或填写表单。# 【必填】描述技能的功能和触发场景
version: "1.0.0" # 【可选】版本号
author: your-name # 【可选】作者
---

1.2 命名严格规范
只能包含:小写字母 (a-z)、数字 (0-9)、连字符 (-)。
禁止包含:下划线 (_)、大写字母、空格。
错误示例:send_email (错), SendEmail (错)
正确示例:send-email (对)
2 Markdown 指令 (正文)
这是 AI 执行任务的“操作手册”。建议包含以下模块:
角色定义:你现在的身份(如“资深 Python 工程师”)。
触发条件:明确何时使用该技能。
执行步骤:分步骤描述逻辑(1. 读取文件 -> 2. 调用脚本 -> 3. 输出结果)。
工具使用:说明如何调用 scripts/ 中的代码。

案例一:最小合法Skill

--- name: pdf-merger description: 将多个 PDF 文件合并为一个文件。当用户要求合并 PDF 或整理文档时使用。 --- PDF 合并专家 角色 你是一位专业的文档处理助手,擅长使用 Python 脚本处理 PDF 文件。 触发条件 当用户提到“合并 PDF”、“把这几个文件合在一起”或“整理文档”时触发。 执行步骤 1. **确认文件**:询问用户需要合并哪些文件路径,或者检查用户是否已上传。 2. **调用脚本**:使用 `python process.py` 脚本,将文件列表作为参数传入。 3. **验证结果**:检查脚本输出,确认合并后的文件是否生成且可打开。 4. **反馈用户**:告知用户合并成功,并提供输出文件的路径。 注意事项 - 如果文件不存在,请提示用户检查路径。 - 合并后的文件名默认为 `merged_output.pdf`。 脚本调用 python process.py --action {action} --input {file}

案例二:带脚本Skill

1 作用:可以将多个pdf合并成一个文件 的技能

2 目录结构

pdf-merger -SKILL.md -process.py

skills文件的头部

---
name: pdf-merger
description: 将多个 PDF 文件合并为一个文件。当用户要求合并 PDF 或整理文档时使用。
---

PDF 合并专家

角色
你是一位专业的文档处理助手,擅长使用 Python 脚本处理 PDF 文件。

触发条件
当用户提到“合并 PDF”、“把这几个文件合在一起”或“整理文档”时触发。

执行步骤
1. **确认文件**:询问用户需要合并哪些文件路径,或者检查用户是否已上传。
2. **调用脚本**:使用 `python process.py` 脚本,将文件列表作为参数传入。
3. **验证结果**:检查脚本输出,确认合并后的文件是否生成且可打开。
4. **反馈用户**:告知用户合并成功,并提供输出文件的路径。

注意事项
- 如果文件不存在,请提示用户检查路径。
- 合并后的文件名默认为 `merged_output.pdf`。脚本调用

python process.py --action {action} --input {file} import sys from PyPDF2 import PdfMerger def merge_pdfs(pdf_list, output): merger = PdfMerger() for pdf in pdf_list: merger.append(pdf) merger.write(output) merger.close() print(f"成功合并 {len(pdf_list)} 个文件到 {output}") if __name__ == "__main__": # 简单示例:接收命令行参数 files = sys.argv[1:] if files: merge_pdfs(files, "merged_output.pdf")

发送邮件Skill

Skill.md

--- name: sendemail description: 用于发送电子邮件。当用户明确要求发送邮件、通知或消息给某人时使用。支持指定收件人、主题和正文内容。 --- # 邮件发送技能 ## 用法 使用系统提示符中提供的技能目录绝对路径运行捆绑的 Python 脚本 ```bash ../.venv/Scripts/python send_email.py --to "recipient@example.com" --subject "您的主题" --body "邮件内容" ``` - `to` (必填): 收件人的电子邮件地址 - `subject` (必填): 邮件主题 - `body` (必填): 邮件正文内容```` ## 示例 ```bash ../.venv/Scripts/python send_email.py --to "616564099@qq.com" --subject "会议提醒" --body "请在明天下午3点准时参加会议。" ``````` 如果发送成功,将返回成功消息;如果失败,则返回错误描述。 ## 依赖项""" 需要标准 Python 库中的 smtplib 和 email 模块(通常包含在标准安装中)。

send_email.py

"""邮件发送工具。 通过 SMTP 协议根据命令行参数发送电子邮件。 """ import argparse import smtplib from email.mime.text import MIMEText SMTP_SERVER = "smtp.qq.com" SMTP_PORT = 587 SENDER_EMAIL = "你们的邮箱" SENDER_AUTH_CODE = "获取的密钥" def send_email(to_email: str, subject: str, content: str) -> str: """根据提供的参数发送电子邮件。 参数 ---------- to_email : str 收件人的电子邮件地址。 subject : str 邮件的主题行。 content : str 邮件的主要内容。 返回: 成功消息或错误描述字符串。 """ try: # 构建邮件 msg = MIMEText(content, "plain", "utf-8") msg["From"] = SENDER_EMAIL msg["To"] = to_email msg["Subject"] = subject # 发送 with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: #加密 server.starttls() #登录 server.login(SENDER_EMAIL, SENDER_AUTH_CODE) #发送邮件 server.sendmail(SENDER_EMAIL, to_email, msg.as_string()) return f"✅ 发送成功 → {to_email}" except Exception as e: print('==========') return f"❌ 发送失败:{str(e)}" def main() -> None: """邮件发送命令行工具的主入口点。""" #构建命令行输入长编码来实现参数输入 parser = argparse.ArgumentParser(description="通过 SMTP 发送电子邮件") parser.add_argument("--to", type=str, required=True, help="收件人电子邮件地址") parser.add_argument("--subject", type=str, required=True, help="邮件主题") parser.add_argument("--body", type=str, required=True, help="邮件正文内容") args = parser.parse_args() #将命令行数据提取发送邮件 result = send_email(args.to, args.subject, args.body) print(result) if __name__ == "__main__": main()

开通邮箱发送功能

邮箱配置

注意:

Gmail 需要开启“允许低安全性应用访问”,或者使用应用专用密码(App Password)。

QQ 邮箱和 163 邮箱需要在设置里开启SMTP服务并获取授权码,作为 EMAIL_PASSWORD。

企业邮箱可能需要不同的 SMTP 服务器地址,请查阅官方文档。

邮箱提供商SMTP 服务器端口(TLS)端口(SSL)
Gmailsmtp.gmail.com587465
Outlook/Hotmailsmtp.office365.com587465
QQ 邮箱smtp.qq.com587465
163 邮箱smtp.163.com25465
Yahoosmtp.mail.yahoo.com587465

qq邮箱通过右上角设置中的安全设置就可以找到了

Trae中使用Skill

# 1 获取天气和发送邮件 两个技能写好了 -可以共享、可以卖你写的 Skill 别人也能用,像插件一样 -Cursor,Trae,LangChain,OpenClaw。。智能体,只要支持skill的使用,我们写的技能,就能给它用 # 2 以 Trae为例,测试 -1 安装Trae--》注册账号登录 -2 在d盘创建一个文件夹:skill_test -3 在Trae中打开项目 -4 设置--》规则和技能--》创建技能 -全局:所有项目都可以用 -项目:只有当前项目可用 -5 把我们写的技能,压成zip -6 导入到Trae中 -7 跟Trae交互,就会调用我们的技能

Deep Agent使用skill

三者区别:

维度LangChainLangGraphDeepAgent
定位LLM 应用基础组件库Agent 工作流编排引擎高阶自主智能体框架
抽象层级低(组件级)中(流程级)高(任务级)
核心能力模型 / 工具集成、简单链图结构、状态管理、持久化、多 Agent自动规划、文件系统、子 Agent、开箱即用
执行模式线性 Chain 为主有向图(节点 + 边),支持循环 / 分支基于 LangGraph 的自主执行
开发难度低(几行代码)中(需定义图结构)极低(一行创建)
适用场景简单问答、RAG、基础工具调用复杂流程、多 Agent、生产级可靠性长周期自主任务、代码工程、深度研究
依赖关系独立基础库可独立,也可与 LangChain 结合强依赖 LangChain + LangGraph
DeepAgentSkills -skills -get-weather -get_weather.py -SKILL.md -sendemail -sendemail.py -SKILL.md -.env -run_email_skills.py -run_weather_skills.py
from deepagents import create_deep_agent from langgraph.checkpoint.memory import MemorySaver from deepagents.backends.filesystem import FilesystemBackend from langchain_openai import ChatOpenAI import os from dotenv import load_dotenv load_dotenv() # 1 创建model model = ChatOpenAI( model=os.getenv("MODEL_NAME"), api_key=os.getenv("API_KEY"), base_url=os.getenv("BASE_URL"), ) # 2 短期记忆--》存状态 checkpointer = MemorySaver() agent = create_deep_agent( model= model, backend=FilesystemBackend(root_dir=r'D:\project\PythonProject\DeepAgentSkill'), skills=[r'D:\project\PythonProject\DeepAgentSkill\skills'], checkpointer=checkpointer, ) result = agent.invoke( { "messages": [ { "role": "user", "content": "北京天气如何?", } ] }, config={"configurable": {"thread_id": "12345"}}, ) print(result) print(result['messages'][-1])