拟人化设计
Openmim 的拟人化设计是其区别于其他机器人的关键所在。通过一系列精心设计的机制,让机器人的行为更接近真实的群聊用户。
微动作系统(Micro Actions)
微动作是机器人根据群聊环境条件触发的小动作,不依赖 LLM 生成,而是基于预定义规则。
内置微动作
| 微动作 | 触发条件 | 触发概率 | 示例文本 |
|---|---|---|---|
lunch_break | 11-13 时 | 4% | "我去补充能量了,待会见。" |
late_night | 23 时至 5 时,且群里沉默 30 分钟 | 6% | "(悄悄打个哈欠)zzz…大家还不睡吗" |
feel_ignored | 群里有 15+ 条消息但机器人参与不足 2 条 | 5% | "你们聊得好热闹…我都找不到插话时机了(轻轻歪头)" |
goodbye | 检测到告别词(晚安、拜拜等) | 30% | "晚安。(轻轻挥手)" |
good_morning | 7-9 时,且群里沉默 60 分钟 | 3% | "早~(系统启动)新的一天开始了。" |
random_stretch | 群里沉默超 60 分钟 | 2% | "(伸个懒腰)呼…趴太久了" |
每个微动作都有独立的冷却时间,防止频繁触发。
自定义微动作文本
通过 data/customization.json 可以自定义每个微动作的文本:
json
{
"personality": {
"micro_actions": {
"lunch_break": "去吃饭啦!",
"late_night": "好晚了,你们还不睡吗~",
"goodbye": "晚安晚安~"
}
}
}启用/禁用
json
{
"MICRO_ACTIONS_ENABLED": true
}去AI味后处理(De-AI)
LLM 输出有明显的"AI味"——固定的句式模板、过度的总结性结尾、反复征求同意等。de_ai 模块对每条 LLM 输出进行后处理,去除这些痕迹。
处理规则
| 模式 | 处理方式 |
|---|---|
| 两三连 em dash(——) | 随机替换为逗号或保留 |
| "总的来说"、"综上所述" | 删除 |
| "总结一下" | 删除 |
| "你觉得呢?" | 删除(反问征求同意) |
| "值得注意的是" | 删除 |
| "首先...其次...最后..." | 随机精简 |
| 连续多个感叹号 | 合并为一个 |
| "至关重要" | 替换为"很重要"、"关键"等 |
| "不可或缺" | 替换为"少不了"、"必需"等 |
启用/禁用
json
{
"DE_AI_ENABLED": true
}打字节奏模拟(Typing Rhythm)
在回复较长的消息前,机器人会模拟"正在打字..."状态,根据回复长度计算合理的等待时间,让对话更自然。
启用/禁用
json
{
"TYPO_RHYTHM_ENABLED": true
}人格状态系统
机器人维护一个动态的人格状态,影响其回复风格:
- 情绪记忆:记录与特定用户的互动情绪(友好、中性、谨慎等)
- 活跃度状态:根据时间段和群聊活跃度动态调整插话意愿
- 关系积累:随着交流次数增加,逐渐"认识"群成员
启用/禁用
json
{
"PERSONALITY_ENABLED": true
}复读机
当群里出现连续复读时,机器人会概率性地跟着吐槽或接一句,融入群聊文化。
通过群设置控制:
- 开启(默认):随机跟读或吐槽
- 关闭:完全禁用复读机功能
贴纸支持
机器人可以在对话中发送贴纸,由 LLM 在回复中通过 [STICKER:贴纸名] 标记来触发。
配置贴纸包:
json
{
"STICKER_SETS": ["RinCat_SD_AC33D506", "PROs_Misc_Collection"]
}在系统 prompt 中,机器人会自动获得可用贴纸列表,并在合适时机使用。
定时问候
机器人会在每天固定时间向白名单群组发送问候:
- 早安:08:00 CST(可按群开关)
- 晚安:23:00 CST(可按群开关)
问候内容由 LLM 生成,每次都不相同。
拟人化强度调节
通过 HUMANIZATION_INTENSITY 控制整体拟人化程度:
json
{
"HUMANIZATION_ENABLED": true,
"HUMANIZATION_INTENSITY": 0.7,
"HUMANIZATION_STYLE": "balanced"
}| 风格 | 说明 |
|---|---|
light | 轻量拟人,较为克制 |
balanced(默认) | 平衡风格 |
clingy | 黏人风格,更主动 |
quiet | 安静风格,减少主动行为 |
用户名脱敏
为保护用户隐私,LLM 上下文中的群成员显示名默认替换为 用户_XXXX,不向 LLM 暴露真实 Telegram 昵称。
json
{
"username_anonymization_enabled": "true" // 在群设置中配置
}