让 NOOA Agent 自我扩展:TextSkill 与 SkillRegistry 技能系统深度解析
发布时间:2026/10/7 19:38:37 锦皓数字建站

让 NOOA Agent 自我扩展TextSkill 与 SkillRegistry 技能系统深度解析【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-AgentsNOOANVIDIA Object Oriented Agents是一个用 Python 面向对象方式构建 AI Agent 的框架。它的技能系统Skill System由两个核心组件构成TextSkill——基于 Markdown 的技能包加载器以及SkillRegistry——负责技能发现、加载与激活的注册表。借助这套机制Agent 不仅能装载你预先写好的能力包还能在运行时自己编写新技能、热重载并立即使用实现真正的自我扩展。 什么是 NOOA 技能系统三种给 Agent 装能力的方式NOOA 把能力抽象成Skill技能任何可以被 Agent 发现、挂载到自身self.技能名、并通过doc()向大模型说明书的能力都可以做成技能。按来源不同分为三类类型形态注册前缀适合场景TextSkill一个含SKILL.md的目录cmd.*纯提示词/流程指引附带可运行脚本Python Skill单个.py文件中的Skill子类ext.*轻量逻辑工具Library Skill含pyproject.toml的 Python 包local.*复杂、持久、可跨会话复用的能力三者的统一入口是SkillRegistry它把技能当作 Agent 的属性动态挂上去让大模型在技能清单里一眼看到自己有哪些工具可用。 TextSkill用一份 SKILL.md 打包技能TextSkill的设计非常直观你只需要一个目录里面放一份带 YAML frontmatter 的SKILL.md--- name: frontend-design description: 指导 Agent 编写高质量的前端页面 --- 正文写给大模型阅读的技能说明、步骤、约束……解析逻辑在 src/nooa/skill.py 中TextSkill(path...)会读取目录把description作为一句话摘要正文作为技能的完整文档。这个 frontmatter 解析器甚至兼容 Claude Code 的宽松写法非法 YAML 行会按原始字符串兜底方便迁移已有技能包。TextSkill 还自带两个受沙箱约束的实用方法run_script(name, *args)运行技能目录scripts/下的任意脚本Python、Shell、Node.js……路径被强制限制在技能目录内防止越权访问read_file(path)读取技能目录内的参考文件如提示词模板、示例资产。换句话说一个 TextSkill 目录 一份说明书 配套脚本 参考材料的能力包。项目自带的 skills/ 目录就是范例比如 skills/nooa-tools-and-skills/SKILL.md 和 skills/nooa-self-extending/SKILL.md全部符合该规范。 SkillRegistry发现、加载、激活的三段生命周期SkillRegistry源码见 src/nooa/skill_registry.py管理技能从被发现到大模型可见的全过程共三个阶段发现Discover启动时扫描 entry points、libs/目录和自定义技能根目录。每个含pyproject.toml的子目录成为包技能含SKILL.md的目录成为 TextSkill单个.py文件成为 Python 技能加载Loadself.skills.load([nemo.*])用通配符把匹配的技能实例化并以属性形式挂到 Agent 上如self.frontend_design。冲突保护机制会拒绝覆盖 Agent 自己声明的受保护属性避免技能顶掉真工具的事故激活Activateself.skills.activate([...])才把技能真正暴露给大模型——取消隐藏属性、注册动态上下文块、刷新斜杠命令。未激活的技能不会占用上下文这正是控制 token 开销的关键设计。两个贴心细节依赖解析技能可声明requires激活 A 会自动加载它依赖的 B带环检测热重载await self.skills.reload(name)重新导入模块并原子替换技能实例失败时自动回滚旧版本——Agent 改完代码不用重启。 自我扩展闭环Agent 自己写技能并热重载这是整个技能系统最激动人心的部分。挂载SkillWriting技能后Agent 会拥有一个受管的libs/目录self.libs并学会完整的自我扩展工作流await self.libs.create(stats, 统计工具集)——脚手架生成一个标准 Python 包通过self.shell写入代码——每个库的__init__.py导出一个Skill子类await self.libs.reload(stats)——静态检查禁用危险内建函数、星号导入等硬错误会阻断加载 热重载self.stats立即可用await self.libs.run_tests(stats)——对新写的代码跑 pytest形成写代码 → 测试 → 重载的完整闭环。底层由 src/nooa/library_manager.py 的LibraryManager驱动它缓存击穿后重新导入包优先导出用户自定义的Skill子类否则用Skill(module)兜底包装。技能目录中的 skills/nooa-self-extending/SKILL.md 详细记录了这套机制包括三个层级——单元格内临时 helper、独立strategy子调用、持久化库——分别对应用完即弃到永久积累的能力生命周期。甚至斜杠命令也能自我扩展技能里用slash_command装饰的方法会在技能激活或热重载后自动成为用户可输入的/命令Agent 完全可以给自己写一个新命令。⚡ 快速上手两行代码激活一个技能完整示例见 examples/quickstart/10_skills.pyself.skills SkillRegistry(self) self.skills.register( local.frontend_design, TextSkill(pathASSETS / frontend-design), ) self.skills.activate([local.frontend_design])之后大模型就能在doc(self)的技能清单里看到self.frontend_design及其一句话描述需要细节时再展开阅读——渐进式披露省 token 又不丢能力。 延伸阅读与源码导航内容路径Skill / TextSkill / slash_command 实现src/nooa/skill.pySkillRegistry 三段生命周期与热重载src/nooa/skill_registry.pyLibraryManager 持久库加载器src/nooa/library_manager.pySkillWriting 脚手架与 Lint 检查src/nooa/tools/library_writing_lib.py技能系统入门示例examples/quickstart/10_skills.py技能包总览与校验脚本skills/README.md最佳实践提示把值得命名的逻辑才放进库libs/一次性的逻辑留在单元格里——技能会常驻doc(self)堆满一次性技能会每轮都浪费上下文重载后记得让 Agent 重读doc(self.lib)因为热重载换的是代码不是它脑子里的旧认知。掌握了 TextSkill 与 SkillRegistry你就解锁了 NOOA 让 Agent 从被配置走向自我成长的核心能力技能可以被编写、被测试、被热重载也可以被 Agent 亲手创造。【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。