Agent skill 从程序员的角度说,skill 就是类似C 语言的.h公共库,或 Java 里的 import 的 公共库。就是常用的函数打包成库,然后在不同的agent里调用被import。对于程序员来说,还不是那一套吗?! 现在就是在agent 环境里,怎样调用md 文件,文件里定义了一些常用库,那么每一个agent里就不用重写一遍了。 让我们来看一个chatGPT生成的实例:
那么先给出我唯给chatGPT的提示词: "可以给出一个简单实例关于agent skills的吗?从markdown 文本到代码。"
回答:
可以的 👍 我给你一个最小可运行示例 ,演示如何把Markdown 形式的 Agent Skills 描述 转成可执行代码。这个模式常用于:LLM Agent、AutoGPT 风格系统、工具调用框架、Skill Registry。
目标流程:
Markdown Skill 描述 → 解析 → 注册为 Skill → Agent 调用执行
一、Step 1:定义 Agent Skill(Markdown)
假设你有一个 skills.md 文件:
bash
# Skill: add_numbers
## Description
Add two numbers and return the result.
## Parameters
- a: number
- b: number
## Returns
- result: number
再来一个:
bash
# Skill: say_hello
## Description
Say hello to a user.
## Parameters
- name: string
## Returns
- message: string
二、Step 2:目标结构(代码里的 Skill 对象)
我们希望转换成这种 Python 结构:
python
{
"name": "add_numbers",
"description": "...",
"params": ["a", "b"],
"returns": ["result"],
"func": callable
}
三、Step 3:Skill 注册中心(Agent Skill Registry)
先写一个最小 Skill 框架:
python
class Skill:
def __init__(self, name, description, params, returns, func):
self.name = name
self.description = description
self.params = params
self.returns = returns
self.func = func
def run(self, **kwargs):
return self.func(**kwargs)
class SkillRegistry:
def __init__(self):
self.skills = {}
def register(self, skill: Skill):
self.skills[skill.name] = skill
def call(self, name, **kwargs):
if name not in self.skills:
raise ValueError("Skill not found")
return self.skills[name].run(**kwargs)
四、Step 4:Markdown → Skill 元数据解析
简单版解析器(正则方式):
python
import re
def parse_skill_markdown(md_text):
name = re.search(r"# Skill:\s*(.+)", md_text).group(1)
desc = re.search(r"## Description\s*(.+?)\n\n", md_text, re.S).group(1).strip()
params_block = re.search(r"## Parameters\s*(.+?)\n\n", md_text, re.S)
params = re.findall(r"-\s*(\w+):", params_block.group(1)) if params_block else []
returns_block = re.search(r"## Returns\s*(.+)", md_text, re.S)
returns = re.findall(r"-\s*(\w+):", returns_block.group(1)) if returns_block else []
return {
"name": name,
"description": desc,
"params": params,
"returns": returns
}
五、Step 5:给 Skill 绑定真实函数
真实代码实现:
python
def add_numbers(a, b):
return {"result": a + b}
def say_hello(name):
return {"message": f"Hello {name}!"}
函数映射表:
python
FUNCTION_MAP = {
"add_numbers": add_numbers,
"say_hello": say_hello
}
六、Step 6:完整加载流程(Markdown → Agent Skill)
python
registry = SkillRegistry()
with open("skills.md") as f:
md_text = f.read()
skill_meta = parse_skill_markdown(md_text)
skill = Skill(
name=skill_meta["name"],
description=skill_meta["description"],
params=skill_meta["params"],
returns=skill_meta["returns"],
func=FUNCTION_MAP[skill_meta["name"]]
)
registry.register(skill)
七、Step 7:Agent 调用 Skill
python
result = registry.call("add_numbers", a=3, b=5)
print(result)
输出:
bash
{'result': 8}
再试:
python
registry.call("say_hello", name="Alice")
输出:
bash
{'message': 'Hello Alice!'}
八、真实 Agent 系统里的升级版架构
生产系统一般这样:
sql
Markdown Skills
↓
Parser
↓
Skill Schema (JSON)
↓
Validator (参数校验)
↓
Skill Registry
↓
LLM Planner
↓
Tool Executor
九、和 LLM Agent 结合(关键思想)
LLM看到的是:
javascript
{
"name": "add_numbers",
"description": "Add two numbers",
"parameters": ["a", "b"]
}
然后模型输出:
javascript
{
"tool": "add_numbers",
"args": { "a": 10, "b": 20 }
}
Agent Runtime 负责:
python
registry.call(tool, **args)