SL NPC 控制台

这里填的是控制台账号,不是 Second Life 账号。
SL 账号在登录之后的设置里填写。

中文·English
离线
区域 — 角色 — 模型 — 驻守 —
—

设置 ·

这个 NPC
账号Second Life 登录
角色角色卡与人设
对话接话规则
驻守站位与区域重启
主人与权限好感度门槛
内容与数据
记忆认识的人
知识库商品与资料
对外聊天给外人的链接
全局
模型全部账号共用
账号管理增删 SL 账号
资源占用与容量

Second Life 账号

这个 NPC 用来登录 SL 的账号。密码在浏览器端就转成哈希再上传,明文不会离开你的电脑。修改后需要重新上线才生效。

长期挂着的号勾上。服务崩溃重启、机器重启之后,只有勾了这里的账号会自己回到线上;其余的保持离线。多个账号会错开几秒依次登录。
每个 SL 账号都要单独在官网 sisa.php 页面注册为 Scripted Agent,这是 Linden Lab 的硬性要求。

角色卡

支持 SillyTavern 的 V1/V2/V3 角色卡,PNG 或 JSON 均可。导入后这个账号扮演卡上的角色,下方手写人设让位。各账号的角色卡互不影响。


称呼

附近聊天里被叫到这些称呼才会接话。私聊不看称呼,收到就算在跟她说话(要不要回由「说话范围」决定)。


手写人设

说话范围

两个频道各自决定:谈不谈工作、闲不闲聊。两个都不勾,这个频道就整个关掉。判定在调模型之前,所以关掉的部分是真的不花 token,不是「回得短一点」。

谈工作闲聊
附近聊天
私聊
工作指跟店里的东西有关的话:商品、价格、尺码、装扮,以及换装、坐下、指令集里那些命令。
工作优先于闲聊:判定为工作的话一定接得住 —— 屋里几个人在闲聊时她按旁听规则闭嘴,但顾客问一句价格照样答。
「私聊」这一行同时管着网页试聊和对外聊天页:那两处也是一对一的私下对话,走的是同一套规则。关掉之后在控制台里试聊也会没有回应,判定过程见本页下方的「判定记录」。

接话规则

决定这个 NPC 什么时候开口,只影响附近的公共聊天。上面「说话范围」先决定理不理,这里决定在一屋子人里怎么判断这句是不是在跟她说。判定为工作的话不受这里影响,一律接得住。

关闭时需要先叫到名字或别名,之后在活跃窗口内继续说话都会接。
公共区域建议保持关闭 —— 见谁说话都插嘴,在 SL 里容易被当成刷屏机器人举报。

攒消息再回

有人习惯一句话拆成好几条发。开着的话它会等对方说完,把这几句当成一段话一次性回复,而不是逐条抢答。对方还在打字就继续等。

关掉会退回逐条处理。那种情况下对方连发几句时,后面几句会在上一句还没生成完时被丢掉,NPC 等于没看见。

发送节奏

Scripted Agent 的发送量有配额,消息拆得越碎越容易撞上限制;对方也读不过来。默认攒长一点、发慢一点。

说话方式

商品

动作与上下文

进店打招呼

有人走进区域时主动招呼一句。默认关闭 —— 这是最容易变成骚扰的功能,一个人来回穿区域会连着触发。

刚上线的 45 秒内不会招呼任何人 —— 那段时间涌进来的"新人"其实是区域头像列表在同步,不是真的有人进来。

旁听

多人在附近闲聊时,听着不说话;聊到跟自己有关的事,偶尔插一句。默认关闭。

有两种情况本来就会直接回话,跟这个开关无关:叫到名字、以及最近一分钟只有一个人在出声(那基本就是在跟它说话,哪怕没叫名字)。

判定记录

最近这些附近聊天各自是怎么判的。参数调不动的时候看这里,别猜。

成人内容

打开后,这个账号在私聊里可以进行成人向的角色扮演:措辞直白、不回避身体描写,动作的长度与频率限制一并放开。附近聊天不受影响,始终按常规规则说话。

