小鲸鱼 控制台

QQ 检测中 —

今日花费

—/ ¥1

内存

—

磁盘

—

24h 对话

—

运行状态

模型—
嵌入模式—
QQ 连接—
机器人 / 主人—
NapCat 进程—
开机时长—

记忆库

情景记忆(原文)—
已归档—
事实(有效 / 失效)—
实体—
会话摘要—
画像 / 技能—

登录状态

NapCat 进程—
OneBot 连接—
QQ 账号状态—
当前账号—
登录阶段—
最近二维码—
最后一次收到消息—

扫码登录

点「获取二维码」
账号掉线时也可以直接在这里扫

手机 QQ 扫码后在手机上确认。二维码约 2 分钟过期,本页会自动换新码。 链接打不开时,点「新窗口打开」拿图片,或复制链接自己生成二维码。

快速登录(不用扫码)

本机还留着登录态时,点一下就能回去。

—

危险操作

重启会让当前登录态失效,必须重新扫码,QQ 会短暂离线。 进程已经死了就用这个把 NapCat 拉起来。

私聊

—
你的主通道,一般一直开着

群聊总开关

—
关掉 = 所有群立刻闭嘴

今日群聊回复

—

今日群聊花费

—

它要过三道闸门才会在群里说话

① 群聊总开关(在「调参 → 入口」里,也能在下面直接切)——一关全静音;
② 这个群有没有被勾选——新拉进的群默认关着,不会自己开口;
③ 触发方式 + 限额——只回 @ 它的消息(或关键词),并且受「每群每天」「每人每天」「最短间隔」「群聊预算」四道限制。
群聊里它拿不到你的记忆:不注入主人画像、不写长期记忆、不能用工具。 所以你在群里 @ 它,它只会像个普通网友那样聊天。
建议:先勾一两个小群(3~12 人)跑两天,别一上来就开 98 人的大群—— 在别人的大群里让 AI 说话,出事要你负责。

它想去 / 想退的群

它自己改不了开关——只能在这里提,你点了才算数。 这也是它回答「你想进哪个群」的唯一出口:没提过就是没想法,不是它不会选。

加载中…
别因为它写了理由就批。它想进一个群的冲动多半来自某一刻的热闹,那是情绪不是判断; 群是公共场合,说错一句收不回来。看你自己对这个群的判断,不看它写得多诚恳。

她现在想说话吗(群聊氛围)

群里命中触发不等于该开口。她会看:群里吵不吵、自己是不是刚说完、这条短不短, 攒够意愿才说话——所以下面这些"忍住了"是正常的,不是故障。
这套思路来自麦麦的「回复意愿值」,但实现不同:麦麦是黑盒状态机, 主人只能看到「她又不理我」;这里每条判断的数字和分项贡献都留着,可以直接问为什么。

加载中…

这些设置下,实际会等多久

—
延迟只加在回复你的消息之前;主动播报、命令执行结果不延迟—— 那些本来就该快,拖慢反而奇怪。

防风控状态(熔断 / 限速 / 正在输入)

—
「它怎么突然不说话了」先看这里:熔断中 = 发送连续失败在自动刹车, 等冷却结束自动恢复;滑窗满 = 发得太密在排队。都不亮却没消息,再去「调试」页查连接。

逐群勾选

触发方式「跟随全局」= 用「调参 → 入口 → 群里的触发方式」的设置(当前是 —);单独设一档可以只让某一个群更保守或更活泼, 比如把最吵的那个群压成「只回 @」。单群每日上限留空 = 用全局的(默认 30 条)。
加载中…
选一个会话

语音 · 试听与状态

