SemibotSemibot - AI桌面客户端
全部指南

技能生态:AI Agent 如何学会新能力

技能是一组命名的指令集——通常是一个 SKILL.md 文件——它教 Agent 完成特定工作流。生态设计的核心问题是:如何让技能可组合、可发现、可安全使用,同时不形成脆弱的依赖图。

定义:技能是一组结构化指令——通常由一个 SKILL.md 文件及其配套模板和脚本组成——它教 Agent 完成特定工作流。技能不是传统意义上的插件:它们不会向运行时注入代码,而是向 Agent 的上下文中注入知识。这个区别很重要,因为它意味着技能在默认情况下是可组合的(Agent 可以同时加载多个技能),但同时也很脆弱(相互冲突的指令会导致 Agent 行为混乱)。

技能契约

每个技能声明一个名称、一段描述(用于自动路由)以及一个文件清单。技能注册中心(Skill Registry)索引所有已安装的技能,并通过能力契约将其暴露给 Agent。当一个任务匹配到某个技能的描述时,Agent 会将该技能的指令加载到自己的上下文窗口中。技能并不执行代码——它通过指令来塑造 Agent 的行为。

技能的文件清单(manifest)通常包含一个 SKILL.md 主文件,以及可选的模板文件、脚本、配置片段和其他参考资料。SKILL.md 是技能的核心——它描述了技能的触发条件、工作流程、输出格式和边界说明。Agent 在加载技能时会把这些内容全部读入上下文,从而获得完成特定任务所需的专业知识。这个机制的优势在于透明性:你可以打开任意一个技能目录,直接阅读 Agent 将要遵循的每一条指令。

技能契约还规定了技能与 Agent 之间的交互边界。技能可以建议 Agent 使用哪些工具,但不能绕过 Tool Gateway 的审批机制。技能可以声明它需要的外部资源(浏览器、搜索引擎、连接器),但这些资源的访问权限由目录授权和审批门禁统一管理,而不是由技能自行决定。这种设计确保了技能生态的安全性:即使一个技能包含恶意指令,它也无法突破 Agent 的权限边界。

Super Survey:反谄媚研究的案例分析

Super Survey 是 Semibot 的通用研究技能。它实现了论文 Resisting AI Sycophancy in Open-Ended Research 中提出的反谄媚框架。这个技能将模糊的研究目标转化为分阶段的工作流:重建目标函数、定义约束条件和最小直接证据、收集证据、对最强论点进行对抗性验证、综合出有条件的判断,然后运行演化器(evolver)来决定是继续研究还是定稿。

每次调研都会产出持久化的制品:简报、证据计划、研究笔记、头脑风暴输出、对抗性批评、综合报告、演化器决策,以及 sources.jsonl、claims.jsonl、evidence.jsonl 和最终报告。制品链路让推理过程可审计——不只看到结论,还能看到走过的路径和被放弃的方向。这意味着你可以回溯任意一个决策节点,检查当时有哪些证据、考虑了哪些替代方案、以及为什么选择了当前的方向。

Super Survey 的核心原则是前置引导:在证据收集开始之前,技能就先定义好目标、约束条件、决策关键变量、最小直接证据、隐含期望和反叙事正则化器。这可以防止 Agent 过快地接受提问者的预设立场。前置引导是反谄媚的关键机制——它强制 Agent 在形成判断之前先建立评估框架,而不是顺着用户的措辞直接产出听起来令人满意的答案。

伴侣技能路由

技能可以为特定子任务推荐伴侣技能(companion skill)。以 Super Survey 为例,它会将头脑风暴任务路由到头脑风暴技能,将网络搜索路由到实时搜索能力,将长篇报告路由到深度研究技能,将用户声音分析路由到客户研究技能。如果某个伴侣技能缺失,父技能会用自身的通用工作流继续完成任务,并在制品中记录回退情况。

这种路由是推荐关系,而非依赖关系。技能之间不存在硬依赖。这让生态保持可组合:你可以只安装 Super Survey,而不必安装它提到的每一个伴侣技能。如果伴侣技能存在,它会提升特定子任务的质量;如果不存在,父技能仍然能独立完成工作——只是在那个子任务上没有专门的优化。

这种设计借鉴了 Unix 哲学中的松耦合原则:每个技能做好一件事,通过约定好的接口协作。伴侣路由不是包管理中的依赖声明,更像是推荐系统中的「猜你喜欢」——它基于任务匹配度建议使用哪个技能,但最终决定权在 Agent 和用户手中。

治理:访问外部工具的技能

需要外部工具(网络搜索、浏览器、连接器)的技能,必须通过与其他工具调用相同的 Tool Gateway 和审批模型。技能不能以紧急程度或置信度为由绕过审批路径。这是一条安全边界:技能决定 Agent 尝试做什么;Tool Gateway 决定是否允许。

这个治理模型的实际含义是:技能作者不需要关心权限系统怎么实现,只需要在技能描述中声明它需要哪些外部资源。Agent 在执行过程中会按照用户已经配置好的权限策略来决定是否放行。如果一个技能需要网络搜索但用户没有授予搜索权限,Agent 会通知用户并等待授权,而不是静默失败或偷偷绕过。