能不能真放开取决于模型。Grok 一类尺度宽的模型配合得了;多数国内厂商会直接拒答,那一轮 NPC 就会沉默,系统日志里能看到报错。
只作用于私聊是有意为之:附近聊天是公共频道,而 NPC 并不知道自己站在什么分级的地块上。
无论开关状态,角色始终按成年人对待,对方喊停就停。

试聊

不上 SL,直接在网页里以访客身份跟它说话,用来验证上面这些规则调出来是什么效果。试聊的记录和记忆单独存,真人的记录不受影响。

点了会关掉设置,在左边的会话列表里开出「试聊访客」。清空记录的按钮在那个窗口顶上。
存的是「接话规则」「发送节奏」「说话方式」「成人内容」这四段。打招呼和旁听各有自己的保存按钮,改完要分别点。

驻守方式

坐在物体上可以防止被人撞开,物体里的脚本还能给它播动画,不至于傻站着。

场地说明

它站的地方是什么样,尤其是有没有能坐的东西。SL 的协议读不出「这个物体能不能坐」,只能由你交代 —— 不填就一律不招呼客人坐下。


不知道 UUID 的话,可以让它扫一遍附近(需要在线)。
点列表里的一项即可填入上面的 UUID。
物体被收回后重新摆出,UUID 会变。届时它会私信「主人与权限」页里配置的主人。

没有"站在锚点被撞开自动走回"这个模式,因为 node-metaverse 不提供自身坐标,漂移检测无从做起。想防撞请把地块设为禁止推撞(Restrict Pushing),配合坐下即可。

区域重启

SL 的区域每周会重启一次。收到重启警告后按下面的方式处理,全程只记控制台日志,不会在 SL 里说话,也不会私信主人。

按 60 秒一次快速重连,试满 8 次再退回常规退避(60/120/300/600 秒)。滚动重启常常来不及发警告,区域三五分钟就回来了,按常规退避会白躺十几分钟。

重启演练

真的区域重启没法按需触发(这个库没有 Estate 命令),可以先演练:注入一条假的重启警告,后面的流程跟收到真警告完全一样 —— 它会真的登出或避难,再自己回来。

长期记忆

每个账号有自己独立的记忆数据库,进程重启不会丢,账号之间也不互通。

后台开销

这两件事跟回话没关系,但都在后台花钱。只用来展示商品的 NPC 不需要记住谁是谁,关掉能省下相当一部分账单。

一次完整的模型调用。关掉之后原话照常入库,只是不再压缩、不再抽事实、也不再给这段对话的态度打分(好感度就只按见面次数和聊天量走)。
关掉之后只剩「最近对话 + 摘要」,问不出久远的细节。花的是向量化服务的额度,不是聊天模型的。
认识的人
它记住的事
选择左侧的人查看

好感度

按见面次数和聊天量自动累积,态度差会扣分(每次整理记忆时由模型给这段对话的态度打 -5 到 5 分)。长期不见会慢慢回落,一周掉 1 点。好感度按角色分开算,换角色卡后重新来过。

数字可以直接改,回车保存。主人不受好感度限制。

角色留下的记录

对话和摘要按当时扮演的角色名分开存。换过角色卡的话,旧角色名下的记录还留在库里,可以单独删掉。「记住的事」按人存,不属于任何角色,不在这里删。


重置人格记忆:删掉全部对话、摘要和记住的事,保留"认识过谁"(见面次数、初次见面时间)。角色重塑时用这个。
清空全部记忆:连认识过谁一起删,相当于这个账号从没上过线。
两者都不可撤销,且只影响当前账号。

知识库

给 NPC 一份能查的资料:商品表、店规、常见问答。库是全局的,每个账号挂哪几个各自决定 —— 一个店同时挂店长和客服两个 bot 时,商品表只维护一份。

当前账号挂的库

勾选后这个账号聊天时会检索这些库。不挂库的账号完全不受影响。

全部知识库


店内展位

让 NPC 能回答「那件东西摆在哪」,并把位置链接发给客人。这一步还在做,目前只有巡场试扫:把相机在区域上空走一圈,看看到底能扫到多少物体、有没有坐标。

关掉时物体只有名字没有位置,拼不出位置链接。打开会让内存占用明显上升,且必须重新上线才生效。
需要 NPC 已经在店铺所在区域上线。一次要几分钟,过程中的进度看下面的日志。

