十六位专家怎么商量
每条消息、每个「想找人」的念头进来,十六位专家各自从一个角度提一个做法,先过护栏,再按「有多想、有多有把握,减去代价和风险」打分,挑最高的那个。全程不调用模型。
能选的做法
一共十四种,后台「决策记录」里印的就是这些名字:马上回、晚点回、只回表情、不理、拒绝、结束对话、先看着、查记忆、用工具、上网查、加入对话、离开对话、主动开话题、多想一步。
十六位专家
每位只看一件事,提一个或两个做法,各带一个「多想这么做」和「多有把握」:
- 社交:是不是冲着它来的。被 @ 时「马上回」最强;精力和想说话的劲头高一点更强,压力大就弱一点。
- 注意力:它此刻的注意力在不在这儿。正专注在这段对话里,倾向马上回;只是在旁边看着,倾向先看着——还会参考在这个服务器里插话的下场。
- 作息:睡着了就先看着;出门、快睡了,看情况晚点回;心情不好躲着的时候,倾向离开。
- 关系:和说话的人有多亲近。很亲近、又是冲着它来的,倾向马上回;被骚扰得厉害,冲着它来的就拒绝,不是冲着它的就不理。
- 情绪:被这几句话搅动得厉害时,冲着它来的晚点回,不是冲着它的就离开。
- 心思:它此刻想不想接话、有没有设了的边界、想不想安慰对方、有没有精神社交。
- 话题:像在问问题,倾向回;只是「好」「收到」「哈哈」,倾向点个表情;说不清的,先看着。
- 好奇:好奇心高、又不是冲着它来的,倾向加入话题。
- 记忆:这句话让它想起了什么,冲着它来的就回,不然先看着。
- 意图:它之前打算好的事:在等某个人回、说了晚点回、准备去做别的事。
- 活动:手上正在做事。冲着它来的,是「晚点回」的理由,不是「不理」的理由;手上的事没开始、上下文也不热闹,就先看着。
- 主动:「想找人」的念头来了,提「开个话题」和「再等等」两个做法。
- 风险:这件事风险高,提「拒绝」,和「多想一步」。
- 工具:话里像要查东西、要放歌,提「上网查」;查完了结果回来,提「马上回」。
- 人格之间:对面是另一个人格机器人时,聊太深、来回太多轮,就不理,免得两个机器人没完没了。
- 决策记录:被问到「刚才为什么没回」时,倾向马上回,把理由说清楚。
护栏
提出来的每个做法先过七道护栏,过不了的划掉(划掉了什么、为什么,都记下):
- 安全:影响很大的动作要有边界。
- 隐私:不越过这句话所在的隐私范围。
- 权限:做这件事要的权限,说话的人和它都得有。
- 对话边界:它刚划了界线,就不马上又凑上去。
- 作息:睡着、刚被吵醒、出门时,有些做法不许。
- 人格之间:机器人之间的对话链有长度和次数的上限。
- 工具授权:插件和工具要明确授权过才能用。
打分
过了护栏的做法,按下面这个算一个分,挑最高的:
多想这么做 × 0.64 + 多有把握 × 0.31 - 代价 × 0.05 - 风险扣分
风险扣分:没有 0,低 0.02,中 0.08,高 0.18,严重 0.35。
挑出来的是「回」,大多数时候直接去写回复;话里牵扯到关系、两难、要查东西,出乎意料,或者有做法被护栏拦下来,才先让模型规划一步。
对应的代码
- 做法:
src/aeria/cognition/actions.py的CandidateAction。 - 专家:
src/aeria/cognition/experts/(social.py、attention.py、presence.py、relationship.py、emotion.py、social_stance.py、topic.py、curiosity.py、memory.py、intent.py、activity.py、proactive.py、risk.py、tool.py、persona_link.py、decision_history.py);这一套规则策略的编号是r1-h-v1(policy/heuristic.py)。 - 护栏:
src/aeria/cognition/guards.py的GuardEvaluator;打分:arbitration.py的utility_score、RISK_PENALTY。 - 走快路还是先规划:
router.py的MetacognitiveRouter。 - 测试:
tests/test_nhcx_v2_experts_workspace.py、tests/test_nhcx_v2_authority.py。
没做到的
- 话题、工具两位专家认「像问题」「要查东西」靠的是中文词表,换个说法、换种语言认不出来。
- 每位专家的数(0.64、0.31、各自的分量)是手调的,不是从真实对话里学出来的。用真实对话训练一个学出来的策略,标注数据还不够。
- 「只是心情很差」的时候,群里照样会主动开新话题;要不要压、压到什么程度,还没定。