元框架系列教程第三篇——注册你的槽位
第 3 篇槽位注册如何让 Norp 认识你定义的“新插口”3.1 从问题出发上一篇你学会了把组件放进注册表reg.register_tool(weather, WeatherTool()) reg.register_model(my_model, MyModel())然后呢你要用它们得通过槽位npa(tools[weather], modelmy_model)问题来了model、tools、session、sandbox……这些槽位名字是哪里来的为什么npa()认model但不认my_custom_slot答案是这些名字来自一张槽位表SLOT_SPECS。npa()启动时先把你的参数名跟这张表做匹配参数名在表里 → 当作槽位值处理参数名不在表里 → 当作任务参数透传比如max_steps、task_timeout默认情况下槽位表里有 18 个内置名字。你想让npa(my_custom_slot...)被当作槽位识别就得往这张表里加一条记录。这就是“槽位注册”——给 Norp 定义一个新的可填参数。3.2 槽位的本质是什么一个槽位 三个东西的组合要素含义举例名字npa()的关键字参数名model、tools、vector_store语义字符串值怎么解释是模块地址还是注册表名还是字面值动作值非空时做什么注册到注册表订阅钩子写入extras内置的 18 个槽位已经在框架启动时注册好了。你现在要做的是把自己定义的新插口也加进去。3.3 注册一个槽位最小写法注册槽位用register_slotfrom norpagent.arch import SlotSpec, register_slot register_slot(SlotSpec( nameaudit_tag, string_semanticsliteral, applier_apply_audit_tag, ))然后就可以用了npa(audit_tagrelease-1)这四个字段是最小集合name槽位名也就是npa()的参数名string_semantics字符串值的解释方式applier值非空时执行什么动作注册后npa(audit_tagrelease-1)的行为是参数audit_tag被识别为槽位不走任务参数透传装配器把release-1literal 语义原样保留传给applierapplier拿到值执行你定义的逻辑3.4 string_semantics字符串的四种解释方式这是槽位注册里最需要想清楚的一点。string_semantics决定了一个字符串进入这个槽位后怎么解释。有四种选择语义含义举例address字符串 模块地址myapp.models:create→ 加载模块并实例化name字符串 注册表组件名openai_compat→ 去注册表查这个名字name_or_address先按注册表名查查不到再按地址加载npa(modelsomething)literal字符串 字面值但“形如地址”的按地址加载high是级别myapp.sec:build是地址选择哪种语义取决于你的槽位要什么类型的值你的槽位要传一个模块地址 → 用address你的槽位要传一个已注册组件的名字 → 用name你的槽位既要支持已注册名又要支持外部地址 → 用name_or_address你的槽位主要传字面值级别、路径、目录偶尔传地址 → 用literal3.5 applier值非空时做什么applier是槽位的“执行逻辑”。它的签名是def applier(reg, layer, value, params, ctx): # reg: 注册表实例 # layer: 架构层实例 # value: 解析后的槽位值字符串已按 string_semantics 解释过 # params: 运行时参数 dict # ctx: 四个可变容器 passctx里有四个你可以操作的东西容器用途ctx[components]声明预设组件{kind: name}AgentRuntime 会据此构建组件ctx[extras]往引擎上挂额外对象通过engine.extras[槽位名]取用ctx[overrides]改写预设的字段比如覆盖preset.modelctx[meta]记录需要清理的对象热重载时用于退订applier 的核心职责把“槽位值”翻译成“系统动作”。光有值没用你得告诉框架怎么用这个值。3.6 完整示例开发一个“向量检索”槽位目标新增一个vector_store槽位。用户传值后自动注册为通用组件工具通过ctx.component(vector_store)取用。from norpagent.arch import SlotSpec, register_slot def apply_vector_store(reg, layer, value, params, ctx): # 1. value 可能是实例、工厂、或已解析的模块 factory value if callable(value) else (lambda vvalue: v) # 2. 注册为通用组件_arch_vector 是内部名字不冲突 reg.register_component(vector_store, _arch_vector, factory) # 3. 写入预设组件声明 → AgentRuntime 构建 ctx.components ctx[components][vector_store] _arch_vector # 4. 同时挂到 extras引擎侧可直接取用 ctx[extras][vector_store] value register_slot(SlotSpec( namevector_store, description向量检索组件, string_semanticsliteral, applierapply_vector_store, remount_rebuild_agentTrue, # 热替换后重建 AgentRuntime ))使用npa(vector_storeMyVectorStore()) # 或 npa(vector_storemyapp.vector:create) # 或 npa(vector_store{backend: pg, index: ./idx})工具侧取用store ctx.component(vector_store)3.7 remount_rebuild_agent热替换后要不要重建自定义槽位分为两类组件型只往注册表/注册表里挂了点东西下一次run()就能生效。这种不需要重建。装配型改写了预设的components或overrides或者替换了引擎核心组件。这种必须重建才能生效。remount_rebuild_agent告诉框架热替换这个槽位后要不要触发AgentRuntime热重建。False默认只更新extras/注册表不重建引擎True热替换后立即重建AgentRuntime新组件立即生效vector_store例子改写了components所以设True。3.8 重入安全热替换时别叠罗汉一个关键问题applier会在多个时机被重复调用启动时装配每次npa.remount(vector_store...)每次npa.remount()触发全量重新装配如果applier每次都在reg.bus上挂一个新订阅那订阅会越叠越多同一个事件触发十几次。这是 bug。解法用ctx[meta]记录旧对象重挂前先清理。内置的hooks槽位、security槽位、plugins槽位都遵循这个模式。框架热重载时会先调用卸载逻辑再重新装配保证事件订阅不叠加组件注册不堆积沙箱/会话等资源被正确释放def apply_my_slot(reg, layer, value, params, ctx): # 如果有旧订阅先退订 meta ctx.get(meta, {}) old meta.get(my_slot_subscription) if old: reg.bus.unsubscribe(old) meta.pop(my_slot_subscription, None) # 挂新订阅 def handler(event): print(event) reg.bus.subscribe(handler, on_content) meta[my_slot_subscription] handler这样每次重挂都先清理再挂新干净利落。3.9 检查槽位注册是否成功注册自定义槽位后用layer.describe()看装配清单eng npa.current() print(eng.layer.describe())输出里能看到vector_store - 地址 myapp.vector:create VectorStore 实例 audit_tag - 直接值 release-1 str如果看不到说明槽位没注册上或者注册时机晚于npa()启动。3.10 内置槽位受保护18 个内置槽位名是受保护的async_loop, agent_runtime, model, tools, session, sandbox, scheduler, context_store, project_manager, hooks, security, plugins, frontend, ui, preset, logger, storage, error_handler不能覆盖它们的规格不能注销它们。它们的值随时可以npa.remount热替换但“插口本身”是框架结构的一部分不可删除。3.11 你现在能做的事情读完这篇你已经能理解槽位 名字 语义 动作用register_slot注册自定义槽位选择合适的string_semantics写applier把槽位值翻译成系统动作理解remount_rebuild_agent什么时候用 True用ctx[meta]保证热重载不叠加订阅用layer.describe()检查槽位是否生效下一篇你会学到地址解析——字符串myapp.models:create是如何变成一个可调用对象的。