主人

主人不看好感度,邀请传送、请它坐下一律放行;驻守目标丢了这类情况也会私信通知他们。填 UUID 而不是名字 —— SL 的显示名可以随时改,UUID 不会变。

在 SL 里打开对方资料页,右键名字可以复制 UUID(Copy Key)。

传送邀请

别人邀请它传送过去时怎么办。主人始终放行,其余人看好感度。无论接受还是拒绝,它都会用角色的口吻回一句,不会干晾着。

听指令坐下

对方可以直接说「坐到那把椅子上」。它会扫描附近的物体、按对方所在位置由近到远排,匹配名字后坐上去。坐到别处期间驻守会让位 10 分钟,之后自己回岗。

带客人逛

对方说「陪我去温泉」时,它会真的传送过去,不再只是嘴上答应。只能去下面登记过的地点。对方离开视线满 2 分钟,或者说了要走,它自己回店。

关闭时它会老实说自己走不开,并把地图链接发给对方,让对方自己去。
每个地点贴一条地图链接:在 SL 的世界地图上选好位置,点「复制 SLurl」,粘过来就行。选中「店里」的那条是它逛完回去的地方。

别人发来的请求

好友申请、物品投递、群邀请、脚本权限。选「等我处理」时会挂在「居民 - 待办请求」里,同时给主人发一条私信。主人发来的请求不受「一律拒绝」限制。

沿街散发的广告基本都是 notecard。主人递的不受此限。
这些能力依赖模型的工具调用(function calling)。中转站不支持的话,它会退回纯聊天,系统日志里会写明。

对外聊天页

把链接发给别人,他们不用登录控制台,凭你给的昵称和口令就能跟这个 NPC 说话。对方在网页里聊,不经过 Second Life;这个账号不上线也能用。

关掉之后链接立刻失效,已经进来的人也会被挡在门外。记录不删。

访客

一人一个昵称和口令。昵称就是身份 —— 换设备换浏览器还是同一个人,NPC 的记忆接得上。

限流

对外页每说一句都要调模型,账单记在你头上。这三个数是拦住脚本刷量的唯一一道闸门。


访客说的每句话和 NPC 的回复都会存在这个账号的记忆里,你在「记忆」页能看到,管理员在「审计」页也能看到。删掉一个访客会连同他的对话一起删。

模型来源

所有账号共用这份配置,API key 只需填一次。每个账号在「账号」页里选用其中哪一条。


向量化(语义记忆)

开启后 NPC 能回想起久远的对话细节,而不只是最近几轮和摘要。需要一个提供 embeddings 接口的来源 —— DeepSeek 没有,SiliconFlow 的 BGE-m3 免费可用。


token 用量

所有走模型的调用都记在这里:聊天、整理记忆、连通性测试各自分开算。数据只保留 90 天,删掉不影响任何功能。

按用途
按账号
按天

每个账号占多少

评估一个 NPC 要多少资源、一台机器能放几个,看这一页。CPU 只统计得到本程序自己的同步代码,SL 协议解码和垃圾回收归不到具体账号头上,所以进程那一段另有一栏「未归属」—— 别把已归属当成全部。

账号CPU磁盘记忆 / 向量收 / 发token

控制台用户

这里管的是「谁能登录这个控制台」,和 SL 账号是两回事。每个用户登录后看到的是他自己那一份数据:自己的 SL 账号、自己的模型来源、自己的记忆,互相看不见。

新建用户


额度是「这个人最多能挂几个 SL 账号」,在上面的表格里直接改,回车或点别处即生效。留空表示跟随 .env 里的 MAX_BOTS_PER_USER。
调小额度不会踢掉已经挂着的账号 —— 只是他不能再加,超出的部分得他自己删。要彻底停掉某个人用「停用」,不是把额度调到最低。
用户的数据存在各自独立的目录里,删用户会**连同他的 SL 账号、记忆、知识库一起删掉**,不可恢复。
内建管理员(.env 里的那个)不能在这里删改,它是万一锁死自己时的后路,改密码请改 .env 后重启。
多个用户从不同地方登录时,务必在前面挡一层 HTTPS 反向代理 —— 否则密码是明文过网络的。

