说话的习惯从哪来
它说话的样子,一部分来自人格设定,一部分是在群里待久了学来的:大家怎么说话、有哪些只有这个群才懂的词。它还会盯着自己:同一个开头、同一个说法用多了,就换一换。
别老是一个开头
它会数自己最近发出去的话:
- 同一个开头:比如一连好几条都用「那……」开头;
- 同一个说法:四到六个字的片段,在两条不同的消息里都出现过。
写新回复的时候,这些会作为「最近用多了的」交给模型;草稿里又用上了,就让它重写一次。
故意数得很窄:「我……」「你……」开头不算(真人本来就一直这么开头,逼着换反而别扭);很短的回复(「嗯」「在」「?」)也不查,重复的短反应是人话。
跟着群里学
在一个群里,每过一批消息(默认 28 条),它会挑着学一点:
- 说话的方式:在什么场合,大家习惯怎么说。至少要有两个人、十几条不重样的话才学,一个人刷屏学不到东西。
- 黑话:一个词在两条以上的消息里出现、又不是常用词,就当成候选,让模型推一推是什么意思;证据够了才算学会。
学到的只在这个群里用。网页后台「表达方式」「群内黑话」两页列着学到的每一条,可以删(1.15)。
学来的怎么用
回话的时候,和眼前这段聊天相近的几条说法、对得上的黑话,会作为参考交给模型:不是照抄,是让它知道这个群里大家怎么说话、某个词是什么意思。
用了某条说法以后,它会看大家接下来的反应(默认看五分钟):接得好,这条以后更常被挑中;冷场多了(比接得好的多两回以上),就不再用。
调
「配置管理 → 学习与记忆」里:「学习群内黑话」可以单独关;「学习说话习惯」管的是每个人自己的说话习惯,也能单独关;场合和说法(「表达方式」那一页)没有单独的开关,只能关掉整节的「启用」;「表达学习批次消息数」是每多少条学一次。
对应的代码
- 自己的口头禅:
src/aeria/phrasing_habits.py;交给回复器、草稿检查:src/aeria/reply_quality.py的habitual_phrasing。 - 什么时候学、学什么:
src/aeria/learning_gate.py的decide_learning_tasks(黑话候选:两条以上的消息里出现、不是常用词)。 - 说法的检索:
src/aeria/expression_retrieval.py;黑话对上眼前的话:src/aeria/jargon_context.py。 - 设置:
src/aeria/config.py的LearningConfig(expression_batch_messages= 28、learn_jargon、jargon_min_evidence= 2、learn_speech_patterns、implicit_feedback_window_seconds= 300)。 - 测试:
tests/test_phrasing_habits.py、tests/test_learning_gate.py。
没做到的
- 只在群里学,私聊里不学别人的说话方式。
- 黑话的候选按「出现了几次」挑,一个新词刚出现一次就用的那种,它要等第二次。
- 学来的说法不会因为过了很久就自己淡掉:只有超过上限(每个服务器 120 条)时,反馈最差、用得最少、最老的先被删掉;想早点清,在后台手动删。