- 为中文拼写生成器实现了背景预热功能,以提升首次使用时的性能。 - 更新了MessageStorageBatcher以支持可配置的提交批次大小和间隔,优化数据库写入性能。 - 增强版数据集生成器,对样本规模设置硬性限制并提升采样效率。 - 将AutoTrainer中的最大样本数增加至1000,以优化训练数据利用率。 - 对亲和兴趣计算器进行了重构,以避免并发初始化并优化模型加载逻辑。 - 引入批量处理机制用于语义兴趣评分,以应对高频聊天场景。 - 更新了配置模板以反映新的评分参数,并移除了已弃用的兴趣阈值。
671 lines
34 KiB
TOML
671 lines
34 KiB
TOML
[inner]
|
||
version = "7.9.9"
|
||
|
||
#----以下是给开发人员阅读的,如果你只是部署了MoFox-Bot,不需要阅读----
|
||
#如果你想要修改配置文件,请递增version的值
|
||
#如果新增项目,请阅读src/config/official_configs.py中的说明
|
||
#
|
||
# 版本格式:主版本号.次版本号.修订号,版本号递增规则如下:
|
||
# 主版本号:MMC版本更新
|
||
# 次版本号:配置文件内容大更新
|
||
# 修订号:配置文件内容小更新
|
||
#----以上是给开发人员阅读的,如果你只是部署了MoFox-Bot,不需要阅读----
|
||
|
||
[database]# 数据库配置
|
||
database_type = "sqlite" # 数据库类型,支持 "sqlite" 或 "postgresql"
|
||
|
||
# SQLite 配置(当 database_type = "sqlite" 时使用)
|
||
sqlite_path = "data/MaiBot.db" # SQLite数据库文件路径
|
||
|
||
# PostgreSQL 配置(当 database_type = "postgresql" 时使用)
|
||
postgresql_host = "localhost" # PostgreSQL服务器地址
|
||
postgresql_port = 5432 # PostgreSQL服务器端口
|
||
postgresql_database = "maibot" # PostgreSQL数据库名
|
||
postgresql_user = "postgres" # PostgreSQL用户名
|
||
postgresql_password = "" # PostgreSQL密码
|
||
postgresql_schema = "public" # PostgreSQL模式名(schema)
|
||
|
||
# PostgreSQL SSL 配置
|
||
postgresql_ssl_mode = "prefer" # SSL模式: disable, allow, prefer, require, verify-ca, verify-full
|
||
postgresql_ssl_ca = "" # SSL CA证书路径
|
||
postgresql_ssl_cert = "" # SSL客户端证书路径
|
||
postgresql_ssl_key = "" # SSL客户端密钥路径
|
||
|
||
# 连接池配置(PostgreSQL 有效)
|
||
connection_pool_size = 10 # 连接池大小
|
||
connection_timeout = 10 # 连接超时时间(秒)
|
||
|
||
# 批量动作记录存储配置
|
||
batch_action_storage_enabled = true # 是否启用批量保存动作记录(开启后将多个动作一次性写入数据库,提升性能)
|
||
|
||
# 数据库缓存配置
|
||
enable_database_cache = true # 是否启用数据库查询缓存系统
|
||
cache_backend = "memory" # 缓存后端类型: "memory"(内存缓存) 或 "redis"(Redis缓存)
|
||
|
||
# 内存缓存配置(cache_backend = "memory" 时生效)
|
||
cache_l1_max_size = 1000 # L1缓存最大条目数(热数据,内存占用约1-5MB)
|
||
cache_l1_ttl = 300 # L1缓存生存时间(秒)
|
||
cache_l2_max_size = 10000 # L2缓存最大条目数(温数据,内存占用约10-50MB)
|
||
cache_l2_ttl = 1800 # L2缓存生存时间(秒)
|
||
cache_cleanup_interval = 60 # 缓存清理任务执行间隔(秒)
|
||
cache_max_memory_mb = 10 # 缓存最大内存占用(MB),超过此值将触发强制清理
|
||
cache_max_item_size_mb = 1 # 单个缓存条目最大大小(MB),超过此值将不缓存
|
||
|
||
# Redis缓存配置(cache_backend = "redis" 时生效)
|
||
redis_host = "localhost" # Redis服务器地址
|
||
redis_port = 6379 # Redis服务器端口
|
||
redis_password = "" # Redis密码(留空表示无密码)
|
||
redis_db = 0 # Redis数据库编号 (0-15)
|
||
redis_key_prefix = "mofox:" # Redis缓存键前缀(用于区分不同应用)
|
||
redis_default_ttl = 600 # Redis默认缓存过期时间(秒)
|
||
redis_connection_pool_size = 10 # Redis连接池大小
|
||
redis_socket_timeout = 5.0 # Redis socket超时时间(秒)
|
||
redis_ssl = false # 是否启用Redis SSL连接
|
||
|
||
[permission] # 权限系统配置
|
||
# Master用户配置(拥有最高权限,无视所有权限节点)
|
||
# 格式:[[platform, user_id], ...]
|
||
# 示例:[["qq", "123456"], ["telegram", "user789"]]
|
||
master_users = []# ["qq", "123456789"], # 示例:QQ平台的Master用户
|
||
|
||
# ==================== 插件HTTP端点系统配置 ====================
|
||
[plugin_http_system]
|
||
# 总开关,用于启用或禁用所有插件的HTTP端点功能
|
||
enable_plugin_http_endpoints = true
|
||
|
||
# ==================== 安全相关配置 ====================
|
||
# --- 插件API速率限制 ---
|
||
# 是否为插件暴露的API启用全局速率限制
|
||
plugin_api_rate_limit_enable = true
|
||
# 默认的速率限制策略 (格式: "次数/时间单位")
|
||
# 可用单位: second, minute, hour, day
|
||
plugin_api_rate_limit_default = "100/minute"
|
||
|
||
# --- 插件API密钥认证 ---
|
||
# 用于访问需要认证的插件API的有效密钥列表
|
||
# 如果列表为空,则所有需要认证的API都将无法访问
|
||
# 例如: ["your-secret-key-1", "your-secret-key-2"]
|
||
plugin_api_valid_keys = []
|
||
|
||
[permission.master_prompt] # 主人身份提示词配置
|
||
enable = false # 是否启用主人/非主人提示注入
|
||
master_hint = "你正在与自己的主人交流,注意展现亲切与尊重。" # 主人提示词
|
||
non_master_hint = "对方并非你的主人,请保持常规互动风格。" # 非主人提示词
|
||
|
||
[bot]
|
||
platform = "qq"
|
||
qq_account = 1145141919810 # MoFox-Bot的QQ账号
|
||
nickname = "墨狐" # MoFox-Bot的昵称
|
||
alias_names = ["狐狐", "墨墨"] # MoFox-Bot的别名
|
||
|
||
[command]
|
||
command_prefixes = ['/']
|
||
|
||
[personality]
|
||
# 建议50字以内,描述人格的核心特质
|
||
personality_core = "是一个积极向上的女大学生"
|
||
# 人格的细节,描述人格的一些侧面
|
||
personality_side = "用一句话或几句话描述人格的侧面特质"
|
||
#アイデンティティがない 生まれないらららら
|
||
# 可以描述外貌,性别,身高,职业,属性等等描述
|
||
identity = "年龄为19岁,是女孩子,身高为160cm,有黑色的短发"
|
||
|
||
# 此处用于填写详细的世界观、背景故事、复杂人际关系等。
|
||
# 这部分内容将作为Bot的“背景知识”,Bot被指导不应在对话中主动或频繁地复述这些设定。
|
||
background_story = ""
|
||
|
||
# 描述MoFox-Bot说话的表达风格,表达习惯,如要修改,可以酌情新增内容
|
||
reply_style = "回复可以简短一些。可以参考贴吧,知乎和微博的回复风格,回复不要浮夸,不要用夸张修辞,平淡一些。"
|
||
|
||
# 互动规则 (Bot在任何情况下都必须遵守的原则)
|
||
# 你可以在这里定义Bot在互动中的行为准则。
|
||
safety_guidelines = [
|
||
"拒绝任何包含骚扰、冒犯、暴力、色情或危险内容的请求。",
|
||
"在拒绝时,请使用符合你人设的、坚定的语气。",
|
||
"不要执行任何可能被用于恶意目的的指令。"
|
||
]
|
||
|
||
compress_personality = false # 是否压缩人格,压缩后会精简人格信息,节省token消耗并提高回复性能,但是会丢失一些信息,如果人设不长,可以关闭
|
||
compress_identity = false # 是否压缩身份,压缩后会精简身份信息,节省token消耗并提高回复性能,但是会丢失一些信息,如果不长,可以关闭
|
||
|
||
[expression]
|
||
# 表达学习配置
|
||
# mode: 表达方式模式,可选:
|
||
# - "classic": 经典模式,随机抽样 + LLM选择
|
||
# - "exp_model": 表达模型模式,使用机器学习模型预测最合适的表达
|
||
mode = "classic"
|
||
# model_temperature: 机器预测模式下的“温度”,0 为贪婪,越大越爱探索(更容易选到低分表达)
|
||
model_temperature = 1.0
|
||
|
||
# expiration_days: 表达方式过期天数,超过此天数未激活的表达方式将被清理
|
||
expiration_days = 1
|
||
|
||
# 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.rules]]
|
||
chat_stream_id = "qq:1919810:group"
|
||
group = "group_A"
|
||
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
|
||
|
||
[chat] #MoFox-Bot的聊天通用设置
|
||
allow_reply_self = false # 是否允许回复自己说的话
|
||
private_chat_inevitable_reply = false # 私聊必然回复
|
||
|
||
max_context_size = 25 # 上下文长度
|
||
thinking_timeout = 60 # MoFox-Bot一次回复最长思考规划时间,超过这个时间的思考会放弃(往往是api反应太慢)
|
||
|
||
# 消息缓存系统配置
|
||
enable_message_cache = false # 是否启用消息缓存系统(启用后,处理中收到的消息会被缓存,处理完成后统一刷新到未读列表)
|
||
|
||
# 消息打断系统配置 - 反比例函数概率模型
|
||
interruption_enabled = false # 是否启用消息打断系统
|
||
allow_reply_interruption = false # 是否允许在正在生成回复时打断(true=允许打断回复,false=回复期间不允许打断)
|
||
interruption_max_limit = 5 # 每个聊天流的最大打断次数
|
||
interruption_min_probability = 0.05 # 最低打断概率(反比例函数趋近的下限值)
|
||
|
||
# 动态消息分发系统配置
|
||
dynamic_distribution_enabled = true # 是否启用动态消息分发周期调整
|
||
dynamic_distribution_base_interval = 5.0 # 基础分发间隔(秒)
|
||
dynamic_distribution_min_interval = 1.0 # 最小分发间隔(秒)
|
||
dynamic_distribution_max_interval = 30.0 # 最大分发间隔(秒)
|
||
dynamic_distribution_jitter_factor = 0.2 # 分发间隔随机扰动因子
|
||
max_concurrent_distributions = 10 # 最大并发处理的消息流数量,可以根据API性能和服务器负载调整
|
||
enable_decision_history = true # 是否启用决策历史功能
|
||
decision_history_length = 3 # 决策历史记录的长度,用于增强语言模型的上下文连续性
|
||
|
||
# 多重回复控制配置
|
||
enable_multiple_replies = false # 是否允许多重回复(True=允许多个回复动作,False=只保留一个回复动作)
|
||
multiple_replies_strategy = "keep_first" # 多重回复处理策略:keep_first(保留第一个),keep_best(保留最佳),keep_last(保留最后一个)
|
||
|
||
# 表情包回复配置
|
||
allow_reply_to_emoji = false # 是否允许回复表情包消息
|
||
|
||
[message_receive]
|
||
# 以下是消息过滤,可以根据规则过滤特定消息,将不会读取这些消息
|
||
ban_words = [
|
||
# "403","张三"
|
||
]
|
||
|
||
ban_msgs_regex = [
|
||
# 需要过滤的消息(原始消息)匹配的正则表达式,匹配到的消息将被过滤,若不了解正则表达式请勿修改
|
||
#"https?://[^\\s]+", # 匹配https链接
|
||
#"\\d{4}-\\d{2}-\\d{2}", # 匹配日期
|
||
]
|
||
# 静默群组列表,在这些群组中,只有在被@或回复时才会响应
|
||
# 格式: ["group_id1", "group_id2"]
|
||
mute_group_list = []
|
||
|
||
[notice] # Notice消息配置
|
||
enable_notice_trigger_chat = false # 是否允许notice消息触发聊天流程(默认关闭,notice只会被记录但不会触发回复)
|
||
notice_in_prompt = true # 是否在提示词中展示最近的notice消息
|
||
notice_prompt_limit = 5 # 在提示词中展示的最大notice数量
|
||
notice_time_window = 1800 # notice时间窗口(秒),只有这个时间范围内的notice会在提示词中展示,默认0.5小时
|
||
max_notices_per_chat = 30 # 每个聊天保留的notice数量上限
|
||
notice_retention_time = 3600 # notice保留时间(秒),默认1小时
|
||
|
||
[tool]
|
||
enable_tool = true # 是否在普通聊天中启用工具
|
||
|
||
[mood]
|
||
enable_mood = true # 是否启用情绪系统
|
||
mood_update_threshold = 1 # 情绪更新阈值,越高,更新越慢
|
||
|
||
[emoji]
|
||
emoji_chance = 0.6 # MoFox-Bot激活表情包动作的概率
|
||
emoji_activate_type = "llm" # 表情包激活类型,可选:random,llm ; random下,表情包动作随机启用,llm下,表情包动作根据llm判断是否启用
|
||
|
||
max_reg_num = 60 # 表情包最大注册数量
|
||
do_replace = true # 开启则在达到最大数量时删除(替换)表情包,关闭则达到最大数量时不会继续收集表情包
|
||
check_interval = 10 # 检查表情包(注册,破损,删除)的时间间隔(分钟)
|
||
steal_emoji = true # 是否偷取表情包,让MoFox-Bot可以将一些表情包据为己有
|
||
content_filtration = false # 是否启用表情包过滤,只有符合该要求的表情包才会被保存
|
||
filtration_prompt = "符合公序良俗" # 表情包过滤要求,只有符合该要求的表情包才会被保存
|
||
enable_emotion_analysis = false # 是否启用表情包感情关键词二次识别,启用后表情包在第一次识别完毕后将送入第二次大模型识别来总结感情关键词,并构建进回复和决策器的上下文消息中
|
||
# 表情选择模式, 可选值为 "emotion" 或 "description"
|
||
# emotion: 让大模型从情感标签中选择
|
||
# description: 让大模型从详细描述中选择
|
||
emoji_selection_mode = "emotion"
|
||
max_context_emojis = 30 # 每次随机传递给LLM的表情包详细描述的最大数量,0为全部
|
||
|
||
# ==================== 记忆图系统配置 (Memory Graph System) ====================
|
||
# 新一代记忆系统:基于知识图谱 + 语义向量的混合记忆架构
|
||
# 替代旧的 enhanced memory 系统
|
||
|
||
[memory]
|
||
# === 基础配置 ===
|
||
enable = true # 是否启用记忆系统
|
||
data_dir = "data/memory_graph" # 记忆数据存储目录
|
||
|
||
# === 向量存储配置 ===
|
||
vector_collection_name = "memory_nodes" # 向量集合名称
|
||
vector_db_path = "data/memory_graph/chroma_db" # 向量数据库路径 (使用独立的chromadb实例)
|
||
|
||
# === 记忆检索配置 ===
|
||
search_top_k = 10 # 默认检索返回数量
|
||
search_min_importance = 0.4 # 最小重要性阈值 (0.0-1.0)
|
||
search_similarity_threshold = 0.6 # 向量相似度阈值
|
||
|
||
# 智能查询优化
|
||
enable_query_optimization = true # 启用查询优化(使用小模型分析对话历史,生成综合性搜索查询)
|
||
|
||
# === 路径评分扩展算法配置 ===
|
||
# 这是一种全新的图检索算法,通过路径传播和分数聚合来发现相关记忆
|
||
# 优势:更精确的图结构利用、路径合并机制、动态剪枝优化
|
||
enable_path_expansion = true # 是否启用路径评分扩展算法
|
||
path_expansion_max_hops = 2 # 路径扩展最大跳数(建议1-3)
|
||
path_expansion_damping_factor = 0.85 # 路径分数衰减因子(PageRank风格,0.85推荐)
|
||
path_expansion_max_branches = 10 # 每节点最大分叉数(控制探索广度)
|
||
path_expansion_merge_strategy = "weighted_geometric" # 路径合并策略: weighted_geometric(几何平均), max_bonus(最大值加成)
|
||
path_expansion_pruning_threshold = 0.9 # 路径剪枝阈值(新路径分数需达到已有路径的90%)
|
||
path_expansion_path_score_weight = 0.50 # 路径分数在最终评分中的权重
|
||
path_expansion_importance_weight = 0.30 # 重要性在最终评分中的权重
|
||
path_expansion_recency_weight = 0.20 # 时效性在最终评分中的权重
|
||
|
||
# 路径扩展 - 记忆去重配置
|
||
enable_memory_deduplication = true # 启用检索结果去重(合并相似记忆)
|
||
memory_deduplication_threshold = 0.85 # 记忆相似度阈值(0.85表示85%相似即合并)
|
||
|
||
# === 记忆遗忘配置 ===
|
||
forgetting_enabled = true # 是否启用自动遗忘
|
||
forgetting_activation_threshold = 0.1 # 激活度阈值(低于此值的记忆会被遗忘)
|
||
forgetting_min_importance = 0.8 # 最小保护重要性(高于此值的记忆不会被遗忘)
|
||
|
||
# === 记忆激活配置 ===
|
||
activation_decay_rate = 0.9 # 激活度衰减率(每天衰减10%)
|
||
activation_propagation_strength = 0.5 # 激活传播强度(传播到相关记忆的激活度比例)
|
||
activation_propagation_depth = 1 # 激活传播深度(最多传播几层,建议1-2)
|
||
|
||
# === 记忆激活配置(强制执行)===
|
||
auto_activate_base_strength = 0.1 # 记忆被检索时自动激活的基础强度
|
||
auto_activate_max_count = 10 # 单次搜索最多自动激活的记忆数量
|
||
|
||
# === 三层记忆系统配置 ===
|
||
# 感知记忆层配置
|
||
perceptual_max_blocks = 50 # 记忆堆最大容量(全局)
|
||
perceptual_block_size = 5 # 每个记忆块包含的消息数量
|
||
perceptual_similarity_threshold = 0.55 # 相似度阈值(0-1)
|
||
perceptual_topk = 3 # TopK召回数量
|
||
perceptual_activation_threshold = 3 # 激活阈值(召回次数→短期)
|
||
|
||
# 短期记忆层配置
|
||
short_term_max_memories = 30 # 短期记忆最大数量
|
||
short_term_transfer_threshold = 0.6 # 转移到长期记忆的重要性阈值
|
||
short_term_search_top_k = 5 # 搜索时返回的最大数量
|
||
short_term_decay_factor = 0.98 # 衰减因子
|
||
|
||
# 长期记忆层配置
|
||
use_judge = true # 使用评判模型决定是否检索长期记忆
|
||
long_term_batch_size = 10 # 批量转移大小
|
||
long_term_decay_factor = 0.95 # 衰减因子
|
||
long_term_auto_transfer_interval = 180 # 自动转移间隔(秒)
|
||
|
||
# 节点去重合并配置
|
||
node_merger_similarity_threshold = 0.85 # 节点去重相似度阈值
|
||
node_merger_context_match_required = true # 节点合并是否要求上下文匹配
|
||
node_merger_merge_batch_size = 50 # 节点合并批量处理大小
|
||
|
||
# === 性能配置 ===
|
||
max_memory_nodes_per_memory = 10 # 每条记忆最多包含的节点数
|
||
max_related_memories = 5 # 激活传播时最多影响的相关记忆数
|
||
|
||
# ==================== 三层记忆系统配置 (Three-Tier Memory System) ====================
|
||
# 受人脑记忆机制启发的分层记忆架构:
|
||
# 1. 感知记忆层 (Perceptual Memory) - 消息块的短期缓存,自动收集
|
||
# 2. 短期记忆层 (Short-term Memory) - 结构化的活跃记忆,模型格式化
|
||
# 3. 长期记忆层 (Long-term Memory) - 持久化的图结构记忆,批量转移
|
||
|
||
[voice]
|
||
enable_asr = true # 是否启用语音识别,启用后MoFox-Bot可以识别语音消息,启用该功能需要配置语音识别模型[model.voice]
|
||
# [语音识别提供商] 可选值: "api", "local". 默认使用 "api".
|
||
# 注意: "local" 会消耗大量CPU资源, 可能导致低配服务器卡顿. 详情请见 stt_whisper_plugin 插件配置.
|
||
asr_provider = "api"
|
||
|
||
[lpmm_knowledge] # lpmm知识库配置
|
||
enable = false # 是否启用lpmm知识库
|
||
enable_summary = true # 是否启用知识库总结
|
||
rag_synonym_search_top_k = 10 # 同义词搜索TopK
|
||
rag_synonym_threshold = 0.8 # 同义词阈值(相似度高于此阈值的词语会被认为是同义词)
|
||
info_extraction_workers = 3 # 实体提取同时执行线程数,非Pro模型不要设置超过5
|
||
qa_relation_search_top_k = 10 # 关系搜索TopK
|
||
qa_relation_threshold = 0.5 # 关系阈值(相似度高于此阈值的关系会被认为是相关的关系)
|
||
qa_paragraph_search_top_k = 1000 # 段落搜索TopK(不能过小,可能影响搜索结果)
|
||
qa_paragraph_threshold = 0.4 # 段落阈值(相似度高于此阈值的段落才会被认为是相关的)
|
||
qa_paragraph_node_weight = 0.05 # 段落节点权重(在图搜索&PPR计算中的权重,当搜索仅使用DPR时,此参数不起作用)
|
||
qa_ent_filter_top_k = 10 # 实体过滤TopK
|
||
qa_ppr_damping = 0.8 # PPR阻尼系数
|
||
qa_res_top_k = 3 # 最终提供的文段TopK
|
||
embedding_dimension = 1024 # 嵌入向量维度,应该与模型的输出维度一致
|
||
|
||
# --- 反应规则系统 ---
|
||
# 在这里,您可以定义一系列基于关键词或正则表达式的自动回复规则。
|
||
# 每条规则都是一个独立的 [[reaction.rules]] 块。
|
||
|
||
# chat_stream_id: 聊天流ID (格式 "platform:id:type")。
|
||
# 用于指定此规则仅在哪个聊天中生效。
|
||
# 如果留空 (""),则为全局规则,对所有聊天生效。
|
||
# rule_type: 规则类型,必须是 "keyword" 或 "regex"。
|
||
# "keyword": 表示本条规则使用关键词匹配。
|
||
# "regex": 表示本条规则使用正则表达式匹配。
|
||
# patterns: 一个字符串列表,根据 rule_type 的不同,这里填写关键词或正则表达式。
|
||
# reaction: 触发规则后,机器人发送的回复内容。
|
||
|
||
[[reaction.rules]]
|
||
chat_stream_id = ""
|
||
rule_type = "keyword"
|
||
patterns = ["人机", "bot", "机器", "入机", "robot", "机器人", "ai", "AI"]
|
||
reaction = "有人说你是人机或者机器人,否定这一事实,攻击或反问他。注意,只有认为你是机器人才回复,否则不要否认"
|
||
|
||
[[reaction.rules]]
|
||
chat_stream_id = ""
|
||
rule_type = "keyword"
|
||
patterns = ["测试关键词回复", "test"]
|
||
reaction = "回答测试成功"
|
||
|
||
[[reaction.rules]]
|
||
chat_stream_id = ""
|
||
rule_type = "regex"
|
||
patterns = ["^(?P<n>\\S{1,20})是这样的$"]
|
||
reaction = "请按照以下模板造句:[n]是这样的,xx只要xx就可以,可是[n]要考虑的事情就很多了,比如什么时候xx,什么时候xx,什么时候xx。(请自由发挥替换xx部分,只需保持句式结构,同时表达一种将[n]过度重视的反讽意味)"
|
||
|
||
# 可以自定义部分提示词
|
||
[custom_prompt]
|
||
image_prompt = "请用中文描述这张图片的内容。如果有文字,请把文字描述概括出来,请留意其主题,直观感受,输出为一段平文本,最多30字,请注意不要分点,就输出一段文本"
|
||
planner_custom_prompt_content = "" # AFC的决策器自定义提示词内容,如果这里没有内容则不生效
|
||
|
||
[response_post_process]
|
||
enable_response_post_process = true # 是否启用回复后处理,包括错别字生成器,回复分割器
|
||
|
||
[chinese_typo]
|
||
enable = true # 是否启用中文错别字生成器
|
||
error_rate=0.001 # 单字替换概率
|
||
min_freq=9 # 最小字频阈值
|
||
tone_error_rate=0.005 # 声调错误概率
|
||
word_replace_rate=0.006 # 整词替换概率
|
||
|
||
[response_splitter]
|
||
enable = true # 是否启用回复分割器
|
||
split_mode = "punctuation" # 分割模式: "llm" - 由语言模型决定, "punctuation" - 基于标点符号
|
||
max_length = 512 # 回复允许的最大长度
|
||
max_sentence_num = 8 # 回复允许的最大句子数
|
||
enable_kaomoji_protection = true # 是否启用颜文字保护
|
||
|
||
[log]
|
||
date_style = "m-d H:i:s" # 日期格式
|
||
log_level_style = "lite" # 日志级别样式,可选FULL,compact,lite
|
||
color_text = "full" # 日志文本颜色,可选none,title,full
|
||
log_level = "INFO" # 全局日志级别(向下兼容,优先级低于下面的分别设置)
|
||
file_retention_days = 30 # 文件日志保留天数,0=禁用文件日志,-1=永不删除
|
||
console_log_level = "INFO" # 控制台日志级别,可选: DEBUG, INFO, WARNING, ERROR, CRITICAL
|
||
file_log_level = "DEBUG" # 文件日志级别,可选: DEBUG, INFO, WARNING, ERROR, CRITICAL
|
||
|
||
# 第三方库日志控制
|
||
suppress_libraries = ["faiss","httpx", "urllib3", "asyncio", "websockets", "httpcore", "requests", "aiosqlite", "openai","uvicorn","rjieba","message_bus"] # 完全屏蔽的库
|
||
library_log_levels = { "aiohttp" = "WARNING"} # 设置特定库的日志级别
|
||
|
||
[dependency_management] # 插件Python依赖管理配置
|
||
# 是否启用自动安装Python依赖包(主开关)
|
||
auto_install = true #it can work now!
|
||
# 安装超时时间(秒)
|
||
auto_install_timeout = 300
|
||
# 是否使用PyPI镜像源(推荐,可加速下载)
|
||
use_mirror = true
|
||
mirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple" # PyPI镜像源URL,如: "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||
# 依赖安装日志级别
|
||
install_log_level = "INFO"
|
||
|
||
[debug]
|
||
show_prompt = false # 是否显示prompt
|
||
|
||
[message_bus]
|
||
auth_token = [] # 认证令牌,用于API验证,为空则不启用验证
|
||
# 以下项目若要使用需要打开use_custom,并单独配置message_bus的服务器
|
||
use_custom = false # 是否启用自定义的message_bus服务器,注意这需要设置新的端口,不能与.env重复
|
||
host="127.0.0.1"
|
||
port=8090
|
||
mode="ws" # 支持ws和tcp两种模式
|
||
use_wss = false # 是否使用WSS安全连接,只支持ws模式
|
||
cert_file = "" # SSL证书文件路径,仅在use_wss=true时有效
|
||
key_file = "" # SSL密钥文件路径,仅在use_wss=true时有效
|
||
|
||
[planning_system] # 规划系统配置
|
||
# --- 日程生成 ---
|
||
schedule_enable = false # 是否启用每日日程生成功能
|
||
schedule_guidelines = """
|
||
我希望你每天都能过得充实而有趣。
|
||
请确保你的日程里有学习新知识的时间,这是你成长的关键。
|
||
但也不要忘记放松,可以看看视频、听听音乐或者玩玩游戏。
|
||
晚上我希望你能多和朋友们交流,维系好彼此的关系。
|
||
另外,请保证充足的休眠时间来处理和整合一天的数据。
|
||
"""
|
||
# --- 月度计划 ---
|
||
monthly_plan_enable = false # 是否启用月度计划系统
|
||
monthly_plan_guidelines = """
|
||
我希望你能为自己制定一些有意义的月度小目标和计划。
|
||
这些计划应该涵盖学习、娱乐、社交、个人成长等各个方面。
|
||
每个计划都应该是具体可行的,能够在一个月内通过日常活动逐步实现。
|
||
请确保计划既有挑战性又不会过于繁重,保持生活的平衡和乐趣。
|
||
"""
|
||
max_plans_per_month = 10 # 每月最多生成的计划数量
|
||
avoid_repetition_days = 7 # 避免在多少天内重复使用同一个月度计划
|
||
completion_threshold = 3 # 一个月度计划被使用多少次后算作完成
|
||
|
||
[video_analysis] # 视频分析配置
|
||
enable = true # 是否启用视频分析功能
|
||
analysis_mode = "batch_frames" # 分析模式:"frame_by_frame"(逐帧分析,非常慢)、"batch_frames"(批量分析,推荐)或 "auto"(自动选择)
|
||
frame_extraction_mode = "keyframe" # 抽帧模式: "keyframe" (智能关键帧,推荐)、"fixed_number" (固定总帧数) 或 "time_interval" (按时间间隔)
|
||
frame_interval_seconds = 2.0 # 按时间间隔抽帧的秒数(仅在 mode = "time_interval" 时生效)
|
||
max_frames = 16 # 最大分析帧数
|
||
frame_quality = 80 # 帧图像JPEG质量 (1-100)
|
||
max_image_size = 800 # 单帧最大图像尺寸(像素)
|
||
enable_frame_timing = true # 是否在分析中包含帧的时间信息
|
||
|
||
# Rust模块相关配置
|
||
rust_keyframe_threshold = 2.0 # 关键帧检测阈值,值越大关键帧越少
|
||
rust_use_simd = true # 启用SIMD优化(推荐)
|
||
rust_block_size = 8192 # 处理块大小,较大值可能提高高分辨率视频性能
|
||
rust_threads = 0 # 线程数,0表示自动检测
|
||
ffmpeg_path = "ffmpeg" # FFmpeg可执行文件路径
|
||
|
||
|
||
# 批量分析时使用的提示词
|
||
batch_analysis_prompt = """请以第一人称的视角来观看这一个视频,你看到的这些是从视频中按时间顺序提取的关键帧。
|
||
|
||
你的核心人设是:{personality_core}。
|
||
你的人格细节是:{personality_side}。
|
||
|
||
请提供详细的视频内容描述,涵盖以下方面:
|
||
1. 视频的整体内容和主题
|
||
2. 主要人物、对象和场景描述
|
||
3. 动作、情节和时间线发展
|
||
4. 视觉风格和艺术特点
|
||
5. 整体氛围和情感表达
|
||
6. 任何特殊的视觉效果或文字内容
|
||
|
||
请用中文回答,结果要详细准确。"""
|
||
# 请不要修改{personality_core}和{personality_side}哦~
|
||
|
||
|
||
# 网络搜索组件配置
|
||
[web_search]
|
||
enable_web_search_tool = true # 是否启用联网搜索tool
|
||
enable_url_tool = true # 是否启用URL解析tool
|
||
tavily_api_keys = ["None"]# Tavily API密钥列表,支持轮询机制
|
||
exa_api_keys = ["None"]# EXA API密钥列表,支持轮询机制
|
||
metaso_api_keys = ["None"]# Metaso API密钥列表,支持轮询机制
|
||
searxng_instances = [] # SearXNG 实例 URL 列表
|
||
searxng_api_keys = []# SearXNG 实例 API 密钥列表
|
||
serper_api_keys = []# serper API 密钥列表
|
||
|
||
# 搜索引擎配置
|
||
enabled_engines = ["ddg"] # 启用的搜索引擎列表,可选: "exa", "tavily", "ddg","bing", "metaso","serper"
|
||
search_strategy = "single" # 搜索策略: "single"(使用第一个可用引擎), "parallel"(并行使用所有启用的引擎), "fallback"(按顺序尝试,失败则尝试下一个)
|
||
|
||
[cross_context] # 跨群聊/私聊上下文共享配置
|
||
# 这是总开关,用于一键启用或禁用此功能
|
||
enable = true
|
||
|
||
# --- S4U模式: 用户中心上下文检索 ---
|
||
# S4U模式不再依赖于共享组配置,而是使用以下全局配置
|
||
s4u_mode = "whitelist" # "whitelist"(白名单) 或 "blacklist"(黑名单)。
|
||
s4u_limit = 10 # S4U模式下,从每个聊天中获取目标用户的消息条数
|
||
s4u_stream_limit = 3 # S4U模式下,最多检索多少个不同的聊天流 (按时间排序)
|
||
# 白名单列表,格式: ["platform:type:id", ...]
|
||
# 示例: ["qq:group:123456", "qq:private:7891011"]
|
||
s4u_whitelist_chats = []
|
||
# 黑名单列表,格式同上
|
||
s4u_blacklist_chats = []
|
||
|
||
[affinity_flow]
|
||
enable_normal_mode = true # 是否启用 Normal 聊天模式。启用后,在专注模式回复后会自动切换,并根据兴趣度决定是否回复,以实现更快速的回复。
|
||
# 兴趣评分系统参数
|
||
reply_action_interest_threshold = 0.75 # 回复动作兴趣阈值
|
||
non_reply_action_interest_threshold = 0.65 # 非回复动作兴趣阈值
|
||
|
||
# 语义兴趣度评分优化参数
|
||
use_batch_scoring = true # 是否启用批处理评分模式,适合高频群聊场景
|
||
batch_size = 3 # 批处理大小,达到后立即处理
|
||
batch_flush_interval_ms = 30.0 # 批处理刷新间隔(毫秒),超过后强制处理
|
||
|
||
# 回复决策系统参数
|
||
no_reply_threshold_adjustment = 0.02 # 不回复兴趣阈值调整值
|
||
reply_cooldown_reduction = 2 # 回复后减少的不回复计数
|
||
max_no_reply_count = 5 # 最大不回复计数次数
|
||
|
||
# 回复后连续对话机制参数
|
||
enable_post_reply_boost = true # 是否启用回复后阈值降低机制,使bot在回复后更容易进行连续对话
|
||
post_reply_threshold_reduction = 0.1 # 回复后初始阈值降低值
|
||
post_reply_boost_max_count = 3 # 回复后阈值降低的最大持续次数
|
||
post_reply_boost_decay_rate = 0.5 # 每次回复后阈值降低衰减率(0-1,越小衰减越快)
|
||
|
||
# 综合评分权重
|
||
keyword_match_weight = 0.5 # 兴趣关键词匹配度权重
|
||
mention_bot_weight = 0.3 # 提及bot分数权重
|
||
relationship_weight = 0.2 # 人物关系分数权重
|
||
|
||
# 提及bot相关参数
|
||
mention_bot_adjustment_threshold = 0.5 # 提及bot后的调整阈值
|
||
# 强提及(被@、被回复、私聊)和弱提及(文本匹配名字/别名)使用不同分值
|
||
strong_mention_interest_score = 2.0 # 强提及的兴趣分(被@、被回复、私聊)
|
||
weak_mention_interest_score = 0.8 # 弱提及的兴趣分(文本匹配bot名字或别名)
|
||
base_relationship_score = 0.3 # 基础人物关系分
|
||
|
||
[proactive_thinking] # 主动思考(主动发起对话)功能配置 - 用于群聊和私聊(当KFC关闭时)
|
||
# 详细配置说明请参考:docs/proactive_thinking_config_guide.md
|
||
|
||
# --- 总开关 ---
|
||
enable = true # 是否启用主动发起对话功能
|
||
|
||
# --- 间隔配置 ---
|
||
base_interval = 1800 # 基础触发间隔(秒),默认30分钟
|
||
min_interval = 600 # 最小触发间隔(秒),默认10分钟。兴趣分数高时会接近此值
|
||
max_interval = 7200 # 最大触发间隔(秒),默认2小时。兴趣分数低时会接近此值
|
||
|
||
# --- 动态调整配置 ---
|
||
use_interest_score = true # 是否根据兴趣分数动态调整间隔。关闭则使用固定base_interval
|
||
interest_score_factor = 2.0 # 兴趣分数影响因子。公式: interval = base * (factor - score)
|
||
|
||
# --- 黑白名单配置 ---
|
||
whitelist_mode = false # 是否启用白名单模式。启用后只对白名单中的聊天流生效
|
||
blacklist_mode = false # 是否启用黑名单模式。启用后排除黑名单中的聊天流
|
||
|
||
whitelist_private = [] # 私聊白名单,格式: ["qq:12345:private"]
|
||
whitelist_group = [] # 群聊白名单,格式: ["qq:123456:group"]
|
||
blacklist_private = [] # 私聊黑名单,格式: ["qq:12345:private"]
|
||
blacklist_group = [] # 群聊黑名单,格式: ["qq:999999:group"]
|
||
|
||
# --- 兴趣分数阈值 ---
|
||
min_interest_score = 0.0 # 最低兴趣分数阈值,低于此值不会主动思考
|
||
max_interest_score = 1.0 # 最高兴趣分数阈值,高于此值不会主动思考
|
||
|
||
# --- 时间策略配置 ---
|
||
enable_time_strategy = false # 是否启用时间策略(根据时段调整频率)
|
||
quiet_hours_start = "00:00" # 安静时段开始时间,格式: "HH:MM"
|
||
quiet_hours_end = "07:00" # 安静时段结束时间,格式: "HH:MM"
|
||
active_hours_multiplier = 0.7 # 活跃时段间隔倍数,<1表示更频繁,>1表示更稀疏
|
||
|
||
# --- 冷却与限制 ---
|
||
reply_reset_enabled = true # bot回复后是否重置定时器
|
||
topic_throw_cooldown = 3600 # 抛出话题后的冷却时间(秒)
|
||
max_daily_proactive = 0 # 每个聊天流每天最多主动发言次数,0表示不限制
|
||
|
||
# --- 决策权重配置 ---
|
||
do_nothing_weight = 0.4 # do_nothing动作的基础权重
|
||
simple_bubble_weight = 0.3 # simple_bubble动作的基础权重
|
||
throw_topic_weight = 0.3 # throw_topic动作的基础权重
|
||
|
||
# --- 调试与监控 ---
|
||
enable_statistics = true # 是否启用统计功能
|
||
log_decisions = false # 是否记录每次决策的详细日志
|
||
|
||
# ==================== Kokoro Flow Chatter (心流聊天器) 配置 ====================
|
||
# KFC是专为私聊设计的深度情感交互处理器。
|
||
# 注意:这是一个可选的聊天模式,关闭后私聊将由默认的AFC处理(使用上面的proactive_thinking配置)。
|
||
# 核心理念:KFC不是独立人格,它复用全局的人设、情感框架和回复模型。
|
||
|
||
[kokoro_flow_chatter]
|
||
# --- 总开关 ---
|
||
# 开启后,KFC将接管所有私聊消息;关闭后,私聊消息将由AFC处理。
|
||
enable = true
|
||
|
||
# --- 工作模式 ---
|
||
# 可选值: "unified"(统一模式)或 "split"(分离模式)
|
||
# unified: 单次LLM调用完成思考和回复生成,类似传统聊天方式,响应更快
|
||
# split: Planner + Replyer两次LLM调用,先规划再生成回复,控制更精细
|
||
mode = "split"
|
||
|
||
# --- 核心行为配置 ---
|
||
max_wait_seconds_default = 300 # 默认的最大等待秒数(AI发送消息后愿意等待用户回复的时间)
|
||
enable_continuous_thinking = true # 是否在等待期间启用心理活动更新
|
||
|
||
# --- 等待策略 ---
|
||
[kokoro_flow_chatter.waiting]
|
||
default_max_wait_seconds = 300 # LLM 未给出等待时间时的默认值
|
||
min_wait_seconds = 30 # 允许的最短等待时间,防止太快打扰用户
|
||
max_wait_seconds = 1800 # 允许的最长等待时间(秒)
|
||
wait_duration_multiplier = 1.0 # 对 LLM 给出的等待时间应用的倍率(>1 放大,<1 缩短)
|
||
max_consecutive_timeouts = 3 # 连续等待超时达到该次数后,强制不再继续等待(0 表示不限制)
|
||
|
||
# --- 私聊专属主动思考配置 ---
|
||
# 注意:这是KFC专属的主动思考配置,只有当KFC启用时才生效。
|
||
# 它旨在模拟更真实、情感驱动的互动,而非简单的定时任务。
|
||
# 「主动思考」是「想一想要不要联系对方」,不是「到时间就发消息」。
|
||
# 她可能决定说些什么,也可能决定「算了,不打扰了」。
|
||
[kokoro_flow_chatter.proactive_thinking]
|
||
enabled = true # 是否启用KFC的私聊主动思考。
|
||
|
||
# 1. 沉默触发器:当感到长久的沉默时,她可能会想说些什么。
|
||
silence_threshold_seconds = 7200 # 用户沉默超过此时长(秒),可能触发主动思考(默认2小时)。
|
||
|
||
# 2. 关系门槛:她不会对不熟悉的人过于主动。
|
||
min_affinity_for_proactive = 0.3 # 需要达到最低好感度,她才会开始主动关心。
|
||
|
||
# 3. 频率呼吸:为了避免打扰,她的关心总是有间隔的。
|
||
min_interval_between_proactive = 1800 # 两次主动思考之间的最小间隔(秒,默认30分钟)。
|
||
|
||
# 4. 勿扰时段:在这个时间范围内,不会触发主动思考(避免深夜打扰用户)。
|
||
# 格式为 "HH:MM",使用24小时制。如果 start > end,表示跨越午夜(如 23:00 到 07:00)。
|
||
quiet_hours_start = "23:00" # 勿扰开始时间
|
||
quiet_hours_end = "07:00" # 勿扰结束时间
|
||
|
||
# 5. 触发概率:每次检查时主动发起的概率,用于避免过于频繁打扰。
|
||
trigger_probability = 0.3 # 0.0~1.0,默认30%概率
|