agent 的 skill 与 toolcall
skill 是什么
skill 可以理解为给 agent 的“可复用操作手册”。
- 它描述一类任务该怎么做(流程、注意点、约束)
- 通常放在
SKILL.md,必要时配套脚本和参考资料 - 目标是让 Agent 在相似任务上更稳定,而不是每次临时发挥
一句话:skill 决定“怎么做这类事”。
一个简单的 skill 例子
例如:sql-review skill
- 触发场景:用户说“帮我 review 这段 SQL”
- skill 内容:
- 先检查语义正确性
- 再检查索引命中与全表扫描风险
- 最后给出优化版 SQL 和风险说明
这个 skill 不直接执行数据库命令,它主要提供步骤和标准。
实现一个 skill?
- 先定义触发条件:什么请求出现时要启用这个 skill
- 写
SKILL.md:目标、输入输出、执行步骤、失败处理 - 把可重复动作脚本化:放到
scripts/,减少手工操作 - 用 2~3 个真实任务验证:看结果是否稳定、是否真的省步骤
重点不是“写得多”,而是“可复用、可触发、可稳定执行”。
---name: sql-reviewdescription: Review SQL for correctness and performance risks.---
## Workflow
1. 检查 SQL 语义是否正确(字段、表、聚合、条件)2. 检查性能风险(全表扫描、函数索引失效、排序开销)3. 输出优化建议(修改版 SQL + 风险说明)toolcall 是什么
toolcall 是 Agent 在当前任务里实际调用工具的动作。
- 例如读文件、搜文本、运行测试、改文件
- 每次调用都有输入和输出,属于“执行层”
- 它解决的是“现在这一步具体怎么落地”
一句话:toolcall 决定“这一刻做什么操作”。
一个简单的 toolcall 例子
用户说:“把 README.md 里所有 foo 改成 bar。”
可能的 toolcall 流程:
- 读取文件内容
- 比如执行
cat命令
- 比如执行
- 执行替换
- 比如执行
sed命令
- 比如执行
- 再读一遍确认替换结果
- 然后再执行
cat命令
- 然后再执行
这里每一步都是具体调用工具,不是抽象流程说明。
skill 和 toolcall 的区别是什么
按我的理解:skill 是策略模板;toolcall 是具体执行的工具
- 抽象层级:
skill高层、可复用toolcall低层、面向当前任务
- 生命周期:
skill可长期复用toolcall是一次会话中的临时动作
- 作用对象:
skill约束“方法论”toolcall改变“当前环境/文件/结果”
还是按照刚刚的例子:sql-review skill
- 先检查语义正确性
- 调用某种 sql linter 来检查
- ↑工具调用
- 再检查索引命中与全表扫描风险
- 检查索引命中需要连接到数据库
- ↑工具调用
- 最后给出优化版 SQL 和风险说明
而这一整个流程实际上是一整个 skill,可以说 skill 本身就是由 LLM 本身能力+一大堆 toolcall 实现的