Update README

This commit is contained in:
2026-05-22 14:09:53 +08:00
parent 4dde523dfc
commit 98bb1066c4

View File

@@ -7,8 +7,8 @@ JChatGPT 是一个基于 Kotlin 的 Mirai Console 插件,它将大型语言模
- **多模型支持**:支持聊天模型、推理模型和视觉模型
- **丰富的工具系统**:包括网络搜索、代码执行、图像识别、群管理等
- **上下文记忆**:支持持久化记忆存储
- **好感度系统**基于用户行为的好感度管理机制
- **Token消耗统计**记录每次对话的Token消耗,支持多维度统计查询
- **用户画像系统**好感度、印象、标签、Bot 自定义代号
- **Token消耗统计**按天 × 用户 × 群聚合记录,支持多维度统计查询
- **LaTeX 渲染**:自动将数学表达式渲染为图片
- **灵活的触发方式**@机器人、关键字触发、回复消息等
- **权限控制**:细粒度的权限管理系统
@@ -55,7 +55,7 @@ AI 可以自动调用多种工具来完成复杂任务:
- `/jgpt tokensDaily [days]` - 查看指定天数的每日Token消耗统计默认7天
- `/jgpt tokensUsers [limit]` - 查看Token消耗最多的用户排名默认Top 10
- `/jgpt tokensGroups [limit]` - 查看Token消耗最多的群组排名默认Top 10
- `/jgpt tokensQuery [userId] [days]` - 查询详细的使用记录(可按用户和时间过滤)
- `/jgpt tokensQuery [userId] [days]` - 查询日聚合记录(每行一天一人,可按用户和时间过滤)
- `/jgpt tokensUserDaily <userId> [days]` - 查询指定用户每天的消费统计默认7天
## 配置文件
@@ -109,8 +109,10 @@ friendHasChatPermission: true
canMute: false
# 群荣誉等级权限门槛,达到这个等级相当于自动拥有对话权限。
temperaturePermission: 50
# 等待响应超时时间单位毫秒默认60秒
# 等待响应超时时间整个请求的总超时与socket读超时单位毫秒默认60秒
timeout: 60000
# 首块响应超时时间单位毫秒默认10秒。若连接建立后在此时间内没收到首块data:则中断走重试
firstChunkTimeout: 10000
# 系统提示词,该字段已弃用,使用提示词文件而不是在这里修改
prompt: '你是一个乐于助人的助手'
# 系统提示词文件路径,相对于插件配置目录
@@ -282,52 +284,56 @@ JChatGPT 默认配置为使用阿里云百炼平台的通义千问系列模型
10. **WeatherService** - 天气查询
11. **SearchChatHistory** - 按关键词、发送者、时间范围搜索群聊消息历史(依赖 mirai-hibernate-plugin
## 好感度系统
## 用户画像系统
JChatGPT 插件包含一个可选的好感度系统,用于根据用户行为调整机器人对用户的好感度。该系统有以下特性:
JChatGPT 维护对每位用户的画像由好感度、Bot 自定义代号、最多 5 个标签和印象文本组成。模型可以通过 `adjustUserFavorability` 工具在交流后增量更新这些字段(同一次调用可以同时调好感度、加 tag、改印象不必分开
### 核心机制
- 好感度值范围-100完全不理会到 100非常好的朋友
- 负好感度用户有一定概率不会收到回复,概率为好感度绝对值的百分比
- 好感度会随时间向0偏移偏移速度与当前好感度绝对值相关
### 字段
- **value好感度**范围 -100完全不理会到 100非常好的朋友
- **name代号**Bot 给此人起的内部代号,区别于 QQ 昵称,长度 ≤20
- **tags标签**:最多 5 个简短标签,记录身份/职业/偏好/技术栈等
- **impression印象**:自由文本,长度 ≤200
- **reasons调整原因**:只有 change ≠ 0 的调整才会追加,保留最近 10 条
### 好感度调整规则
- 问正经问题:+好感度
- 问无聊问题:-好感度
- 骂人:直接降至-100
### 好感度机制
- 负好感度用户有一定概率不会收到回复,概率 = |好感度| / 100
- 好感度会随时间向 0 偏移:偏移量 = sign(好感度) × (1 - (|好感度| / 100)²) × 基础偏移速
- 极端值变化缓慢,-100 需要好几天才能回升100 也不会快速衰减
### 时间偏移机制
好感度会随时间自然向0回归
- 偏移公式:偏移量 = sign(好感度) * (1 - (|好感度| / 100)^2) * 基础偏移速度
- 极端值变化缓慢,-100可能需要好几天才消气100可能好多天都不会降低
### 注入到上下文
- 群聊:列出会话历史中"认识的群友"name/tags/impression 任一非空)
- 私聊:仅当对方有 name/tags/impression 时注入对方画像
- 仅有好感度数值、其它字段全空的用户不会被列出,避免提示词噪声
### 管理命令
- `/jgpt favorability <userId> <value>` - 设置指定用户的好感度值(-100~100
- `/jgpt resetFavorability` - 重置所有用户的好感度
- `/jgpt setFavor <user> <value>` - 设置指定用户的好感度值(-100~100,不改其他字段
- `/jgpt clearFavor` - 清空所有用户画像
### 配置选项
- `enableFavorabilitySystem` - 是否启用好感度系统默认true
- `enableFavorabilitySystem` - 是否启用画像系统默认true
- `favorabilityBaseShiftSpeed` - 好感度每日基础偏移速度(点/天默认2.0
## Token消耗统计
JChatGPT 插件内置了Token消耗统计功能可以记录每次对话的Token使用情况,并提供多维度统计查询。
JChatGPT 按 (日期, userId, groupId) 三元组聚合每次对话的 Token 消耗,提供多维度统计查询。
> 历史版本曾按每次请求逐条记录,但增长不受控(数千条后会触发 mamoe-yamlkt 的编/解码 bug 导致整个 data.yml 无法加载)。现已改为按天聚合并搬到独立的 `token_usage.json`data.yml 只保留小规模的 memory / favorability 数据。
### 功能特性
- **自动记录**:每次对话自动记录Token消耗
- **详细数据**:记录时间戳、用户、群组、模型、输入/输出Token数
- **自动记录**:每次对话累加到当日聚合行
- **聚合维度**:日期 × 用户 × 群(同一人同一天在同一群只占一行)
- **多维统计**:支持按日期、用户、群组进行统计
- **灵活查询**:支持详细记录查询和过滤
### 记录内容
次对话记录包含以下信息
- 时间戳Unix timestamp
- 用户QQ号和昵称
条聚合记录包含:
- 日期yyyy-MM-dd本地时区
- 用户QQ号和最近一次记录到的昵称
- 群组ID群聊或null私聊
- 使用的模型名称
- 输入Token数promptTokens
- 输出Token数completionTokens
- 总Token数totalTokens
- 当日累计输入Token数promptTokens
- 当日累计输出Token数completionTokens
- 当日累计总Token数totalTokens
- 当日调用次数callCount
### 统计命令
@@ -410,19 +416,19 @@ JChatGPT 插件内置了Token消耗统计功能可以记录每次对话的Tok
```
/jgpt tokensQuery [userId] [days]
```
- 查询详细的使用记录
- 查询日聚合记录(每行 = 某天某人某群的当日合计)
- 可按用户ID过滤可选
- 可指定时间范围默认7天
- 最多显示20条记录
- 最多显示20条记录,按日期倒序
- 输出示例:
```
最近 7 天使用记录最多显示20条
最近 7 天使用记录最多显示20条,按日聚合
[03-18 14:35] 群987654321 - 张三
模型: qwen-max, Tokens: 2,345 (提示: 1,234, 输出: 1,111)
[2026-03-18] 群987654321 - 张三
调用 12 次, Tokens: 23,450 (输入: 12,340, 输出: 11,110)
[03-18 14:30] 私聊 - 李四
模型: qwen-max, Tokens: 1,876 (提示: 980, 输出: 896)
[2026-03-18] 私聊 - 李四
调用 5 次, Tokens: 8,760 (输入: 4,800, 输出: 3,960)
```
#### 用户日统计
@@ -445,8 +451,10 @@ JChatGPT 插件内置了Token消耗统计功能可以记录每次对话的Tok
```
### 数据存储
- Token记录保存在插件数据目录的 `data/data.json` 文件中
- 使用 `AutoSavePluginData` 自动持久化
- Token 聚合记录保存在插件数据目录的 `token_usage.json` 文件中
- `TokenUsageStore` 直接管,绕开 mamoe 的 plugin data 系统(避免 yamlkt 在大数据量下的编/解码 bug
- 每次记录后写盘(先写 `.tmp` 再覆盖,避免半文件)
- 加载失败会自动备份原文件为 `token_usage.json.broken-<timestamp>` 并从空开始
- 记录永久保存,不会自动删除
- 数据格式为JSON可手动查看和备份
@@ -459,7 +467,7 @@ JChatGPT 插件内置了Token消耗统计功能可以记录每次对话的Tok
### 注意事项
- 仅统计聊天模型的Token消耗
- 推理模型和视觉模型的消耗不在统计范围内
- 每次对话轮次都会单独记录
- 同一用户同一天在同一群的多次调用合并为一行callCount 自增)
- 统计数据基于实际API返回的Token数
## 部署要求