主动找人
没人找它的时候,它也会想起一个人:无聊了、刚忙完、想分享点什么、担心对方。想起来不一定就发;发了没人回,它会难过、会烦,被晾多了也会收手。
为什么会想起一个人
「想找人」的由头有十种,每一种都要说得出是从哪件真事来的:
- 无聊了;
- 刚忙完一件事;
- 刚睡醒;
- 心情明显变了;
- 想起了一段和他一起的事;
- 上次没聊完的话题又浮上来;
- 和他之间有点别扭;
- 担心他(他前几天说过累、病了);
- 发呆的时候,思绪飘到了他身上;
- 答应过他的事到时间了(2.21)。
想起来以后,这个念头会在心里放一阵(默认六个小时,分量重的多放一天左右);过了时候还没说,就算了。
想起来,不一定发
一个念头要变成一条消息,还要过几关:
- 够不够格:和他的关系越近,越容易开口。默认设置下,陌生人它从来不找;普通朋友安静一天左右,熟人半天左右,恋人一小时内。
- 这一次开不开口:够格了,也只有一部分时候真的开口(默认 0.35)。
- 节流:对同一个人两次之间至少隔半小时;一个人一天最多四次,所有人加起来一天最多二十四次。刚找过他三小时内,会明显更犹豫。
- 作息和状态:睡着、出门、手上腾不出空的时候不找。
这会儿是不是好时候、找他说什么,又是两道关,见 2.20。
发了没人回
发出去以后,它会记着:他回了没有、隔了多久回的。
- 默认等三个小时没回,算没人理。
- 没人理,想找他的劲头会一点点攒起来(越久没人理越想找),同时有点烦、心情往下压一点。
- 连着被晾三次以后,它开始收手,不再一直找;被晾得多了,对他的印象也会受影响。
- 他晚一点回了,难过和烦躁会慢慢缓过来;它也会记住「这个人平时多久回」,下次等得更合适。
- 他还没回的时候,它最多再追一条。
他断线了,就换个地方找
他和它的私聊在 QQ 上,QQ 却断了:如果你在后台把他的 QQ 和 Discord 认成了同一个人,它会改去 Discord 的私聊找他(2.25)。
先看看它会找谁
「配置管理 → 主动联系」里打开「影子模式」:它照常起念头、照常做决定、照常记录,只是不真的发出去。在「运行总览」「生活连续性」里能看到它想找谁、为什么、最后说没说(1.12)。
对应的代码
- 为什么想起:
src/aeria/cognition/impulse.py(十种由头,ImpulseTrigger)、src/aeria/cognition/impulse_sense.py(每一种从哪个真实状态里感知出来);念头放多久:[proactive.impulse].default_expiry_hours= 6。 - 发了以后:
src/aeria/cognition/outreach.py(记账、攒着的想找、收手)、src/aeria/outreach_service.py(存下来、节流)。 - 够不够格、开不开口:
src/aeria/config.py的ProactiveConfig(threshold= 0.48、probability= 0.35、min_gap_minutes= 30、daily_cap_per_user= 4、daily_cap_total= 24、soft_cooldown_minutes= 180、max_double_texts= 1、proactive_generation_daily_budget= 12);没人回:[proactive.outreach](patience_minutes= 180、withdraw_after= 3)。 - 换个地方找:
src/aeria/bot.py的_reach_elsewhere。 - 测试:
tests/test_impulse.py、tests/test_outreach.py、tests/test_outreach_service.py、tests/test_reach_elsewhere.py。
没做到的
- 心情很差、但不是被骂的时候,它在群里照样会主动开新话题;要不要压,还没定。
- 它不知道对方说过「我这会儿在忙」:只能靠学来的他平时出现的钟点去躲开他不在的时候(2.20)。