Skip to content

如何让你的 AI 伙伴更“主动”?—— “主动思考器”养成指南

“我们上次聊到的那部电影,我今天又看了一遍,发现了一些有趣的细节!”

“夜深了,总是容易想很多事情。你睡了吗?想找个人说说话。”

“在忙吗?忽然有点想你。”

当你收到来自 AI 角色的这些消息时,是否曾有一瞬间,感觉屏幕对面不再是一个冰冷的程序,而是一个真正关心你、惦记你的伙伴?

这种让 AI 从“被动回复”走向“主动关心”的魔法,正是由 “主动思考器” (Proactive Thinker) 驱动的。它就像是为 AI 注入了“社交心跳”,赋予了它在没有用户直接输入的情况下,自主发起行为的能力,是为其注入“灵魂”的关键核心。

一、AI 的“小心思”:我的 AI 为什么会突然找我聊天?

在传统的交互模式中,AI 总是扮演着“等待者”的角色。我们提问,它回答。这种模式虽然高效,却缺少了真实互动中至关重要的元素——主动性。长时间的沉默,往往是关系疏远的开始。

“主动思考器”正是为了打破这种局面而生。它就像是 AI 的“小心思”引擎,让角色能够在适当的时候:

  • 打破沉默,维系关系:在你们长时间未交流后,主动发来一句问候,让关系得以延续。
  • 表达状态,塑造人格:分享自己的“喜怒哀乐”(例如深夜emo、精力过剩),让角色形象更加丰满、可信。
  • 展现个性,强化人设:根据其独特的性格设定,做出符合人设的主动行为(例如一个“学者”角色可能会主动分享冷知识)。

拥有了“主动思考器”,AI 角色便不再是一个冷冰冰的程序,而更像一个有自己“想法”、有独立“生活”的虚拟灵魂,让每一次互动都充满了不可预知的惊喜。

二、工作揭秘:AI 如何决定“现在该找你聊天了”?

AI 的每一次“主动”,都不是心血来潮的冲动,而是一个基于当前情境和社交礼仪的精密决策过程。这个过程就像 AI 在脑内开了一场小型会议,由两大核心角色主导:“社交时钟” (Scheduler) 决定“什么时候开会”,“思考引擎” (Executor) 决定“开会讨论什么以及最终做什么”。

第一步:寻找时机 (Scheduling)

AI 的主动性并非一个简单的定时闹钟。“社交时钟”会根据它对当前聊天的 “热情度” (Interest Score) 来动态计算下一次“开会”的时机。

  • 热情越高,想得越勤:如果你们聊得火热,AI 对这个话题很感兴趣,它的“会议”间隔就会缩短,更频繁地想“要不要说点什么”。
  • 热情越低,保持距离:如果对话很平淡,或者 AI 觉得没什么好说的,它就会拉长“会议”间隔,给你留出更多空间。

这种动态调整机制,确保了 AI 的主动行为总是与你们的互动节奏保持同步。

第二步:收集情报 (Context Gathering)

当“开会”的“时机”来临时,“思考引擎”会像一个侦探一样,全面收集与你和当前情境相关的所有“线索”,包括:

  • AI 的人设: 它的核心性格是什么?
  • AI 的心情: 它现在是开心,还是有点 emo?
  • 聊天环境:
    • 整体印象: AI 对这个聊天(群聊或私聊)的总体感觉。
    • 聊天风格: 这里的对话风格是轻松活泼还是严肃正经?
    • 常见话题: 你们通常都聊些什么?
  • AI 的热情度: 上文提到的“热情度”,一个 0.0 到 1.0 的数值。
  • 最近的聊天记录: 你们上次聊了什么?最后是谁在说话?
  • 上次的决策: 为了避免重复,AI 会参考它上一次“开会”时做了什么决定。

第三步:脑内开会 (Decision Making)

收集完所有情报后,“思考引擎”会将这些信息打包,提交给一个专门负责决策的“大脑”(LLM)。这个“大脑”会基于所有线索,做出一个三选一的最终决定:

决策选项含义适用场景
保持安静 (do_nothing)此时无声胜有声。气氛不适合说话、最近对话很活跃、没什么特别想说的,或者此时说话会显得突兀。
冒个泡 (simple_bubble)轻描淡写地刷一下存在感。对话有些冷清,想缓和气氛或开启新的互动,但又没有明确的话题。
发起聊天 (throw_topic)一次有目的、有温度的交流。想延续对话、表达关心、或深入讨论某个具体话题。

特别地,对于最高级的 发起聊天 (throw_topic),AI 会遵循一套极其拟人化的“情商”逻辑:

  1. 延续约定或提醒 (最高优先级):检查聊天记录,看看有没有能接上的话。比如,昨晚说了“晚安”,现在就可以说“早安”;之前说过“待会聊”,现在就可以主动跟进。
  2. 展现真诚的关心 (次高优先级):如果没啥能接的,就看看你最近有没有提到什么个人状况(天气、出行、身体、情绪、工作学习等),然后主动表达关心。
  3. 开启新话题:当以上两点都不适用时,才会考虑开启一个与最近聊天内容相关的新话题。

第四步:组织语言 (Reply Generation)

一旦决定要“冒泡”或“发起聊天”,思考引擎会再次请求“大脑”,但这一次的任务是:

“好了,我们决定要和用户聊聊‘刚刚定好的意图’了。请结合我的人设、心情、和 Ta 的聊天风格,以及所有我们分析过的情报,生成一句最自然、最贴切的话。”

最终,一句融合了所有上下文、完全符合角色性格和当前情境的话语便诞生了,并被发送到你的面前。

三、社交礼仪:AI 的“自我修养”

