Files
JChatGPT/FavorabilitySystem.md

4.1 KiB
Raw Permalink Blame History

好感度系统功能规范

功能概述

为机器人添加一个可开关的好感度系统通过AI工具自动调整用户的好感度值。好感度数据将保存在插件数据中以用户QQ号为键包含好感度值和调整原因。

核心功能

1. 好感度数据存储

  • PluginData中新增一个映射来存储好感度数据
  • 用户QQ号(Long)
  • 值:包含好感度值和调整原因的数据结构
  • 默认值0中立

2. 好感度变化规则

  • 问正经问题+好感度(例如:询问学习/工作相关问题、寻求帮助等)
  • 问无聊问题-好感度(例如:骚扰机器人要求评价他人、攻击性言论、让机器人做无意义的事情、引战问题等)
  • 骂人:直接降至-100
  • 时间偏移好感度会随时间向0偏移偏移速度与当前好感度绝对值相关
    • 好感度越高或越低,偏移速度越慢
    • 设计算法确保极端值变化缓慢(具体公式见实现细节)

3. 回复概率机制

  • 当好感度为负数时,有一定概率不回复用户消息
  • 概率计算:好感度绝对值的百分比
    • 例如:好感度为-50则有50%概率不回复即50%概率回复)

4. 好感度调整工具

  • 新增一个AI工具允许AI根据对话内容自主调整用户的好感度
  • 工具名称:adjustUserFavorability
  • 工具参数:
    • userId: 用户QQ号
    • change: 好感度变化值(可正可负)
    • reason: 调整原因(用于溯源)
    • impression: 对用户的印象/画像(可选)

5. 系统开关

  • 在配置文件中添加开关选项,控制是否启用好感度系统
  • 默认启用

6. 管理员命令

  • 添加插件命令手动修改某个人的好感度
  • 添加命令重置所有好感度

实现细节

1. 数据结构

PluginData中添加:

/**
 * 用户好感度数据
 * Key: 用户QQ号
 * Value: 好感度信息
 */
val userFavorability by value(mutableMapOf<Long, FavorabilityInfo>())

/**
 * 好感度信息数据类
 * @param value 好感度值 (-100 ~ 100)
 * @param reason 调整原因列表,用于溯源
 * @param impression 对用户的印象/画像
 */
data class FavorabilityInfo(
    val value: Int = 0,
    val reasons: List<String> = emptyList(),
    val impression: String = ""
)

2. 好感度工具

创建新的工具类AdjustUserFavorabilityAgent,继承BaseAgent。 工具描述:根据用户行为调整其好感度值,范围-100~100

3. 消息处理逻辑

JChatGPT.ktonMessage函数中:

  • 添加好感度系统开关检查
  • 在决定是否回复前,计算回复概率
  • 如果随机数小于不回复概率,则直接返回,不进行后续处理

4. 时间偏移机制

设计时间偏移算法使好感度逐渐向0回归

  • 偏移公式:偏移量 = sign(好感度) * (1 - (|好感度| / 100)^2) * 基础偏移速度
  • 基础偏移速度可设置为每天1-5点
  • 这样确保当好感度接近极端值时,变化速度会显著减慢

5. 配置选项

PluginConfig.kt中添加:

/**
 * 是否启用好感度系统
 */
val enableFavorabilitySystem by value(true)

/**
 * 好感度每日基础偏移速度(点/天)
 */
val favorabilityBaseShiftSpeed by value(2.0)

6. 插件命令

添加以下命令:

  • /jgpt favorability <qq> <value>: 设置指定QQ号的好感度值
  • /jgpt resetFavorability: 重置所有用户的好感度为0

7. 提示词设计

不再使用系统提示词中的占位符,而是将好感度信息直接添加到聊天历史的顶部。

8. 好感度信息展示

  • 不再使用系统提示词中的占位符
  • 在获取历史消息时,将好感度信息作为摘要添加到聊天历史的顶部
  • 格式示例:
[好感度摘要]
用户840465812(筱杰) 好感度: 75
印象: 热心的开发者,经常提供有用的建议
调整原因:
- 2025-09-10 14:30: 提供了关于代码优化的建议 +10
- 2025-09-09 10:15: 帮助测试新功能 +5

待确认事项

  1. 时间偏移的基础速度设定(每天多少点)
  2. 好感度调整工具的具体参数和使用方式