Files
JChatGPT/FavorabilitySystem.md

123 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 好感度系统功能规范
## 功能概述
为机器人添加一个可开关的好感度系统通过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<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.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> <value>`: 设置指定QQ号的好感度值
- `/jgpt resetFavorability`: 重置所有用户的好感度为0
### 7. 提示词设计
不再使用系统提示词中的占位符,而是将好感度信息直接添加到聊天历史的顶部。
### 8. 好感度信息展示
- 不再使用系统提示词中的占位符
- 在获取历史消息时,将好感度信息作为摘要添加到聊天历史的顶部
- 格式示例:
```
[好感度摘要]
用户840465812(筱杰) 好感度: 75
印象: 热心的开发者,经常提供有用的建议
调整原因:
- 2025-09-10 14:30: 提供了关于代码优化的建议 +10
- 2025-09-09 10:15: 帮助测试新功能 +5
```
## 待确认事项
1. 时间偏移的基础速度设定(每天多少点)
2. 好感度调整工具的具体参数和使用方式