Skip to main content

上课自动播报

一个真实场景串联四个视角——从节点接入到 AI 调用,看 KnotLink 全链路怎么跑。


ClassIsland + MultiTTS

两个节点,两种类型,在同一个场景里协作。

ClassIslandMultiTTS
类型独立式(standalone)插入式(plugin)
做什么课程表管理,按时发信号多引擎 TTS 语音合成
发现方式注册表Plugins/ 目录扫描
通信代码5 行8 行

ClassIsland — 独立式 · 广播信号

安装时写注册表,让 KnotHub 发现:

HKCU\Software\KnotLink\StandaloneNodes
└── 0x00000031 = "C:\Program Files\ClassIsland"

安装目录根放两份清单:standalone_manifest.json + FuncList.json

下发事件时,一行代码广播:

from knotlink import SignalSender, KLKVMap

sender = SignalSender(APPID="0x00000031", SignalID="0x00000011")

kv = KLKVMap()
kv["event"] = "OnBreakingTime"
sender.emitt(kv.serialize()) # 下课了,广播给所有订阅方

同一个 signalID 发多种事件——OnClass(上课)、OnBreakingTime(下课)、OnAfterSchool(放学),靠 verification 字段区分。

MultiTTS — 插入式 · 响应接口

打成 zip,拖进 KnotHub 操作面板自动安装。收到调用请求时朗读文本:

from knotlink import OpenSocketResponser, KLKVMap

r = OpenSocketResponser(APPID="0x00000022", OpenSocketID="0x00000011")

def handle(data):
req = KLKVMap()
req.deserialize(data)
text = req.get("text", "")
speak(text) # 调用系统 TTS 引擎朗读
return "status=ok"

r.set_RecvFunc(handle)

两个节点的完整清单和代码见 信号广播案例多引擎适配案例


这个场景覆盖了什么

概念在场景中的体现
独立式节点ClassIsland — 注册表发现、自管理进程
插入式节点MultiTTS — zip 分发、Plugins/ 目录
请求-响应ClassService 查询、SysTTS 朗读
发布-订阅ClassIsland 广播 OnBreakingTime
信号鉴别verification: "OnBreakingTime" 区分事件
功能 ≠ 接口MultiTTS 三个条目共用 openSocketID: 0x00000011
工具链生成API 测试页、文档从 FuncList 自动生成
配方编排Python 脚本串联两个节点,不改原代码
AI 调用LLM 读 FuncList 发现能力,直连 TCP