相关新闻

构建领域专属知识图谱-从数据孤岛到智能决策的实践

构建领域专属知识图谱-从数据孤岛到智能决策的实践

构建领域专属知识图谱:从数据孤岛到智能决策的完整实践声明:本文案例为工程模拟场景,数据指标为演示效果,仅供工程思路参考,不代表真实业务结果。背景:为什么企业需要"自己的"知识图谱 大模型与 …

2026/8/26 15:54:06 阅读更多 →
Agent Content Protocol: 一种基于 RFC 2046 的内容封装规范

Agent Content Protocol: 一种基于 RFC 2046 的内容封装规范

Agent Content Protocol: 一种基于 RFC 2046 的内容封装规范 2026-08-22 Agent Content Protocol: 一种基于 RFC 2046 的内容封装规范 版本:0.5.0-draft1. 协议定位与核心宣言 1.1 定位 ACP 定义了一种可互操作的 Agent 消息内容信封。它规定了如何将一个 JSON 控制…

2026/8/25 14:55:34 阅读更多 →
184、【Agent】【OpenCode】TuiThreadCmd(类型推导语法)

184、【Agent】【OpenCode】TuiThreadCmd(类型推导语法)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除 标题 184、【Agent】【OpenCode】TuiThreadCm…

2026/8/25 14:55:34 阅读更多 →

