SuperAPI AI 工具集

nooa-channels

智能体与模型

查看项目

更新于 10-16 02:33

技能介绍

用途:Channels(nooa.runtime.channels)是 NVIDIA OO 智能体输入的生产者侧,外部事件通过命名通道流入,智能体的调度循环用 race() 竞争并作出反应。它与 EventManager/ContextManager 同级,但不会自动创建,需要自行构造。

主要能力:QueueManager 提供两种通道模式。queue 模式(qm.queue(name))把值追加到 deque 并唤醒一个等待者,可由调度器 race() 消费,或智能体代码在轮次中用 await self.<chan>.get() 取用;event 模式(qm.event(name))向 event_manager 添加 QueueOutput 事件,值在下一轮提示中内联渲染,无缓冲、无 get()。读取侧以 channel.reader 暴露给 LLM,是带 get(timeout=5.0)/status() 的包装且不含 put,超时抛 QueueReadTimeoutError。channel.snapshot() 可窥视而不消费,qm.status() 输出所有通道的复合状态块。

race() 是调度原语:队列模式胜出时返回长度为 1 的列表 [(name, item)],事件模式 put 唤醒时返回 []。多个 put 落在相邻 tick 时,按注册顺序第一个通道胜出,其余被排空项恢复到各自通道头部,不丢弃;on_get 钩子只对胜出者触发。无注册通道时抛 ValueError,取消时清理排空任务后传播 CancelledError,支持跨线程 put 唤醒。

spawn() 用于后台任务喂入通道,需通道已存在,否则抛 ValueError。可用 producers 中的 monitor、after、cron、tail、run_job。协程任务完成时放入单个结果,异步生成器放入每个产出值。生命周期事件写入事件日志:StreamEnd 表示任务结束,JobError 表示失败并同时放入数据通道以唤醒智能体。JobHandle 提供 .state、await handle.cancel()、.values。monitor() 在独立进程组中运行命令,取消时杀掉整个进程组,stderr 合并进 stdout。

限制与注意:QueueManager 默认对 LLM 隐藏,需显式暴露或只暴露 reader 属性,把 put/spawn 留在 Python 侧;注册顺序即 race() 优先级,应把最高优先级通道(通常是用户消息)先注册;不要让 LLM 代码 await 生产者对象的 get(),应给 .reader;调度器应放在纯 Python 编排方法中。相关技能包括 nooa-agent-authoring、nooa-context-and-state、nooa-middleware-hooks。