技能链与自动化工作流:构建 AI 流水线
到现在为止,我们的 Skill 都是“单次触发”的:用户提问 -> 调用 Skill -> 返回结果。
但在现实世界中,解决一个问题往往需要多个步骤。例如“修复 CI 报错”可能包含:查看日志 -> 分析错误 -> 修改代码 -> 提交 -> 重新运行。
本章将介绍 技能链(Skill Chaining) 的概念,教你如何设计能够协同工作的 Skill 组合,构建强大的自动化工作流。
1. 什么是技能链 (Skill Chaining)?
Q: AI 能不能自己连续调用好几个 Skill?还是说我得一次次下命令?
A: 现代 AI 模型(特别是像 Claude 3.5 Sonnet 这样强大的模型)具备 Chain of Thought (思维链) 能力。
当你提供了一组工具(Skills)后,AI 会根据任务目标,自动规划执行路径。
示例场景:用户说“帮我把这个功能上线”。
AI 的思考过程:
- 我需要先检查代码风格 -> 调用
lint-checker。 - 如果有错误 -> 调用
auto-fixer。 - 代码没问题了 -> 调用
git-commit-assistant。 - 最后推送到远程 -> 调用
git-push。
这一系列连续的调用就是技能链。作为开发者,你不需要编写“链条”本身的逻辑,你只需要提供环节(Skills),并让 AI 知道它们之间如何配合。
2. 实战:构建 CI/CD 故障诊断工作流
Q: 我们来做一个复杂的例子,自动诊断 CI 失败的原因。
A: 我们需要拆解任务,创建(或复用)三个独立的 Skill。
Skill 1: ci-log-fetcher (获取日志)
- 功能:从 CI 系统(如 GitHub Actions)拉取最新的失败日志。
- Usage:
gh run view --log-failed
Skill 2: error-analyzer (错误分析)
- 功能:提取日志中的关键报错堆栈。
- Usage:
python analyze_log.py "{log_content}"
Skill 3: code-search (代码定位)
- 功能:根据报错信息搜索相关代码文件。
- Usage:
grep -r "{error_keyword}" .
工作流演示:
- 用户:“CI 又挂了,帮我看看。”
- AI:
- (调用
ci-log-fetcher) -> 获得 500行日志。 - (思考) 日志太长,我需要分析关键错误。
- (调用
error-analyzer) -> 发现 "NullPointerException in user_service.py line 42"。 - (思考) 我需要看看那行代码是什么。
- (调用
code-search或直接读取文件) -> 读取user_service.py。 - 最终回复:“CI 失败是因为
user_service.py第42行空指针,建议加一个非空判断。”
- (调用
3. 设计原则:原子化与正交性
Q: 我是该写一个超级大的 fix-everything Skill,还是写很多小 Skill?
A: 绝对是很多小 Skill。
遵循 UNIX 哲学:
- **原子化 (Atomic)**:每个 Skill 只做一件事,并且做好。
- **正交性 (Orthogonal)**:Skill 之间功能不重叠。
为什么?
- 灵活:小 Skill 可以被 AI 自由组合。
log-fetcher既可以用于修 Bug,也可以用于统计构建时间。 - 容错:如果大 Skill 中间一步挂了,整个任务就失败了。小 Skill 链条中,AI 可以根据中间结果动态调整策略(比如 Log 没拉到,它可能会尝试另一个命令)。
4. 引导 AI 进行链式调用
Q: 有时候 AI 比较笨,只调用了第一个就停了,怎么办?
A: 你可以通过 System Prompt 或 Skill Description 来“暗示”或“强迫”它继续。
技巧 1:在 Description 中引用其他 Skill
在 ci-log-fetcher 的 SKILL.md 中写道:
“获取日志后,建议立即使用
error-analyzer技能进行分析,而不是直接展示原始日志。”
技巧 2:在 Output 中包含提示
修改脚本的输出:
print("日志获取成功。建议下一步:分析错误堆栈。")AI 看到这个输出,更有可能顺着提示往下走。
5. 状态共享与上下文传递
Q: Skill A 的输出怎么传给 Skill B?
A:
- 通过对话上下文:Skill A 打印到 stdout -> AI 读取 -> AI 将内容作为参数传给 Skill B。这是最自然的方式。
- 通过临时文件:
- Skill A:
echo "data" > /tmp/data.json - Skill B: 读取
/tmp/data.json - 适用场景:数据量非常大(如完整日志),不适合全部塞进对话上下文(Token 限制)。
- Skill A:
总结
技能链是 Agent Skills 的终极形态。通过将简单的工具组合起来,我们实际上是在构建一个自治的智能体。
- 原子化设计是基础。
- AI 的规划能力是核心。
- 引导与提示是润滑剂。
在下一章,我们将讨论在开发这些复杂系统时不可避免的问题——调试与优化。当你的 Skill 越来越多,如何保证它们准确触发且运行高效?
参考资源: