feat(expression): 重构表达学习配置,引入基于规则的结构化定义

本次更新旨在提高表达学习配置的可读性和灵活性。旧的基于列表的 `expression_learning` 和 `expression_groups` 配置方式难以理解且容易出错。

通过引入新的 `ExpressionRule` Pydantic模型,我们将所有相关设置(如聊天流ID、是否学习、学习强度、共享组等)整合到一个统一的、自描述的结构中。现在,所有规则都在一个新的 `[[expression.rules]]` 表中进行配置,使得逻辑更加清晰和易于维护。

相关模块,如 `ExpressionSelector`,已更新以适配新的配置结构。同时,数据库中的 `Expression` 模型也已更新为现代的 SQLAlchemy 2.0 风格。

BREAKING CHANGE: 表达学习的配置文件格式已完全改变。旧的 `expression_learning` 和 `expression_groups` 配置不再受支持,用户需要根据新的 `bot_config_template.toml` 文件迁移到 `[[expression.rules]]` 格式。
This commit is contained in:
minecraft1024a
2025-08-27 21:24:12 +08:00
parent 17e8755e66
commit eb469240d4
4 changed files with 88 additions and 117 deletions

View File

@@ -44,9 +44,7 @@ connection_timeout = 10 # 连接超时时间(秒)
# Master用户配置拥有最高权限无视所有权限节点
# 格式:[[platform, user_id], ...]
# 示例:[["qq", "123456"], ["telegram", "user789"]]
master_users = [
# ["qq", "123456789"], # 示例QQ平台的Master用户
]
master_users = []# ["qq", "123456789"], # 示例QQ平台的Master用户
[bot]
platform = "qq"
@@ -74,23 +72,37 @@ compress_identity = true # 是否压缩身份,压缩后会精简身份信息
[expression]
# 表达学习配置
expression_learning = [ # 表达学习配置列表,支持按聊天流配置
["", "enable", "enable", 1.0], # 全局配置使用表达启用学习学习强度1.0
["qq:1919810:group", "enable", "enable", 1.5], # 特定群聊配置使用表达启用学习学习强度1.5
["qq:114514:private", "enable", "disable", 0.5], # 特定私聊配置使用表达禁用学习学习强度0.5
# 格式说明:
# 第一位: chat_stream_id空字符串表示全局配置
# 第二位: 是否使用学到的表达 ("enable"/"disable")
# 第三位: 是否学习表达 ("enable"/"disable")
# 第四位: 学习强度(浮点数),影响学习频率,最短学习时间间隔 = 300/学习强度(秒)
# 学习强度越高,学习越频繁;学习强度越低,学习越少
]
# rules是一个列表每个元素都是一个学习规则
# chat_stream_id: 聊天流ID格式为 "platform:id:type",例如 "qq:123456:private"。空字符串""表示全局配置
# use_expression: 是否使用学到的表达 (true/false)
# learn_expression: 是否学习新的表达 (true/false)
# learning_strength: 学习强度(浮点数),影响学习频率
# group: 表达共享组的名称(字符串),相同组的聊天会共享学习到的表达方式
[[expression.rules]]
chat_stream_id = ""
use_expression = true
learn_expression = true
learning_strength = 1.0
expression_groups = [
["qq:1919810:private","qq:114514:private","qq:1111111:group"], # 在这里设置互通组相同组的chat_id会共享学习到的表达方式
# 格式:["qq:123456:private","qq:654321:group"]
# 注意如果为群聊则需要设置为group如果设置为私聊则需要设置为private
]
[[expression.rules]]
chat_stream_id = "qq:1919810:group"
use_expression = true
learn_expression = true
learning_strength = 1.5
[[expression.rules]]
chat_stream_id = "qq:114514:private"
group = "group_A"
use_expression = true
learn_expression = false
learning_strength = 0.5
[[expression.rules]]
chat_stream_id = "qq:1919810:private"
group = "group_A"
use_expression = true
learn_expression = true
learning_strength = 1.0