# 技能链以及为什么技能应该是行动
**作者**: akira
**日期**: 2026-04-01T16:40:15.000Z
**来源**: [https://x.com/realmcore_/status/2039382343581147414](https://x.com/realmcore_/status/2039382343581147414)
---

本文大部分内容转载自我们的博客:https://randomlabs[.]ai/blog/skill-chaining
## 介绍
大多数智能体系统将技能视为手动触发的静态提示。@0xrandomlabs 我认为智能体技能应该更贴近人类技能的本质:即动态地运用情境行为来解决任务。技能应该是智能体实际执行的行为, 而不是智能体阅读的。
在这篇博客中,我们将探讨当前智能体技能实现方式的局限性、我们的重新设计思路,以及我们最终决定在 Slate 中实现这些技能的原因。我们还将介绍促成我们当前设计的各种限制,以及如何在 Slate 中专门设置自动化技能。
首先,我们先简单介绍一下石板的工作原理。
## 简要回顾一下 Slate 的执行模式
了解 Slate 的工作原理在以后会非常有用,所以我们现在就从它开始讲起。
Slate 使用线程来执行增量操作。
操作是指朝着目标迈出的较小范围的单一步骤,例如:“打开开发服务器”、“出于 Y 原因查看文件 X 的更改”、“在代理上点击目标路径”。
线程是一个独立的工作进程,拥有自己的上下文窗口、作用域权限和作用域任务执行权限。它执行一个权限限定、作用域限定的任务,并返回其操作的压缩表示。 嘘,对于 PLT(程序逻辑技术)的开发者来说,这与 Lisp 中的延续(continuation)机制非常相似:线程可以部分执行,返回表示该部分执行状态的进程,并且可以稍后恢复执行。
要进一步了解 Slate 的工作原理以及我们如何处理情景记忆,请查看我们的技术博客在此
好了,进入正题。
## 背景
人类的技能是后天习得的。我们通常会先看到别人完成我们想要完成的任务,然后反复尝试模仿这种行为,直到将其内化为一种情境条件反射行为。之后,我们会不断完善并重复运用这种行为。
人类的技能学习可以通过以下两种方式与学习领导力(LLM)相对应:
预训练期间的行为克隆(某些已展示的标记序列)
训练后阶段的智能强化学习(向模型传授有用的战术和策略)
这些行为会在测试时被诱发出来。
然而,如果没有 LLM 的持续学习,就没有多少途径可以引发模型知道但没有主动选择采用的行为。
就本博客而言,我们可以说,LLM(法学硕士)自然而然不会采用的所有策略和战术都属于知识过剩的。
知识悬垂是指模型选择执行的操作与模型已知操作能力之间的差距。技能提供了一种特定领域的解决方案来克服这一问题(类似于规则),它通过直接注入文本来约束模型,使其执行那些即使知道如何执行也不会自行执行的操作。
正是在这里,智能体的技能(以及良好的指令调优)能够显著提升性能,因为它们允许你引入指令,将分布式知识转化为分布式行为。这种现象依赖于情境学习 。[1]
## 规则与技巧
这里有一个很明显的问题:为什么不直接用规则来实现呢?
为了让所有阅读本文的人都理解一致:
渐进披露的原则
这样做的核心好处在于,由于技能应该是情境相关的,因此主智能体的上下文不会立即被数万条并非总是有用。当有效上下文长度远低于 20 万条指令时,这种带前缀的上下文就显得尤为珍贵。
预期模型会根据需要激活和停用技能,动态地选择不同情况下所需的分布外上下文。(顺便一提,Codex 似乎是唯一真正做到这一点的模型。)
实际上,通常是用户主动激活这些技能。
除了激活之外,你需要手动激活模型的技能,而没有明确的生命周期管理。更重要的是,人们将技能(原本应该是一种非正式的持续学习方式)视为终端代理中的斜杠命令。

这似乎并不是我们真正想要的、基于情境的行为改变,而这种改变正是技能发展所需要的。
## 将技能建模为情境性行动
技能的定义更自然地与那些在特定情境下有用的行为相契合,这些行为具有情境性,且在使用后不会污染主要情境。这与你运用已掌握的技能时只需较少的认知工作量非常相似。
技能似乎也与情景记忆的概念有较好的对应关系。例如,当你在给汽车换轮胎时,你很可能清楚地知道自己正在进行哪个步骤。但关键在于:你学习了一系列动作,这些动作建立在其他已学习的子程序之上,最终构成了你这项名为“换轮胎”的新技能。而“换轮胎”现在是一个全新的、独立的场景,你可以专注于此并将其记忆为一个“情景”。
以前,所有这些子程序都是你单独学习的内容(或者可能是在更换轮胎的背景下学习的),然后你决定将它们全部应用到一个更高阶的序列中,这使你成功完成了任务。
完全自学这些曲子需要付出很多努力,对吧?但很可能有人教过你其中的一些曲子或者整套曲目。
这样看来,学习一项技能就类似于给模型赋予一项技能。而学习如何按顺序排列这些技能,就类似于给模型赋予如何按顺序排列这些技能。
但我想重申一下,这里仍然存在问题。
你学习视频的那个 YouTuber 并不是在默默地监视你,也不是在用斜杠命令提醒你该按步骤操作或者重新观看那个视频。实际上,是你自己主动回忆起完成这项技能所需的步骤,并将其应用到目标动作序列中。
因此,我们对技能的定义有了更清晰的认识。
技能应该是情境性行为,由更大的序列组成,其中目标和环境状态指导该技能的使用。
如果这个定义恰当,并且考虑到我们对 Slate 的了解,Slate 将是实现更自然技能使用方式的理想架构。Slate 的线程机制能够动态地配置权限、提示和隔离的上下文,从而执行特定范围的操作。基本上,所有你想要的用于动态运行技能的权限和执行模型,以及通过添加技能来参数化线程的方式,都应该相对简单易用。
## 在石板中培养动态技能
我们使用 Slate 测试的第一件事是为主线程(“协调器”)提供可用技能列表、查看和搜索技能的方法,以及直接实例化带有技能的线程的参数。
从理论上讲,Slate 的架构使其能够操作技能
太棒了,技能问题解决了,一切都很美好,世界从此改变等等等等。
哈。不。
我们最初的解决方案大致如下:
我们为主线程添加了一个技能工具,除了编排功能外,还添加了查看和列表子命令。
然后,它可以直接将前端工程技能之类的东西应用到它启动的线程上,并且在该线程的当前回合中,该技能将处于激活状态。该技能在该回合结束时停用,并且线程的上下文将被清理!
太好了,这样我们就有了情境范围的技能使用,主代理可以根据它所了解的应该使用该技能的情况来激活该技能。
它在诸如以下方面确实非常有效: 默认人类学前端技能 。
然而,这里存在一个核心问题:如何处理用户交互?
有些技能需要用户交互,例如规划、决策等。
以下是我们提出的方案:
为线程提供一个工具,以便弹出一个阻塞对话框,用户可以在该对话框中直接回复代理。
如果线程需要与用户通信,则强制其升级到主代理;并使用线程来驱动主代理与用户的交互。
第三件秘密事。
选项 1:直接一次性对话框
我们通过在线程中提供一个类似于提问工具的工具来实现这一功能。模型可以向用户发送消息并获取回复。这与权限请求对话框有些类似。
当提供需要用户交互的技能时,可以将主代理设置为子代理,以便与用户聊天。
这里有两个问题:
用户体验糟糕透顶,作为用户来说简直是噩梦。
次级代理人实际上无法与用户进行合理的对话。
这两点都使得互动/对话技巧几乎不可能掌握。
选项 2:强制线程升级
这遵循一种更具确定性的基于故障的方法。基本上,我们可以告诉子代理:“嘿,如果你被赋予一个需要与用户对话的任务,但实际上你无法做到,这意味着你应该向协调器报告问题并终止该回合。”
这显然是不好的,因为编排代理会生成一个子代理,而这个子代理只会撞墙,然后控制主代理的行为。
这不仅会消耗资源并扰乱模型,而且还会激励线程来驱动编排器的行为。
我们之前讨论过多智能体的问题,而这种由一个线程驱动主智能体的特定解决方案,会使它们处于相同的优先级,这意味着你需要一个共识机制,最好还是避免使用。
选项 3:秘密的第三件事
我们认真思考了很久。我们最聪明的朋友们聚在一个房间里,详细讨论了我们到底需要什么。
然后我们意识到:如果我们改变执行模型会怎样?
如果并非所有线程都是异步并行运行的呢?
这一连串的提问恰好引出了一个解决方案,该方案涵盖了所有可能的交互情况,产生了最佳的用户体验,并保持了线程作用域执行的所有优势。
我们更新了 Slate 的执行模型,以支持一个新的原语:forking!

## 语境分化和互动技能运用
注意:截至 2026 年 4 月 1 日,此功能仍处于 Alpha 测试阶段,为了确保生产环境的可靠性,已推迟发布。
Slate 之前强制所有线程在后台运行,这意味着线程无法合理地与用户进行技能交互。
我们添加了同步分叉,以便用户可以继续与一个基本上是同一个协调代理的代理进行对话,但额外的好处是,一旦技能使用完毕,隔离和情景记忆仍然会发挥作用。
其工作原理是,Slate 可以选择创建一个新的进程分支,该分支会阻塞整个系统。这类似于运行一个同步函数。
分支不能像线程那样继续运行,它们会立即阻塞协调器执行的所有其他操作。
在用户界面方面,它们会在底层强制接管用户界面交互,这意味着用户体验只是与客服人员的持续聊天。
作为用户,您不会遇到太多变化,但它会解锁交互式技能的使用。

## 这一切能给你带来什么?
这实现了技能自动化。通过改变 Slate 的实现模型,使其包含 fork 功能,Slate 的委托能力涵盖了在线程中使用技能作为操作的所有可能功能需求。既然我们现在能够通用地满足将技能作为子线程的需求,那么我们就可以开始编排它们了。
因此,我们还要引入另一个概念: 编曲技巧
编排技能是指用户根据需要在主编排代理上激活的技能。与普通技能引用脚本和资源不同, 编排技能应该引用……其他技能!
现在的关键在于,您可以选择性地启用模型,以了解如何使用线程、分支和技能的条件激活序列。
你可以这样定义:
> ------
> 这项技能使你能够在代码库中正确地实现各种功能。
> 当用户想要实现新功能时,建议他们掌握这项技能。
> ------
> 当此技能处于激活状态时,你应该首先 fork 并运行 `plan` 技能。
> ...
> 分叉完成后,Slate 便开始实施该计划。
> ...
> 审查完代码后,运行 `/qa` 技能来验证输出。
> ...
> `/qa` 技能成功完成后,你应该将技能使用结果返回给用户。

这项技能将教会你如何运用你所有其他技能来执行一系列动作。
此外,因为它只是一项技能,所以你可以在编排技能中定义不同的子程序包,从而拥有多种不同的操作模式。
与现有的框架相比,主模型可以以相当程序化的方式有条件地执行这些子程序。
会话结束后无需再手动运行 /review 命令!
我们很高兴地宣布,技能连锁功能终于上线了。
如果您在使用这些新功能时遇到任何问题,或者最终未能成功使用,请发送邮件至 team@randomlabs.ai 告诉我们。
## 附录
## 在 Slate 的执行模型中,fork 作为基本元素的优势
作为一种基本功能,Forking 还带来了另一个好处:作为用户,您现在可以直接与执行实际工作的代理交互。这意味着您可以像使用其他任何代理一样,完成所有高互动性的工作,但仅在需要时才需要。
虽然这在某种程度上改变了 Slate 的执行模型,但我们认为,这种做法带来的可用性优势非常大,尤其是在现有模型在棕地项目上似乎仍然存在完全自主性问题的情况下。
## 与操作系统的比较
我们发现自己越来越倾向于使用 Unix 和操作系统术语来描述我们正在构建的东西。Slate 的线程、进程分叉、线程权限模型、将上下文视为进程内存等等,似乎都遵循着类似的模式。
由于这些结论是我们自然而然得出的,因此目前尚不清楚这种情况将如何发展。
之所以设立这一部分,是因为本博客的早期读者和我们遇到的其他人都提到了这个推论,认为值得一提。而且有人建议我们把它作为一个有趣的题外话明确记录下来。
## 参考
Kojima 等人:大型语言模型是零样本推理器(NeurIPS 2022)
## 相关链接
- [akira](https://x.com/realmcore_)
- [@realmcore_](https://x.com/realmcore_)
- [59K](https://x.com/realmcore_/status/2039382343581147414/analytics)
- [@0xrandomlabs](https://x.com/@0xrandomlabs)
- [技术博客在此](https://randomlabs.ai/blog/slate)
- [[1]](http://localhost:5173/blog/skill-chaining#ref-1)
- [默认人类学前端技能](https://github.com/anthropics/claude-code/blob/main/plugins/frontend-design/skills/frontend-design/SKILL.md)
- [Kojima 等人:大型语言模型是零样本推理器(NeurIPS 2022)](https://arxiv.org/abs/2205.11916)
- [升级至高级版](https://x.com/i/premium_sign_up)
- [12:40 AM · Apr 2, 2026](https://x.com/realmcore_/status/2039382343581147414)
- [59.7K Views](https://x.com/realmcore_/status/2039382343581147414/analytics)
- [View quotes](https://x.com/realmcore_/status/2039382343581147414/quotes)
---
*导出时间: 2026/4/2 16:25:49*