# 好感度系统功能规范 ## 功能概述 为机器人添加一个可开关的好感度系统,通过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`中添加: ```kotlin /** * 用户好感度数据 * Key: 用户QQ号 * Value: 好感度信息 */ val userFavorability by value(mutableMapOf()) /** * 好感度信息数据类 * @param value 好感度值 (-100 ~ 100) * @param reason 调整原因列表,用于溯源 * @param impression 对用户的印象/画像 */ data class FavorabilityInfo( val value: Int = 0, val reasons: List = emptyList(), val impression: String = "" ) ``` ### 2. 好感度工具 创建新的工具类`AdjustUserFavorabilityAgent`,继承`BaseAgent`。 工具描述:`根据用户行为调整其好感度值,范围-100~100` ### 3. 消息处理逻辑 在`JChatGPT.kt`的`onMessage`函数中: - 添加好感度系统开关检查 - 在决定是否回复前,计算回复概率 - 如果随机数小于不回复概率,则直接返回,不进行后续处理 ### 4. 时间偏移机制 设计时间偏移算法,使好感度逐渐向0回归: - 偏移公式:`偏移量 = sign(好感度) * (1 - (|好感度| / 100)^2) * 基础偏移速度` - 基础偏移速度可设置为每天1-5点 - 这样确保当好感度接近极端值时,变化速度会显著减慢 ### 5. 配置选项 在`PluginConfig.kt`中添加: ```kotlin /** * 是否启用好感度系统 */ val enableFavorabilitySystem by value(true) /** * 好感度每日基础偏移速度(点/天) */ val favorabilityBaseShiftSpeed by value(2.0) ``` ### 6. 插件命令 添加以下命令: - `/jgpt favorability `: 设置指定QQ号的好感度值 - `/jgpt resetFavorability`: 重置所有用户的好感度为0 ### 7. 提示词设计 不再使用系统提示词中的占位符,而是将好感度信息直接添加到聊天历史的顶部。 ### 8. 好感度信息展示 - 不再使用系统提示词中的占位符 - 在获取历史消息时,将好感度信息作为摘要添加到聊天历史的顶部 - 格式示例: ``` [好感度摘要] 用户840465812(筱杰) 好感度: 75 印象: 热心的开发者,经常提供有用的建议 调整原因: - 2025-09-10 14:30: 提供了关于代码优化的建议 +10 - 2025-09-09 10:15: 帮助测试新功能 +5 ``` ## 待确认事项 1. 时间偏移的基础速度设定(每天多少点) 2. 好感度调整工具的具体参数和使用方式