最新新闻

信奥梯队选拔面试中遇到难题孩子直接放弃怎么办

信奥梯队选拔面试中遇到难题孩子直接放弃怎么办

面试中遇到孩子碰到难题直接放弃的情况,核心要分「面试现场即时引导」和「后续分层处置」两步处理,既不浪费高潜力苗子,也能精准筛选出适配梯队的学员。 一、面试现场即时引导操作 1、‌先降低情绪压力‌ 第一时间停止计时,温和…

2026/8/26 18:50:27 阅读更多 →
AI 训练数据湖:为什么 RustFS 是 S3 兼容存储的新选择

AI 训练数据湖:为什么 RustFS 是 S3 兼容存储的新选择

一个 8 卡训练任务,GPU 利用率长期在 35% 打转,nvidia-smi 看显存是满的,但 iter 时间忽快忽慢。你查了一圈,瓶颈不在模型也不在卡,而在 data loader:数据集是 200 万个小图片和一堆 parquet 分片&#xff…

2026/8/26 18:50:27 阅读更多 →
跨国广域网高延迟与恶劣弱网环境下的数据保全:Node-RED流式架构与边缘计算网关底层源码级解构

跨国广域网高延迟与恶劣弱网环境下的数据保全:Node-RED流式架构与边缘计算网关底层源码级解构

摘要:面向高端装备出海所面临的数以万计异构接入与跨国弱网常态化场景,传统的基于单体阻塞(Blocking I/O)的同步直传架构,已成为导致底层缓冲溢出与海量工艺数据永久性丢失的致命技术枷锁。本文从底层 TCP/IP 拥塞控制…

2026/8/26 18:50:27 阅读更多 →
欧洲CRA合规背景下边缘计算节点高级网络安全防御与 Linux 路由策略深度解析

欧洲CRA合规背景下边缘计算节点高级网络安全防御与 Linux 路由策略深度解析

摘要:随着欧盟《网络弹性法案》(CRA)强制性安全条款生效进入倒计时,出口欧洲的高端装备面临严苛的数字安全与入网准入审查。在跨国复杂无线电环境与严格的属地合规审计下,海外边缘通信网关极易遭遇固件防篡改验证失败、…

2026/8/26 18:50:27 阅读更多 →
阿里巴巴国际站运营科普:平台逻辑、关键要素与增长路径

阿里巴巴国际站运营科普:平台逻辑、关键要素与增长路径

1. 阿里国际站是什么 阿里巴巴国际站是阿里巴巴集团旗下面向全球市场的B2B跨境电商平台,致力于连接中国供应商与海外采购商。自上线以来,平台逐步从早期的信息展示与商机撮合,演进为覆盖交易、支付、物流、通关等环节的数字化外贸基础设施。…

2026/8/26 18:50:27 阅读更多 →
Go服务网格:Istio与Linkerd集成

Go服务网格:Istio与Linkerd集成

TL;DR 核心要点速览 Go适合后端API、微服务、云原生、CLI工具 高并发秒杀用Redis原子操作+限流 分布式锁用Redis SETNX或etcd租约 分布式事务用Saga模式或事件溯源 Go微服务通信用gRPC或消息队列 本篇是Go项目实战模块,含完整可运行项目 摘要:本文详细介绍Istio与Linkerd集成,…

2026/8/26 18:49:26 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →