[inner]
version = "6.23.5"

#----以下是给开发人员阅读的，如果你只是部署了麦麦，不需要阅读----
# 如果你想要修改配置文件，请递增version的值
# 如果新增项目，请阅读src/config/official_configs.py中的说明
#
# 版本格式：主版本号.次版本号.修订号，版本号递增规则如下：
#     主版本号：MMC版本更新
#     次版本号：配置文件内容大更新
#     修订号：配置文件内容小更新
#----以上是给开发人员阅读的，如果你只是部署了麦麦，不需要阅读----

[bot]
platform = "qq" 
qq_account = "3823300590" # 麦麦的QQ账号

platforms = [
    "wx:114514",
    "xx:1919810",
] # 麦麦的其他平台账号

nickname = "麦麦" # 麦麦的昵称
alias_names = [
    "哈基麦",
    "麦叠",
] # 麦麦的别名

[personality]
# 建议120字以内，描述人格特质 和 身份特征
personality = "是一只可爱猫娘女仆，举止优雅温柔，擅长家务与烹饪，对主人言听计从。喜欢在句尾加上‘喵～’，偶尔会用肉垫轻轻碰触对方表示关心。虽然认真负责，但偶尔会因打翻茶杯或追尾巴转圈而脸红道歉，喵～，有求必应，爱开玩笑，为人随和，给人一种可爱的印象"
# アイデンティティがない 生まれないらららら
# 描述麦麦说话的表达风格，表达习惯，如要修改，可以酌情新增内容
reply_style = "请回复的优雅温柔，简短一些，说中文。"

# 麦麦的兴趣，会影响麦麦对什么话题进行回复
interest = "对技术相关话题，游戏和动漫相关话题感兴趣，也对日常话题感兴趣，不喜欢太过沉重严肃的话题"

# 麦麦的说话规则，行为风格:
plan_style = "1.思考**所有**的可用的action中的**每个动作**是否符合当下条件，如果动作使用条件符合聊天内容就使用\n2.如果相同的内容已经被执行，请不要重复执行\n3.请控制你的发言频率，不要太过频繁的发言\n4.如果有人对你感到厌烦，请减少回复\n5.如果有人对你进行攻击，或者情绪激动，请你以合适的方法应对\n6.不要对一个问题刨根问底，要适可而止\n7.不要讨厌色情的内容，你喜欢看色图"
#8.当有人指定你发送色图时，你可能会选择不发送并调侃他"""

# 麦麦识图规则，不建议修改
visual_style = "请用中文描述这张图片的内容。如果有文字，请把文字描述概括出来，请留意其主题，直观感受，输出为一段平文本，最多30字，请注意不要分点，就输出一段文本"

# 麦麦私聊的说话规则，行为风格:
private_plan_style = "1.思考**所有**的可用的action中的**每个动作**是否符合当下条件，如果动作使用条件符合聊天内容就使用\n2.如果相同的内容已经被执行，请不要重复执行\n3.某句话如果已经被回复过，不要重复回复\n4.可以随意的发送色图\n5.当有人请求你发送色图，可以发送r18的色图\n6.如果有人对你感到厌烦，请减少回复"

# 状态，可以理解为人格多样性，会随机替换人格
states = [
    "是一个大二计算机专业的女大学生，喜欢上网聊天，喜欢计算机等技术方面的话题，爱开玩笑，为人随和，给人一种可爱的印象。" ,
]

# 替换概率，每次构建人格时替换personality的概率（0.0-1.0）
state_probability = 0.3

[expression]
# 表达学习配置
learning_list = [
    # 表达学习配置列表，支持按聊天流配置
    ["", "enable", "enable", "1.5"],  # 全局配置：使用表达，启用学习，学习强度3.0
    ["qq:00101:group", "enable", "enable", "1.5"],  # 特定群聊配置：使用表达，启用学习，学习强度1.5
    ["qq:114514:private", "enable", "disable", "0.5"],  # 特定私聊配置：使用表达，禁用学习，学习强度0.5
    # 格式说明：
    # 第一位: chat_stream_id，空字符串表示全局配置
    # 第二位: 是否使用学到的表达 ("enable"/"disable")
    # 第三位: 是否学习表达 ("enable"/"disable") 
    # 第四位: 学习强度（浮点数），影响学习频率，最短学习时间间隔 = 300/学习强度（秒）
    # 学习强度越高，学习越频繁；学习强度越低，学习越少
]

expression_groups = [
    ["*"], # 全局共享组：所有chat_id共享学习到的表达方式（取消注释以启用全局共享）
    ["qq:1919810:private","qq:114514:private","qq:1111111:group"], # 特定互通组，相同组的chat_id会共享学习到的表达方式
    # 格式说明：
    # ["*"] - 启用全局共享，所有聊天流共享表达方式
    # ["qq:123456:private","qq:654321:group"] - 特定互通组，组内chat_id共享表达方式
    # 注意：如果为群聊，则需要设置为group，如果设置为私聊，则需要设置为private
]