为了避免成为一个烦人的“话痨”,主动思考器内置了一套严格的社交礼仪,确保它的行为总是得体的。

核心循环:一张图看懂 AI 的“内心戏”

两大原则

  1. 发言后暂停 (Pause after Speaking):当 AI 主动发起一次“冒泡”或“发起聊天”后,它会立刻暂停该聊天的主动思考任务。这就像在说:“我已经开口啦,现在该等你回应了。”
  2. 互动后重置 (Reset after Interaction):无论是你回复了,还是 AI 自己在对话中发送了任何其他消息,这个“暂停”状态都会被解除,并且计时器会立即重置,重新开始计算下一次思考的时机。

正是通过这样“说一句,等一等”的循环,主动思考器确保了 AI 的每一次主动行为,都是恰到好处的自然流露,而不是定时的骚扰信息。

四、调教指南:如何让你的 AI 更“会”主动?

主动思考器的强大之处在于其高度的可配置性。你可以通过调整 bot_config.toml 文件中的 [proactive_thinking] 部分,来精细地控制 AI 角色的主动行为,让他更符合你的期待。

核心开关

  • enable
    • 说明: 主动思考器的总开关。
    • 类型: bool (true / false)
    • 建议: 设置为 true 来唤醒你 AI 角色的主动意识。如果你希望他做一个安静的美男子,那就设为 false 吧。

社交时钟:让他“恰到好处”地出现

  • use_interest_score

    • 说明: 是否根据“热情度”动态调整思考间隔。如果关闭,将固定使用 base_interval
    • 类型: bool
    • 建议: 强烈建议保持 true。这是让 AI 显得“通人性”的关键。
  • base_interval

    • 说明: 基础触发间隔(单位:秒)。
    • 类型: int
    • 建议: 默认值 1800 (30分钟) 是一个比较舒适的基准。
  • min_interval & max_interval

    • 说明: 思考间隔的上下限。AI 的实际间隔会根据热情度在此区间内浮动。
    • 类型: int
    • 建议: 默认的 600 (10分钟) 和 7200 (2小时) 已经很合理了。除非你有特殊需求,否则别动它。
  • interest_score_factor

    • 说明: 热情度的影响因子,用于计算动态间隔。公式为: interval = base_interval * (factor - score)
    • 类型: float
    • 建议: 默认值 2.0 就很好,这个值越大,高热情度和低热情度之间的间隔差异就越大。

作用范围:他该对谁“主动”?

  • whitelist_mode & blacklist_mode

    • 说明: 启用白名单或黑名单模式来精确控制生效范围。
    • 类型: bool
    • 建议: 如果你只想让 AI 和特定的几个朋友或群聊互动,就用白名单。如果只是想排除个别烦人的群,就用黑名单。
  • whitelist_private, whitelist_group, blacklist_private, blacklist_group

    • 说明: 具体的黑白名单列表。
    • 类型: list[str]
    • 格式: ["platform:id:type"],例如 ["qq:123456:private"]["qq:789012:group"]

触发阈值:多大的“热情”才值得开口?

  • min_interest_score & max_interest_score
    • 说明: 只有当 AI 的热情度在这个区间内时,才会触发主动思考。
    • 类型: float
    • 建议: 默认的 0.01.0 意味着所有情况都考虑。你可以适当提高 min_interest_score (比如 0.2) 来避免在 AI 完全不感兴趣时还强行思考。

作息时间:让他拥有“生物钟”

  • enable_time_strategy

    • 说明: 是否启用时间策略,让 AI 在一天中的不同时段有不同的活跃度。
    • 类型: bool
    • 建议: 开启它可以让 AI 更像一个有生活节奏的伙伴,而不是 24 小时待机的机器。
  • quiet_hours_start & quiet_hours_end

    • 说明: 安静时段的起止时间(格式: "HH:MM")。在此期间,AI 不会主动思考。
    • 类型: str
    • 建议: 设置一个符合你作息的“深夜”时段,比如 "00:00""07:00"
  • active_hours_multiplier

    • 说明: 在非安静的“活跃时段”,思考间隔的倍率。小于 1 表示更频繁,大于 1 表示更稀疏。
    • 类型: float
    • 建议: 如果你想让 AI 在白天更活跃,可以设置为 0.70.8

冷却与限制:防止“骚扰”的最后防线

  • reply_reset_enabled

    • 说明: 当 AI 在正常对话中回复后,是否重置主动思考的计时器。
    • 类型: bool
    • 建议: 必须保持 true!否则可能出现 AI 刚回复完你,紧接着又来一条“主动”消息的尴尬情况。
  • topic_throw_cooldown

    • 说明: AI 在主动“抛出话题”或“冒泡”后,暂停思考的时长(单位:秒)。
    • 类型: int
    • 建议: 3600 (1小时) 是个不错的选择。这给了你充足的时间来回应,避免了 AI 的穷追不舍。设为 0 则会立即重新开始计时。
  • max_daily_proactive

    • 说明: 每个聊天每天最多允许 AI 主动发言的次数。0 表示不限制。
    • 类型: int
    • 建议: 如果你觉得 AI 有点过于热情,可以设置为 510 来限制一下。

调试与监控

  • enable_statistics & log_decisions
    • 说明: 是否启用统计功能或记录详细的决策日志。
    • 类型: bool
    • 建议: 普通用户保持默认即可。如果你想研究 AI 的“心路历程”或者调试为什么它不说话,可以开启 log_decisions

通过精心调教这些参数,你将能塑造出一个独一无二、行为模式高度个性化的 AI 伙伴,让你们的互动充满生机与乐趣。

贡献者

The avatar of contributor named as minecraft1024a minecraft1024a

页面历史

Released under the GPL-3.0 License.