文档中心 / SDK 教程 / 定制篇

使用 Skills

在 Cody 里,Skills 是把项目或团队知识打包成可发现文档的一种方式:每个 Skill 对应一份 SKILL.md,框架会在构建对话上下文时按规则加载,让模型在合适的任务上「自带说明书」。本篇先给一段可直接运行的查询示例,再拆开讲四层优先级、内置列表、自定义文件格式与目录配置。

完整示例:列出并读取一个 Skill

下面假设你已按第 01 篇设置好环境变量(本系列演示模型统一为 qwen3.5-plus)。客户端不显式传模型名,由 CODY_MODEL 等环境变量决定。

# list_skills_get_skill_demo.py
import asyncio
from cody.sdk import Cody


async def main():
    # workdir 指向你的项目根目录;模型来自环境变量(如 qwen3.5-plus)
    client = Cody().workdir(".").build()

    skills = await client.list_skills()
    for s in skills:
        print(s["name"], "|", s["source"], "|", s["enabled"])

    skill = await client.get_skill("git")
    print("--- documentation 预览 ---")
    print(skill["documentation"][:500])


if __name__ == "__main__":
    asyncio.run(main())

运行后你会看到每条 Skill 的名称、来源与是否启用;get_skill 则返回 documentation 字段(整份 SKILL.md 文本),便于你在 UI 或调试脚本里展示。

加载机制:四层优先级与 11 个内置 Skill

Cody 按固定顺序合并 Skill 来源,高优先级覆盖低优先级中同名 Skill。记忆口诀:

custom > project > global > builtin

层级典型路径 / 含义说明
custom通过 .skill_dir() / .skill_dirs()CODY_SKILL_DIRS 指定团队共享目录、多仓库共用规范等
project项目下 .cody/skills/随仓库版本化的项目 Skill
global用户目录 ~/.cody/skills/本机所有项目可复用的个人 Skill
builtin框架内置开箱即用,可被上层同名 Skill 覆盖

内置共 11 个 Skill,名称如下(与 SDK 约定一致):

gitgithubdockernpmpythonrustgojavawebcicdtesting

查询 API:list_skillsget_skill

list_skills

异步方法 await client.list_skills() 返回 list[dict],每个元素字段为:

字段类型含义
namestrSkill 标识(小写、连字符)
descriptionstr一句话摘要,供模型判断是否相关
enabledbool是否启用
sourcestr来源(如 custom / project / builtin 等实现细节)

get_skill

await client.get_skill(skill_name) 返回单个 dict,在列表字段基础上增加:

字段类型含义
documentationstrSKILL.md 文件的完整文本(含 YAML frontmatter 与正文)
若名称不存在,SDK 会抛出 CodyNotFoundErrorcode="SKILL_NOT_FOUND")。需要开关启停时可进一步了解 enable_skill / disable_skill(会写回配置文件)。

自定义 Skill:完整的 SKILL.md

每个 Skill 目录下放一个 SKILL.mdFrontmatter 必填 namedescriptionname 必须为小写字母与连字符;description 要写得让模型能判断「何时该读这篇文档」。可选 metadata 存放作者、版本等。

# 示例:.cody/skills/internal-api/SKILL.md
---
name: internal-api
description: 当用户询问本公司内部 HTTP API 的鉴权与错误码约定时使用本 Skill。
metadata:
  author: platform-team
  version: "1.0"
---

# 内部 API 约定

## 鉴权
- 所有请求头携带 `Authorization: Bearer <token>`。
- 开发环境 Base URL:`https://api.dev.example.com`。

## 常见错误
| HTTP | 含义 |
|------|------|
| 401 | Token 无效或过期 |
| 429 | 触发限流,应指数退避重试 |

## 禁止事项
- 勿在日志中打印完整 Token。

正文部分使用普通 Markdown 即可;Cody 会把内容与描述一并纳入技能管理器,供系统提示与检索逻辑使用。

目录配置:.skill_dir().skill_dirs()CODY_SKILL_DIRS

在 Builder 上追加自定义扫描目录的写法如下(与 SDK 一致):

from cody.sdk import Cody

client = (
    Cody()
    .workdir(".")
    .skill_dir("/shared/team-skills")
    .skill_dirs(["/dir1", "/dir2"])  # 批量
    .build()
)
注意:调用 .skill_dirs([...]) 会用新列表整体替换当前已收集的自定义目录。若需要同时保留 /shared/team-skills/dir1/dir2,请把前者一并放进 .skill_dirs([...]) 的列表,或只使用多次 .skill_dir(...) 追加。

环境变量方式适合容器或 CI,多个路径用冒号分隔(与文档约定一致):

export CODY_SKILL_DIRS=/shared/team-skills:/home/user/my-skills

如需在代码里显式指定通义千问(与第 01 篇一致),可使用:

client = (
    Cody()
    .workdir(".")
    .model("qwen3.5-plus")
    .base_url("https://coding.dashscope.aliyuncs.com/v1")
    .api_key("sk-xxx")
    .build()
)
Skills 由框架在构建 Agent 上下文时自动注入到系统提示相关逻辑中,无需在业务代码里手动「打开 Skill 开关」。你只要把 SKILL.md 放对目录、写好 description,并保证对应 Skill 处于启用状态即可。

小结

本篇覆盖了 Skills 的四层优先级、11 个内置名称、list_skills / get_skill 的返回字段,以及自定义 SKILL.mdskill_dir / CODY_SKILL_DIRS 的配置方式。下一步建议在真实项目里加一个 .cody/skills/ 目录试跑,再阅读 第 08 篇 · 集成 MCP,把外部工具与文档能力接到同一套 Agent 上。

← 上一篇 Prompt 定制与多模态