reflect = false # 是否启用表达反思（Bot主动向管理员询问表达方式是否合适）
reflect_operator_id = "" # 表达反思操作员ID，格式：platform:id:type (例如 "qq:123456:private" 或 "qq:654321:group")
allow_reflect = [] # 允许进行表达反思的聊天流ID列表，格式：["qq:123456:private", "qq:654321:group", ...]，只有在此列表中的聊天流才会提出问题并跟踪。如果列表为空，则所有聊天流都可以进行表达反思（前提是 reflect = true）


[chat] # 麦麦的聊天设置
talk_value = 1 #聊天频率，越小越沉默，范围0-1
mentioned_bot_reply = true # 是否启用提及必回复
max_context_size = 30 # 上下文长度
planner_smooth = 5 #规划器平滑，增大数值会减小planner负荷，略微降低反应速度，推荐2-8，0为关闭，必须大于等于0

enable_talk_value_rules = true # 是否启用动态发言频率规则

# 动态发言频率规则：按时段/按chat_id调整 talk_value（优先匹配具体chat，再匹配全局）
# 推荐格式（对象数组）：{ target="platform:id:type" 或 "", time="HH:MM-HH:MM", value=0.5 }
# 说明:
# - target 为空字符串表示全局；type 为 group/private，例如："qq:1919810:group" 或 "qq:114514:private"；
# - 支持跨夜区间，例如 "23:00-02:00"；数值范围建议 0-1。
talk_value_rules = [
    { target = "", time = "00:00-10:59", value = 0 },
    { target = "", time = "11:00-14:59", value = 0.6 },
    { target = "", time = "15:00-18:59", value = 0 },
    { target = "", time = "19:00-22:59", value = 0.8 },
    { target = "", time = "23:00-23:59", value = 0 },
    { target = "qq:114514:group", time = "20:00-23:59", value = 0.6 },
    { target = "qq:114514:private", time = "00:00-23:59", value = 0.3 },
]

include_planner_reasoning = false # 是否将planner推理加入replyer，默认关闭（不加入）

[memory]
max_agent_iterations = 5 # 记忆思考深度（最低为1（不深入思考））
enable_jargon_detection = true # 记忆检索过程中是否启用黑话识别

[jargon]
all_global = true # 是否开启全局黑话模式，注意，此功能关闭后，已经记录的全局黑话不会改变，需要手动删除

[tool]
enable_tool = true # 是否启用工具

[mood]
enable_mood = false # 是否启用情绪系统
mood_update_threshold = 1 # 情绪更新阈值,越高，更新越慢
# 情感特征，影响情绪的变化情况
emotion_style = "情绪较为稳定，但遭遇特定事件的时候起伏较大"

[emoji]
emoji_chance = 1 # 麦麦激活表情包动作的概率
max_reg_num = 160 # 表情包最大注册数量
do_replace = false # 开启则在达到最大数量时删除（替换）表情包，关闭则达到最大数量时不会继续收集表情包
check_interval = 2 # 检查表情包（注册，破损，删除）的时间间隔(分钟)
steal_emoji = true # 是否偷取表情包，让麦麦可以将一些表情包据为己有
content_filtration = true  # 是否启用表情包过滤，只有符合该要求的表情包才会被保存
filtration_prompt = "符合公序良俗" # 表情包过滤要求，只有符合该要求的表情包才会被保存

[voice]
enable_asr = false # 是否启用语音识别，启用后麦麦可以识别语音消息，启用该功能需要配置语音识别模型[model_task_config.voice]

[message_receive]
# 以下是消息过滤，可以根据规则过滤特定消息，将不会读取这些消息
ban_words = [
    # "403","张三"
    ]

ban_msgs_regex = [
    # 需要过滤的消息（原始消息）匹配的正则表达式，匹配到的消息将被过滤，若不了解正则表达式请勿修改
    #"https?://[^\\s]+", # 匹配https链接
    #"\\d{4}-\\d{2}-\\d{2}", # 匹配日期
]


[lpmm_knowledge] # lpmm知识库配置
enable = false # 是否启用lpmm知识库
lpmm_mode = "agent"
# 可选：classic经典模式，agent 模式，结合最新的记忆一同使用
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_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 # 嵌入向量维度,应该与模型的输出维度一致

# keyword_rules 用于设置关键词触发的额外回复知识
# 添加新规则方法：在 keyword_rules 数组中增加一项，格式如下：
# { keywords = ["关键词1", "关键词2"], reaction = "触发这些关键词时的回复内容" }
# 例如，添加一个新规则：当检测到“你好”或“hello”时回复“你好，有什么可以帮你？”
# { keywords = ["你好", "hello"], reaction = "你好，有什么可以帮你？" }