打开下面的「允许它发语音」后,命中的回复会改成语音发出去(不会再发一遍文字)。 只在主人私聊生效;合成失败、超时、额度用完都会自动退回打字。
线路和 key 不在这里配——统一挪到 那条车道了,能挂「主力 + 备用」,改完立刻生效、不用重启。 默认那条是微软 Edge 免费线路(不用 key);要换成克隆你的音色, 在服务商后台训练好音色后,把 base_url / key / 模型 / 音色名填进那条线路即可。
这一页只管它怎么说话:开不开、念出来的概率、多短多长才念——都在下面的 「语音(说话)」分组里。

—

今日花费

—

缓存命中率

—

闸门状态

—

下次自动任务

—

缓存前缀稳定(结构性,不是开关)

上下文拼装顺序固定为:人格提示 → 历史对话 → 动态内容(当前时间 + 记忆卡)。 这样每轮前缀都是上一轮的超集,DeepSeek 才能连续命中前缀缓存。 命中价 ¥0.02/百万 vs 未命中 ¥1/百万,差 50 倍。
别做的事:把当前时间、记忆卡挪进系统提示,或在历史之前插入每轮都会变的内容—— 那会让缓存每轮在同一处断裂,实测命中率从 75% 掉回 24%。
怎么判断:看上面「缓存命中率」。稳定 70% 以上说明结构没问题; 掉到 20% 以下先查最近的代码改动,不要靠调参数硬补。

按功能分开的钱(每个功能一个钱包)

把花费按功能归因:表情包 / 识图 / 群聊 / 主动开口。每项都有独立的每日上限, 在各自页面的参数里改;花超了只停那一项,不影响聊天。
注意:这一栏不能和上面的「今日花费」相加对账——主对话、记忆编码不属于任何功能,只在总账里。

近 7 天花费

技能卡

—

有效事实

—

会话摘要

—

画像

—

它是怎么自学的

① 记事实:每 10 轮对话(可调)把内容抽成事实三元组,写进记忆库;
② 沉技能:翻命令审计表,同一种命令形态成功 ≥2 次就沉淀成一张技能卡, 下次遇到同类请求会先把这张卡挂到上下文里,不用重新推理;
③ 周画像:每周把散落的事实收敛成 160 字的「主人画像」,注入时只占几百 token。
次成功才成卡

技能卡 — 全部来自真实成功执行过的命令

画像(元记忆)

还没有画像。周日晚自动生成,也可以点上面的「生成画像」。

最近会话摘要

总开关

—

今天已主动说

—

安静时段

—

下次播报

—

它是怎么决定要不要开口的

这类消息只发给你自己,绝不给别人主动发——给陌生人主动私聊是骚扰,也最容易撞 QQ 风控。
发之前过四道闸门:① 总开关 → ② 安静时段(只有「预算用尽」「高危命令被拒」能穿透) → ③ 每天上限 → ④ 同一天同一件事只说一次、且两条间隔够久。
内容默认用模板拼(零成本);想让语气更自然,去「调参 → 主动开口」打开「让模型改写播报内容」。
(预览内容在这里)

主动聊天(不等你问,她自己起话头)

和上面那些播报不是一回事:播报是有事说事(花了多少、出没出事), 这个没事也想说一句。素材全从本地查,不额外翻网络——
① 翻旧账:记忆里很久没被提起的事,「后来怎么样了」;
② 你好久没来:你最后一句话过去好几个小时了;
③ 接着上次聊:上次说到一半没继续的那个话题。
一样都没有就闭嘴——没由头的主动开口就是尬聊。同一类由头一天只说一次, 还要照过上面那四道闸门。

(她的话会在这里)
在下面「主动开口」分组里打开「主动找你聊天」才会真正定时想起这些。 想让她更勤快或更沉默,调「你多久没说话她才来找你」。

最近说过什么(含被拦下的)

被拦下也会记录原因,方便判断是限额太紧还是时段不对

今日已发

—张
—

今日花费

—/ ¥0.2
—

图库

—张
—

当前档位

—
—

自适应在算什么

