Files
Mofox-Core/template/bot_config_template.toml
2025-12-16 16:10:13 +08:00

691 lines
36 KiB
TOML
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.

[inner]
version = "8.0.2"
#----以下是给开发人员阅读的如果你只是部署了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" # 表情包激活类型可选randomllm ; 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_enable_force_cleanup = true # 开启压力泄压(建议高频场景开启)
short_term_search_top_k = 5 # 搜索时返回的最大数量
short_term_decay_factor = 0.98 # 衰减因子
short_term_overflow_strategy = "transfer_all" # 短期记忆溢出策略
# "transfer_all": 一次性转移所有记忆到长期记忆,然后删除低重要性记忆(默认推荐)
# "selective_cleanup": 选择性清理,仅转移高重要性记忆,直接删除低重要性记忆
# 长期记忆层配置
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" # 日志级别样式,可选FULLcompactlite
color_text = "full" # 日志文本颜色可选nonetitlefull
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 # 非回复动作兴趣阈值
# 回复决策系统参数
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 # 是否在等待期间启用心理活动更新
# --- 自定义决策提示词 ---
# 类似于AFC的planner_custom_prompt_content允许用户自定义KFC的决策行为指导
# 在unified模式下会插入到完整提示词中影响整体思考和回复生成
# 在split模式下只会插入到planner提示词中影响决策规划不影响replyer的回复生成
# 留空则不生效
custom_decision_prompt = ""
# --- 提示词/上下文构建配置 ---
[kokoro_flow_chatter.prompt]
# 活动流格式(你们之间最近发生的事)
# - "narrative": 线性叙事(更自然,但信息密度较低,长时更容易丢细节)
# - "table": 结构化表格(更高信息密度、更利于模型对齐字段;推荐)
# - "both": 同时输出表格 + 叙事(对照/调试用token 更高)
activity_stream_format = "table"
# 活动流最多保留条数(越大越完整,但 token 越高)
max_activity_entries = 5
# 表格单元格/叙事单条的最大字符数(用于裁剪,避免某条过长拖垮上下文)
max_entry_length = 500
# --- 等待策略 ---
[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%概率