外观
Skill(能力声明式)
v1.0.0+。Skill = 一个目录 +
SKILL.md(YAML frontmatter + Markdown body),声明式描述一个能力。tangyuanAI 遵循 Anthropic Agent Skills 开放标准。
快速上手(类化用法)
Skill 类是核心。subclass + 类属性 path → 实例化自动从 SKILL.md 解析 name/description/parameters:
python
import tangyuanAI as t
from tangyuanAI.skill import Skill
# 1. 准备一个 skill 目录
# ./skills/time/SKILL.md:
# ---
# name: time
# description: 查询世界各时区当前时间
# arguments:
# - tz
# ---
# 查询 $tz 时区的当前时间。
class TimeSkill(Skill):
path = "./skills/time" # 类属性:指向含 SKILL.md 的目录
t_skill = TimeSkill() # 自动加载 + 自动注册到 skill 池
print(t_skill.name, t_skill.description)
# → time 查询世界各时区当前时间
# 2. AI 直接调用
rendered = t_skill.render({"tz": "Asia/Shanghai"})
# → "查询 Asia/Shanghai 时区的当前时间。"用法:直接构造
python
from tangyuanAI.skill import Skill
# 从目录加载(自动解析 SKILL.md frontmatter)
s = Skill("./skills/weather") # auto_register=True 默认进池
s = Skill.from_dir("./skills/weather") # 同 Skill(path)
# 禁用自动注册(如只想持有不共享)
s = Skill("./skills/code_review", auto_register=False)
# 或完全手动(无 SKILL.md)
s = Skill(name="my_skill", description="...", parameters={...})SKILL.md 格式
markdown
---
name: weather_query # 必填(缺省用目录名)
description: 查询某城市当前天气
arguments: # → 自动生成 parameters schema(required)
- city
when_to_use: 用户问天气时
---
查询 {city} 的天气。
## Examples
- 北京今天天气怎么样?
- 上海会下雨吗?实例化时自动解析 frontmatter → name / description / arguments → 生成 parameters(OpenAI schema),无需手写。
自动进池(共享,不隔离)
python
# 每个 Skill 实例默认自动注册到全局 skill_registry(共享池,AI 可遍历)
from tangyuanAI.skill import skill_registry
s = Skill("./skills/weather") # 已自动注册
skill_registry.get_skill("weather") # → 同名 Skill 实例
skill_registry.list_skills() # → [{"name", "description", ...}]
skill_registry.unregister_skill("weather")Skill 不做隔离(能力共享是设计目标):所有实例进同一池,AI 可访问任意 Skill。
渲染与参数替换
python
# render(arguments) 执行参数替换 + shell 预处理,返回最终 prompt
text = s.render({"city": "北京"})
# $city → 北京;$0-$9 位置参数;$ARGUMENTS 完整参数字符串;${CLAUDE_SKILL_DIR} 目录路径注册为工具(Agent Function Calling)
python
# 桥接到 tool_registry,Agent 可通过 Function Calling 调用
s.register_as_tool() # 或 skill_bridge.register_skill_as_tool(s)
# 顶层:skill_registry.register_skill(dir) 也会自动桥接编程式注册
python
skill_registry.scan_and_register(base_paths=[".claude/skills/"], auto_watch=True) # 目录扫描 + 热加载
skill_registry.register_skill("./skills/weather") # 单个目录