「自适应」档不给固定张数:这把今天的花费、时间进度、还剩多少额度算成一个建议值, 连同这些数字一起告诉它,由它自己决定这条要不要发。建议值不是配额—— 真正的刹车是下面参数里的「硬上限(张)」和「每天费用上限(元)」,两个都能直接改。

—
最近 7 天:柱高 = 花费,上面的数字 = 发出张数

表情包图库

图库只认 data/memes/ 里的图片——它自己给不了路径,只能说「我想表达什么」, 由库挑最像的一张。点图改标签;上传/导入的图会自动打标签(视觉模型,智谱免费)。
标签是检索的主路:同一张图打上「搞笑,吃饭」,她想到"吃饭"就能翻出来。

—

当前模式

—

还剩多久

—

本次授权花了

—

高权通道

—

这里只能收回,不能开启

给权必须发生在 QQ 私聊里:要么它自己带着理由来申请、你回那个 6 位码, 要么你直接对它说「开高性能」。理由很实际——那一步有聊天记录可查, 而且它没法伪造你的消息。
收回相反:哪儿能收就在哪儿收。你手机上随手一点就该立刻刹车, 不该再回忆「私聊里该打哪句话」。

授权流水(谁、什么时候、因为什么把整台机器交出去过)

这张表比别的地方都重要:出问题时它是唯一能倒查的东西。 open 是给权、close 是收回、 expire 是到点自动收回、budget 是花钱超线被掐。别清它。

最近在服务器上跑过的命令

power: 开头的是走全权通道的(那时候能改任何东西); denied 是被拒绝的——拒绝本身也要留痕,否则看不出谁在试探。 被拒的命令多半是它在权限不够时硬试,值得看一眼它在试什么。

密钥保险箱

口令走这条路是有风险的:8077 目前是明文 HTTP,在公网上输口令等于裸奔。 更稳的做法是在服务器上跑 sudo -u agent .venv/bin/python -m app.vault list, 口令只进出你的终端。这里的输入框是给「临时看一眼」用的,不是推荐路径。

这三条线是设计,不是建议

一、只能私聊。群聊零工具(只放行搜索),提权申请这个入口在群里根本不存在。 群里授权等于把你的权限借给群里每一个人,用你的钱、你的 IP、你的 QQ 号。
二、必须你点头。它只能申请,批准永远在你手里。授权期内 L0/L1/L2 免逐条确认—— 每条都回码的话,你最后一定闭着眼睛按同意,那比不开还危险。
三、没被同意时它提不了权,这条是文件系统保证的。 /usr/local/bin/shell-power 只认 data/privilege.unlock 里的过期时间和签名; 低权沙箱跑在 shellbox 用户下,进不去 data/,所以它造不出这个文件。 不是「它答应不乱来」。
诚实说清楚边界:一旦授权,它有 root,读 .env、改 unlock、dump 进程内存都做得到。 所以这套东西保证的是「没被同意时提不了权」,不是「同意了也伤害不了你」。 真要第二层,是上面那个保险箱——但保险箱也挡不住 root 在解锁后的内存里扒明文。 剩下能靠的只有两件:平台上的每日预算上限,和出事时立刻去后台换 key。

有效经验

—/ —

平均可信度

—

谁教的

—

已经作废

—

她记住的东西

一条经验必须是「什么情况 + 该怎么做」。只有结论没有情境的不算—— 到时候她判断不出该不该套用,那只是一句许愿。
主人教的可信度从 0.8 起、立刻生效;群友教的从 0.4 起 (你拍板不二次确认,靠这个数值自然压住它);她自己发现的从 0.6 起。 用着有效就涨,连错两次自动作废——你不用替她清理。

她改过的参数

「后来有效吗」这一列由自检回填:有效说明这条改动解决了问题; 无效的话自检会把参数退回上一档,并记一条「这个旋钮不管用」的经验。 同一项 24 小时内最多改两次——来回震荡比不动更糟。

三层:她能碰什么,不能碰什么

正在加载三层清单…