聊天记录审计

全站所有用户的 NPC 聊天记录,包含网页试聊和 SL 里的真实对话。只读 —— 这里不能删改任何记录,要删得由数据的主人在他自己的控制台里做。

按账号浏览

选择一个账号查看它的会话。

账号管理

一台机器上可以同时挂多个 SL 账号,各自独立的角色卡、记忆和驻守设置,互不干扰。

新账号建好后到「账号」页填 SL 凭据,到「角色」页导入角色卡。
多个账号同时上线时会自动错开几秒,避免同一 IP 短时间密集登录被判异常。

居民

待办请求接受或拒绝
附近的人当前区域
好友在线状态
群组我加入的
最近打过交道的
黑名单屏蔽名单

待办请求

自动策略在「设置 - 主人与权限」里配。这里只列出需要人工决定的。掉线或重启后旧请求会失效 —— 会话 ID 只在本次连接内有效,对方那边会自行超时。

附近的人

当前区域里的其他头像,每 5 秒刷新一次。不显示距离 —— SL 协议不向脚本代理提供自身坐标,没有参照点就算不出距离。

好友

名单来自登录时的好友表,离线好友也在其中。在线状态只有在对方授予「可以看到我在线」时才拿得到。

群组

这个账号加入的群。当前只读,加群退群请用官方客户端。

最近打过交道的人

来自记忆库,不依赖 SL 连接,离线时也能查看。

黑名单

与 SL 服务端的屏蔽名单同一份,用官方客户端改了这里也会跟着变。被屏蔽的居民说话,NPC 不回复、不写进记忆、不触发进店打招呼。

关掉的话,黑名单只是一份名单,NPC 照常回话。

指令集 ·

让 NPC 用对话驱动带脚本的商品(乐器、道具)。你在这里定义一套命令,顾客说「弹一首」「停下」时,NPC 就把对应的那句话发到 SL 聊天里,商品的脚本收到后照做。

发送内容按你在 viewer 里的打法填:/9 play 表示发到 9 频道,STOP 表示发到公屏。带 {value} 的地方会替换成取值,比如 /9 play {value} 配上曲目清单,就能点曲。

命令

「名称」是 NPC 认得的那个说法,也用来判断顾客这句话算不算生意。「什么时候用」写清楚就少误触发 —— 这一栏比名称更重要。


取值自动同步

曲目名只有脚本自己知道。开启后 NPC 会发一条查询命令,脚本把清单报回来,自动填进下面指定的那条命令的取值里。只对实现了 AI 回执协议的脚本有效(我们自己写的那些)—— 第三方商品把这里关掉,手工填取值即可。


手动执行

不经过模型,直接让这个账号把命令发出去。上线之后想让它弹就点一下,不用先跟它说话。乐器没反应时也靠它把问题切成两半——下面会显示实际发出去的原文和频道,发出去了而乐器不动,那就是脚本或频道的事。

用的是已保存的那一套。刚改完还没保存的话,先点上面的「保存」。要求这个账号在线。

这个账号用哪一套

指令集是共用的,多个 NPC 可以用同一套。选「不使用」则这个号完全看不到这组能力,模型连工具都拿不到。

套装 ·

读的是这个 SL 账号「我的装扮」里保存的套装。要先在 viewer 里把装扮存好,这里才看得到。读取和换装都需要 NPC 在线。

自动轮换

到点自己换一套。只换上面勾了「参与轮换」的那些,少于两套不动。

让顾客指挥换装

两种触发方式,可以只开一种。都只在附近聊天生效,私聊里永远不认 —— 换装是当场看得见的动作,人得站在旁边才有意义。

由模型判断对方是不是真要看某一套。只是夸衣服好看、问价格、问有哪些款,都不会换 —— 问有哪些款时它会先报清单。拿不准时它会先开口问一句。
卖衣服、卖 avatar 的店铺主要靠这个:顾客不会去背命令。每套的备注写清楚,它才描述得出来。

