Lovart中实现多Skill协同需确保Skill启用且ID唯一,通过Event Bus事件通信、Session共享上下文及配置调用链;事件名区分大小写且需及时订阅,Session默认30分钟过期,调用链最多5层嵌套。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Lovart中实现多个Skill协同工作,核心是让不同技能模块能互相触发、传递数据并共享上下文状态,而不是各自孤立运行。
确认Skill已正确注册并启用
打开Lovart管理后台 → 进入【Skills】页面 → 检查目标Skill的开关状态是否为“启用”,灰色禁用状态会导致后续所有协同逻辑失效。
每个Skill必须拥有唯一且合法的skill_id,重复ID将导致系统加载冲突,【ID冲突时仅最后一个注册的Skill生效,其余静默失败】。
通过Event Bus实现跨Skill事件通信
方法一:手动发布自定义事件
在Skill A的代码中调用event_bus.emit("user_order_confirmed", { order_id: "ORD-789", amount: 299 });Skill B需提前订阅同名事件:event_bus.on("user_order_confirmed", handler)。
注意:事件名区分大小写,且必须在Skill B的on_load生命周期内完成订阅,延迟订阅将漏收启动期间发出的事件。
方法二:使用预置业务事件
直接触发系统级事件如intent.matched或session.updated,对应Skill需监听该事件类型并校验payload.intent_name字段匹配目标意图。
共享Session上下文传递参数
第一步:Skill A在处理逻辑末尾写入共享字段
session.set("shipping_address", { city: "Shanghai", zip: "200000" })
第二步:Skill B在on_intent中读取
const addr = session.get("shipping_address");若返回undefined,说明Skill A未执行写入或Session已过期(默认30分钟无交互自动清除)。
第三步:清理冗余键值(可选)
调用session.delete("shipping_address")防止脏数据残留影响后续流程。
配置Skill调用链(Call Chain)
进入Lovart后台 → 打开Skill A的编辑页 → 切换到【Flow】标签 → 在“下一步动作”下拉菜单中选择“调用另一个Skill” → 指定Skill B的ID → 勾选“传递当前session”。
这一步会自动生成一条同步调用指令,Skill B将获得与Skill A完全一致的session_id和初始payload,无需额外编码适配。
调用链最多支持5层嵌套,超过后系统将终止并抛出ChainDepthExceeded错误。