最近一次

—

发现 / 已修

—

待动手

—

下次自检

—

现在跑一次(只跑脚本层,不申请权限)

这里跑的就是每天凌晨那个脚本:纯 SQL,不调模型,零成本。 你在电脑前,需要动手的事你自己去开权限就行——这一步再走一遍 6 位码 只是多一层麻烦,不会多一层安全。

历次报告

点开看证据。每一条都带「为什么我这么判断」,不是「我觉得不太对」。

定时任务上次跑的时间

自检第 1 项查的就是这个。看日志不可靠(会滚掉),看产物也不准(可能本来就没素材), 所以每个任务跑完都往库里写一笔,这里读的就是那一笔。

两级,不是一级

第一级·脚本层:每天固定时间跑,零成本。能自己修的很窄—— 触发一次记忆巩固、把横跳的参数退回上一档、把连续无效的经验作废、清测试残留。 动不了钱、权限、入口。
第二级·权限层:脚本碰不到根因时才升级。她私信给你一份清单和 6 位码, 你回码后她才登上去动手,完事发报告。你回别的就等于没同意。
升级的三个判据:脚本根本没法动手(要改代码/装包/重启)、 同一项连续几天都在(一天是偶发,两天一定不是表面原因)、 或者脚本自己报错了。
两级共用同一份发现清单。不做两张表:否则会出现「脚本说 3 个问题、 提权之后变成 5 个」,然后你就不信它了。

接口线路

每个功能可以挂好几条线路,从上往下试:前面挂了自动用后面的。 连续失败 2 次的线路会冷却 2 分钟(不然每条消息都要先等一遍超时)。
这里能改就不用重启——重启会断 QQ 连接。key 只显示尾号 4 位,留空表示不改。

加载中…

怎么判断哪条该放前面

主力放便宜且稳的那条;备用放能用就行的(不一定便宜,但关键时刻能顶上)。 对话模型这条尤其重要:它挂了整只机器人就哑了,建议至少两条。
自动切换的边界:只有「调用报错」才会切换。如果对方返回了内容但内容不对, 系统没有能力判断——那种情况要你自己在上面点「测试」发现。

行为设置不在这里,去各自的页面

这一页只解决「连得上吗、花多少钱、挂了换谁」。什么时候用、用多少这类开关, 还是放在功能自己的页面上,免得同一个东西在两处都能改、改完不知道听谁的。

语音:开不开、念出来的概率、字数门槛
识图:陌生人图要不要看、描述详略
表情包:发送档位、每日上限、自适应
花钱上限:每个功能的每日额度

识图 · 自检

图片默认直接交给聊天主模型看(DeepSeek 原生多模态,每张最多 1024 tokens), 它看到的就是原图,不是别人转述的描述。下面的测试会现画一张图走真实链路, 点完看它有没有把「红圆 + 白方块」说出来。
表情包(对方发来的「商城表情」)默认用腾讯自带的摘要,不额外调模型; 要精读或忽略,以及「只发来表情包时搭不搭话」,都在下表 sticker_* 两项里。 自己发表情包是另一条线,配置和图库都搬到「表情包」页了。

—

记忆流水线

手动触发,用于验证逻辑。编码/巩固会真实消耗 token。

(结果输出在这里)

主动发消息

以机器人身份给指定 QQ 发私聊。

检索调试 — 输入一句话,看它会捞出哪些记忆、拼出什么记忆卡

沙箱命令测试(P4)

走和 QQ 里完全相同的一套:分级 → 沙箱执行 → 写审计。L2 要勾确认,L3 无论如何都拒绝。

(结果在这里)
(工具调用轨迹在这里)

命令审计(P4)— 它执行过的每一条命令

—

编辑这条记忆

改完立刻影响检索。画像不会自动跟着变,改完事实建议去「自学」页重算一次画像。

登录控制台

密码在服务器 .env 的 UI_PASSWORD 里