替你动手之前
叫它在服务器里做一件事,从一句话到真的动手,中间隔着好几道关:它得确定你是在叫它做事、做的是哪一件、对谁;越难撤销的事,越要有把握;影响大的先问你;做完还给你留一条退路。
先听懂
先要装着内置插件「对话指令」,不装它只聊天(2.24)。装着的时候,冲着它说的话先由模型判断:是不是在叫它做事,是直接要求还是在商量。是在叫它做事,再把这句话落到它会做的事上:做哪一件、对谁、多久、为什么。
只是在商量的,不做。对象说不清的(@ 了好几个人、没说是哪个频道),它直接说哪里没说清,不猜一个去做。
越难撤销,越要有把握
它会做的事一共 124 件,按做了以后能不能退回来分成五档:
- 只是看(24 件):看服务器信息、成员有哪些权限这类,什么都不改。
- 反着做一遍就回来了(77 件):禁言、加身份组、锁频道……
- 较难撤销(10 件):踢人、去掉身份组、删消息、改服务器名……
- 结构变更(8 件):删频道、删身份组、删表情这类。
- 破坏性(5 件,后台记录里写作「删除操作」):封禁这类。
听懂一句话的时候,模型同时说出自己有几成把握。把握不够就不动,越往下要求越高:只是看的 0.84,反着做能回来的 0.88,较难撤销的 0.92,结构变更和破坏性的 0.95。在私聊里替你管服务器,除了只是看的,每一档再加 0.04。
影响大的先问你
- 结构变更和破坏性的:先说清它要做什么、这个操作影响很大,要你在 45 秒内回一句「确认」才做;过了时间就作废。
- 较难撤销、结构变更、破坏性的:同一个人在同一个服务器,一分钟里最多三件。名额在通过检查的那一刻就占上:一口气同时发来六件,也只做三件,第四件起它会说先停一下。
动手之前再查一遍
- 叫它的人自己得有做这件事的权限,它自己也得有。
- 这个服务器可以关掉某一类事;关掉了,它就不做。
- 一次说了好几件、里面自相矛盾的(一边封禁一边解封、一边踢人一边给他改昵称、一边删频道一边改它的名字),整批都不做,一件也不先动。
- 每一次真正去改 Discord 之前,再查一遍权限:从听懂到动手中间隔着几秒,这几秒里权限可能变了;语音频道里的事,按那个人此刻所在的频道算。
做完留一条退路
- 较难撤销的那十件,加上封禁,做完以后 60 秒内叫它撤销,它就退回去:昵称、身份组、服务器名、验证级别改回原样,封了的解封。只撤你自己最近的那一件,撤的时候你也得还有那项权限。
- 踢出去的人,Discord 不能直接拉回来:踢之前它先建一个五分钟内有效、只能用一次的邀请,撤销时把这个链接给你。
- 删掉的消息恢复不了:删之前它先把一份摘要私信给叫它删的人,私信发不出去就不删。
- 禁言最长 28 天,一次最多清 500 条消息。
- 每一件都记进审计:谁叫的、原话、做了什么、为什么(1.16)。
对应的代码
- 124 件事和它们的档:
src/aeria/actions/catalog.py(Risk:READ、REVERSIBLE、HARD_TO_REVERSE、STRUCTURAL、DESTRUCTIVE)。 - 要不要交给模型判断:
src/aeria/bot.py的_persona_commands_enabled(内置插件src/aeria/builtin_plugins/persona_commands/)。 - 把握的门槛:
src/aeria/actions/executor.py的required_confidence;不够明确就不做(request.explicit)。数在src/aeria/config.py的ManagementConfig:planner_confidence0.84、reversible_confidence0.88、hard_confidence0.92、destructive_confidence0.95、dm_confidence_margin0.04、confirmation_ttl_seconds45、high_risk_window_seconds60、high_risk_max_actions3、undo_window_seconds60、max_timeout_seconds28 天、max_purge_messages500。 - 对象说不清:
src/aeria/actions/resolver.py的ResolutionError;自相矛盾的一批:src/aeria/actions/policy.py的detect_action_conflicts。 - 确认、限流、撤销:
executor.py的_stage_pending、_high_risk、_undo_last;踢人前建邀请_kick_member;删之前私信摘要_delete_message、_purge_messages;动手前再查权限validate_current_tool。 - 测试:
tests/test_catalog.py、tests/test_policy.py、tests/test_management_intent.py、tests/test_management_target_safety.py、tests/test_undo_reauthorizes.py。
没做到的
- 等你确认的、能撤销的,都只记在内存里:运行时一重启,没确认的作废,60 秒的撤销也没了。
- 撤销只管你自己最近的一件,不能挑更早的撤。
- 「几成把握」是模型自己说的,不是量出来的准确率。
- QQ 群里不能这样叫它管理:这一套只接在 Discord 上。