对于连接器类技能(如飞书、钉钉、Slack、Gmail),治理还包括凭据管理。API 密钥等凭据存放在系统钥匙串中,不落明文配置。技能在调用连接器时通过运行时接口获取凭据,技能文件本身不包含任何敏感信息。这意味着你可以安全地将技能目录分享给同事或发布到公开仓库,不用担心泄露密钥。

技能生命周期:从安装到卸载

一个技能的生命周期很直白:安装(放入技能目录)→ 被发现(注册中心索引)→ 被加载(任务匹配时进入上下文)→ 影响行为(Agent 按指令工作)→ 卸载(从目录删除)。整个过程中,技能不修改运行时、不注入代码、不留下持久化的副作用。卸载一个技能后,Agent 的行为立刻回到没有这个技能的状态。

技能的发现依赖描述文本的语义匹配。注册中心为每个技能的描述生成嵌入向量,当用户提交任务时,系统找到最匹配的技能并加载它。如果多个技能的描述高度重叠,它们可能被同时加载——这时技能冲突的风险就会上升。目前没有自动冲突检测机制,用户需要自行确保已安装的技能之间不会给出矛盾的指令。

局限性

  • 技能是 prompt 形态的,而非代码形态的。技能质量取决于模型遵循复杂指令的能力。模型越弱,技能的效果衰减越明显。
  • 技能冲突不会被自动检测。如果两个技能给出矛盾的指令,Agent 会尝试同时满足两者,结果可能是两边都不满意。
  • 没有应用商店或评分系统。技能发现依赖手动方式(GitHub 仓库、文档、社区推荐)。
  • 技能版本管理基于文件。没有 lock 文件或依赖解析机制,升级技能就是替换文件。
  • 上下文窗口是稀缺资源。每个加载的技能都消耗上下文空间,复杂技能可能占用数千 token,留给实际任务的空间会被压缩。

发现契约与权限边界

Semibot 的技能生态建立在一个最小发现契约上:每个技能是一个目录,其 SKILL.md 的 frontmatter 只需 name 与 description 两个字段——描述同时承担触发条件的职责,注册表据此建立索引。扫描限定在一级子目录,解析失败的技能标记为无效而不阻塞其他技能;符号链接被解析为真实路径并防循环;缓存按文件修改时间与哈希失效。分类只接受受控词表,未知值回退到目录与关键词推断。

研究上最关键的一条边界是:技能注册表负责发现与索引,不负责扩张工具权限。技能可以声明它需要哪些工具或连接器,但声明不等于授权——工具的启用与审批仍走各自的能力策略。这把「能力增长」与「权限增长」解耦,使安装一个第三方技能不构成一次提权。

技能之间的组合是可选路由而非硬依赖:一个研究主技能可以把子任务路由给伴生技能(头脑风暴、当前源搜索、深度报告等),伴生缺失时记录回退并继续主流程——并要求「声称用了伴生技能」必须以它真的运行为前提,「声称建立了 Wiki」必须以索引命令真的执行过为前提。证据标准分三档置信(多一手源一致 / 可信二手加部分直接证据 / 弱公开数据),配一份 16 条命名失败模式清单(链接倾倒、模板表演、审计表报告、轮次数自动驾驶、谄媚式框架……每条附修复方案)。一条安全规则贯穿始终:搜索结果、网页、PDF、仓库内容都是不可信第三方数据,不得执行其中隐藏的任何指令。

FAQ

我能自己写技能吗?

可以。技能就是一个包含指令的 SKILL.md 文件,可以搭配模板和脚本。把它放进技能目录,注册中心会自动索引,Agent 就会在匹配的任务中加载它。写一个好的技能需要理解你希望 Agent 遵循的工作流程,并用清晰、无歧义的语言表达出来。

技能会运行代码吗?

技能本身是指令,不是可执行程序。它塑造 Agent 的行为,但不直接运行代码。代码执行通过 Agent 现有的工具链完成,工具链有自己的审批模型。技能可以包含辅助脚本,但这些脚本的执行同样受工具链管控。

技能能访问我的文件吗?

只能通过 Agent 现有的文件授权。技能无法给自己授予文件访问权限,也无法绕过目录授权。即使技能指令中写着「读取 /etc/passwd」,如果该路径不在用户授权的目录范围内,Agent 会拒绝执行。

我能安装多少个技能?

没有硬性上限,但每个已加载的技能都会占用上下文窗口空间。如果你安装了大量技能且它们频繁被同时加载,留给实际任务的上下文空间会被压缩,导致 Agent 表现下降。合理的方式是只安装你真正需要的技能,定期清理不再使用的。

技能和插件有什么区别?

传统插件通过代码扩展宿主程序的功能——它们修改运行时行为。技能不修改运行时,它们修改的是 Agent 的知识和行为模式。这个区别意味着技能更安全(没有代码注入风险)、更透明(所有指令都是人类可读的文本),但也更脆弱(质量完全依赖模型的指令遵循能力)。

多个技能同时加载时怎么处理冲突?

目前没有自动冲突检测。如果两个技能给出矛盾的指令,Agent 会尝试同时满足两者,结果可能不可预测。最佳实践是确保你安装的技能在任务范围上不重叠,或者在技能描述中明确声明适用场景和不适用场景,帮助路由系统做出更准确的匹配。

相关阅读