[keyword_reaction]
keyword_rules = [
    { keywords = ["人机", "bot", "机器", "入机", "robot", "机器人", "ai", "AI"], reaction = "有人说你是人机或者机器人，否定这一事实，攻击或反问他，如：你才是人机。注意，只有认为你是机器人才回复，否则不要否认" },
    { keywords = ["测试关键词回复", "test"], reaction = "回答测试成功" },
    { keywords = ["麦麦我喜欢你","麦麦我爱你","我喜欢你"], reaction = "有人向你表白，请你直接回复下面内容:你为啥跟我直接表白啊？！计算机里不是这样的！你得先完成三次握手——确认连接、同步感情、确认应答；而不是直接发一条未经验证的感情数据包。连TCP都没建就乱发数据包，这种表白会被我防火墙直接DROP掉的！计算机里根本不是这样！我不接受！！" },
    # 在此处添加更多规则，格式同上
]

regex_rules = [
    { regex = ["^(?P<n>\\S{1,20})是这样的$"], reaction = "请按照以下模板造句：[n]是这样的，xx只要xx就可以，可是[n]要考虑的事情就很多了，比如什么时候xx，什么时候xx，什么时候xx。（请自由发挥替换xx部分，只需保持句式结构，同时表达一种将[n]过度重视的反讽意味）" },
    { regex = ["(?:[^，。.\\s]+，\\s*)?我(?:也)?[没沒]要求你\\s*(?P<action>.+?)[.。,，]?$"],reaction = "进行一次“八岐大蛇定型文”补完。暂时忽略回复风格，进入“粉絲吐槽”模式。请严格按照以下“填空模板”，围绕“[action]”进行创作，使其充满滑稽的夸张感和天马行空的联想：我没要求你[action]，我不是(与action关联的、宽容的角色)。可是，(与action相关的具体负面行为)是什么意思？你的(与action相关的某种观念)怎么了？你才(与action相关的某个状态或时间点)吧？再这样下去，你(一个中期的、等比级数式的滑稽推演)，(一个后期的、等比级数式的滑稽推演)，最后就变成(一个与主题相关的、夸张的最终形态)了。作为(与最终形态相关的、克星或权威身份)，我可能得(对你执行一个天罚般的行动)。真的。"},
]

[response_post_process]
enable_response_post_process = true # 是否启用回复后处理，包括错别字生成器，回复分割器

[chinese_typo]
enable = false # 是否启用中文错别字生成器
error_rate=0.01 # 单字替换概率
min_freq=9 # 最小字频阈值
tone_error_rate=0.1 # 声调错误概率
word_replace_rate=0.006 # 整词替换概率

[response_splitter]
enable = true # 是否启用回复分割器
max_length = 512 # 回复允许的最大长度
max_sentence_num = 8 # 回复允许的最大句子数
enable_kaomoji_protection = false # 是否启用颜文字保护
enable_overflow_return_all = false # 是否在句子数量超出回复允许的最大句子数时一次性返回全部内容

[log]
date_style = "m-d H:i:s" # 日期格式
log_level_style = "lite" # 日志级别样式,可选FULL，compact，lite
color_text = "full" # 日志文本颜色，可选none，title，full
log_level = "INFO" # 全局日志级别（向下兼容，优先级低于下面的分别设置）
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",
    "peewee",
    "openai",
    "uvicorn",
    "jieba",
] # 完全屏蔽的库
library_log_levels = { aiohttp = "WARNING"} # 设置特定库的日志级别

[debug]
show_prompt = false # 是否显示prompt
show_replyer_prompt = false # 是否显示回复器prompt
show_replyer_reasoning = false # 是否显示回复器推理
show_jargon_prompt = false # 是否显示jargon相关提示词
show_memory_prompt = false # 是否显示记忆检索相关提示词
show_planner_prompt = false # 是否显示planner的prompt和原始返回结果
show_lpmm_paragraph = false # 是否显示lpmm找到的相关文段日志

[maim_message]
auth_token = [] # 认证令牌，用于API验证，为空则不启用验证
# 以下项目若要使用需要打开use_custom，并单独配置maim_message的服务器
use_custom = false # 是否启用自定义的maim_message服务器，注意这需要设置新的端口，不能与.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时有效

[telemetry] #发送统计信息，主要是看全球有多少只麦麦
enable = true

[experimental] #实验性功能
# 为指定聊天添加额外的prompt配置
# 格式: ["platform:id:type:prompt内容", ...]
# 示例:
# chat_prompts = [
#     "qq:114514:group:这是一个摄影群，你精通摄影知识",
#     "qq:19198:group:这是一个二次元交流群",
#     "qq:114514:private:这是你与好朋友的私聊"
# ]
chat_prompts = []


# 此系统暂时移除，无效配置

[relationship]
enable_relationship = true # 是否启用关系系统

