如何通过Nanobot源码学习OpenClaw的Skills架构?
摘要:【OpenClaw】通过 Nanobot 源码学习架构 (6)Skills 目录【OpenClaw】通过 Nanobot 源码学习架构 (6)Skills0x00 概要0x01 原理1.1 Function Calling1.2 解决方案1
【OpenClaw】通过 Nanobot 源码学习架构---(6)Skills
目录【OpenClaw】通过 Nanobot 源码学习架构---(6)Skills0x00 概要0x01 原理1.1 Function Calling1.2 解决方案1.2.1 如何融入到现有的系统中?1.2.2 如何指导模型按照特定的流程和规则执行任务?1.2.3 如何解决上下文爆炸1.3 Skills:大模型的经验库1.3.1 Skill的核心原理1.3.2 Skills 与架构选型为什么 Skills 能保持上下文一致性?Agent Skills 架构的三重收益本质洞察1.3.3 Skill的结构1.3.4 Skill vs Workflow vs Prompt1.3.5 场景0x02 SkillsLoader2.1 业界范式2.2 通用工作流程2.3 Nanobot Skill 管理系统核心特色2.4 总体流程2.5 Skills.md2.6 图例2.6.1 Skills 核心逻辑关系图2.6.2 Skills 核心流程流程图2.6.3 SkillsLoader 技能元数据解析逻辑2.7 代码0xFF 参考
0x00 概要
OpenClaw 应该有40万行代码,阅读理解起来难度过大,因此,本系列通过Nanobot来学习 OpenClaw 的特色。
Nanobot是由香港大学数据科学实验室(HKUDS)开源的超轻量级个人 AI 助手框架,定位为"Ultra-Lightweight OpenClaw"。非常适合学习Agent架构。
Skill(技能)是将特定领域的专业知识、工作流程和最佳实践打包成可复用的指令模块,嵌入到 AI 的上下文中,使 AI 在处理相关任务时能够自动激活并运用这些专业能力。
简单来说,Skill 就是一个教 AI 怎么干活的 "技能手册。通过将领域知识、标准流程与执行工具封装为可插拔的模块,Skill让智能体首次实现了专业能力的沉淀、共享与持续优化,从而真正从“自动化执行”迈向“专业化思考与行动”。
Skill 的本质,是把「隐性知识」变成「显性规程」。
注:本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。
0x01 原理
本部分很多内容参考于:AI Agent系列|深入解析Function Calling、MCP和Skills的本质差异与最佳实践
1.1 Function Calling
Function Calling的本质:LLM要实现工具调用,实际上最需要的内容只有:函数名、参数要求,以及一个description。然而,在Function Calling的框架下,用户面临几个问题:
如何融入到现有的系统中。
如何在尽可能的准确的前提下,能让用户能用文字(而非代码)指导模型按照特定的流程和规则执行任务?
所有知识都写入prompt,会造成上下文爆炸。
1.2 解决方案
上述问题的解决方案就是MCP和Skills。
MCP和Skills都是基于Function Calling的,它们只是在Function Calling这个基础能力之上的不同应用方式。
MCP:让AI“能做到”,执行工具,读写数据。
Skill:教AI“怎么做”,是给AI的操作手册(告诉模型一步一步 How to do),包括流程、标准、策略,脚本,代码,Skills 不是 “训练进模型”,而是写进 System Prompt,构建上下文时自动读进去,LLM 靠阅读理解就会用。
1.2.1 如何融入到现有的系统中?
MCP是一种用于规范大模型与外部能力交互方式的协议。如果说 Tools 解决的是“模型如何调用一个函数”,那么 MCP 解决的是“模型如何与一个长期存在、可复用的能力服务交互”。
MCP的核心是解决与既有系统的接驳问题,MCP的价值在于它提供了一套标准化的接驳协议,让不同的工具和数据源能够以统一的方式被LLM使用。本质上,MCP更偏重是一套接驳标准(只是在Function Calling的基础上,增加了一层JSON-RPC协议转换),而不是唯一的接驳方式。
或者说,MCP 更像是 API,Agent 只关心该 API 提交什么「参数」、得到什么「结果」。
1.2.2 如何指导模型按照特定的流程和规则执行任务?
Skills提供一个方式,让用户可以用文字定义指令、脚本和资源,形成可复用的任务流程。
Skills则实际上是一个sub-agent的包装:
Skills只是在Function Calling之上的一个巧妙应用:把"加载文档"这个操作封装成一个函数,让模型在需要时自动去查找和加载固定的skills文档。