命令:/outfits 报出清单,/wear 3 或 /wear navy 换指定的一套(编号、全名、前缀、包含都能匹配)。中文别名 /套装、/换装 也认。
NPC 说出口的话是英文 —— 这些不经过模型,只能写死一种语言。听懂人话那条路上的回话由模型组织,会跟着顾客的语言走。
换装要几十秒,中间头像会有一小段不完整;带脚本的挂件(HUD、动作器)会重启。
换完重登:换整个 avatar(比如龙换成猫)时勾上。mesh 头和身体自带骨骼位置偏移,在别人的 viewer 里换不干净,脸上会留着上一套的颌骨位置 —— 那个复位动作(viewer 里的 Reset Skeleton)是本地行为,远程发不出去,只能让观察者重新拉一遍这个头像。重登是下线后立刻上线,连不上会自动重试。只换件衣服的套装不用勾。
程序无法确认"到底穿好了没有" —— SL 不给这个信息,最终得你自己在 viewer 里看一眼。

使用指南

从零到 NPC 开口说话,六步。驻守、知识库、指令集、套装这些进阶功能不在这里讲,设置里每个页签顶部都有自己的说明。

1

先分清两种账号

  • 控制台账号:你现在登录的这个,管的是谁能进这个网页。
  • SL 账号:NPC 用来登录 Second Life 的账号。一个控制台账号下可以挂多个,能挂几个由管理员分配。

每个 SL 账号都要在 secondlife.com 的 sisa.php 页面注册为 Scripted Agent,这是 Linden Lab 的要求,不注册会被封号。

2

添加 SL 账号

设置 → 账号管理:填一个显示名,点「添加账号」。然后切到「账号」页,填 SL 的名字、姓氏(新式用户名固定填 Resident)、密码和上线位置,保存。

密码在浏览器里就转成哈希再上传,明文不会离开你的电脑。

3

准备 AI 服务,配置模型来源

NPC 说的每一句话都由大模型生成,所以你需要一家模型服务商的账号和它的 API key。预置支持 DeepSeek、xAI (Grok)、OpenAI、Anthropic (Claude)、Moonshot (Kimi)、智谱 GLM、SiliconFlow、OpenRouter、Ollama(本地);其它提供 OpenAI 兼容接口的服务选「自定义」。

  • 准备:到服务商官网注册账号、充值,在它的控制台里生成一个 API key。
  • 配置:设置 → 模型 → 添加模型来源,选服务商,粘 API key,点「获取列表」选一个模型,点「测试」确认能连上,保存。第一条会自动成为默认。

key 加密存在服务器上,所有 SL 账号共用;每个 SL 账号可以在「账号」页单独选用哪一条。

可选:「向量化」让 NPC 记得久远的对话细节,需要一个提供 embeddings 接口的来源。DeepSeek 没有这个接口,SiliconFlow 的 BGE-m3 免费可用。不配也能正常聊天。

4

给 NPC 一个角色

设置 → 角色:导入 SillyTavern 角色卡(PNG 或 JSON),或者直接在「手写人设」里填角色名和人设正文。

「别名」决定附近聊天里叫到哪些称呼它才接话,多填几个常见叫法。

5

上线与下线

顶栏的「上线」按钮让当前选中的 SL 账号登录,登录后同一个按钮变成「下线」。多个账号可以在账号管理页「全部上线」「全部下线」。

  • 登录有 60 秒冷却,连不上会自动按退避重连,看左侧「系统日志」就知道卡在哪。
  • 要长期挂着的账号,在「账号」页勾上「服务启动后自动上线」,服务重启后它会自己回到线上。
  • 停服务用 Ctrl+C 或 stop 脚本,NPC 会正常登出,不会在 SL 里留下鬼影。
6

开始对话

  • 附近聊天:有人叫到它的名字或别名才回,之后一段时间内接着说的话都会回。「有问必答」在设置 → 对话 里,公共区域建议关着。
  • 私聊:收到就当是在跟它说话,直接回。
  • 不上 SL 也能试:设置 → 对话 → 「打开试聊窗口」,以访客身份在网页里跟它聊,用来验证角色和规则。
  • 手动接管:主界面底部的输入框可以以角色身份直接发言。

不回话的时候先看左侧「系统日志」有没有报错,再看设置 → 对话 → 「判定记录」,那里写着每一句为什么回了或没回。