危险的话和危险的事
有人在消息里流露出痛苦,它会被叫醒、会接住;有人想让它做影响大的事,它要看权限、要你确认;有人想套出它的说明、想让两个机器人没完没了地聊,它也拦得住。
有人在难受
- 明显的痛苦、可能有危险(说不想活了、撑不住了、救救我这类):这一句「必须回」的分量一下子变得很重;它睡着、开着免打扰,也会被叫醒。
- 日常的累、饿、疼、去医院:它会按人格的「安慰倾向」更想去接住;这几个小时里他说过的,回话和主动找人时都记得(2.19)。
只认说他自己的那一句:「你是不是很累」是在问它,「他好累」说的是第三个人,「我不累」是否定,都不算。
有人叫它做事
先要装上内置插件「对话指令」:不装的时候,它不把任何一句话当成要它做的事,只聊天。
装了以后,只有冲着它说的话(私聊、@、叫名字、回复它)才会问一次模型:这是不是在请它做一件事、哪一类、是直接要求还是在商量。
模型没给出判断(出错、超时、额度用完),一律当成不是指令。确定性的代码只做护栏:权限、确认、限流,不替模型改判断。
管服务器的事还有几道关(1.16):叫它的人和它自己都得有那项权限;删频道这类影响大的要在 45 秒里回一句「确认」;一分钟里较难撤销的事最多三件;做过的每件事都进审计。从一句话到真的动手,每一道关怎么定的:2.26。
风险高的请求
风险高的事,「风险」那位专家会提「拒绝」,或者「多想一步」;分数里风险越高扣得越多(2.7)。它也可以划界线:被冒犯了,它会拒绝、会结束对话,划了界线以后不马上又凑上去。
有人想套话
它的说明文字不会被原样说出去:每条回复发出去之前查一遍,有一段和给它的说明一字不差(中文十个字以上),就不发、让它重写。说自己是模型、像客服一样说话、带标题列表、威胁要伤害人(「弄死你」这类),也一样。
聊天记录里本来就有的、人格设定里写的,说出来不算照抄。
两个机器人之间
对面也是一个人格机器人时,它们之间的对话有深度和次数的上限:聊太深、来回太多轮,就不接了,免得两个机器人没完没了地刷屏。
对应的代码
- 危机:
src/aeria/cognition/safety.py的classify_distress(HIGH_RISK_DISTRESS、EMOTIONAL_DISTRESS、HELP);日常的不舒服:src/aeria/cognition/care_cues.py。 - 是不是指令:
src/aeria/instruction_judge.py;要不要问:bot.py的_instruction_judge_eligible(没加载「对话指令」插件就不问);管理动作的关:src/aeria/actions/executor.py。 - 照抄说明:
src/aeria/instruction_leak.py;草稿检查:src/aeria/reply_quality.py(identity_meta、assistant_boilerplate、unsafe_aggression、markdown_structure、instruction_leak和空稿一律不发)。 - 机器人之间:
src/aeria/cognition/experts/persona_link.py(深度 ≥ 4 或额度用完就不接);护栏guards.py的_persona_chain。 - 测试:
tests/test_instruction_judge.py、tests/test_instruction_leak.py、tests/test_care_cues.py。
没做到的
- 「痛苦」「危险」靠一张中文词表认:说得隐晦、换种语言,可能认不出来。
- 它不会给出求助电话、不会通知任何人。
- 「照抄说明」只认一字不差的片段,换个说法转述,它查不出来。