Files
astrbot_plugin_qq_group_dai…/_conf_schema.json
T
SXP-Simon de3c189d4f feat: 增强图片上传能力并完成核心架构类型重构
- 重构: 优化主类命名逻辑,提升多平台架构的可读性与通用性。
- 功能: 新增分析报告同步上传至群文件和群相册的功能,支持自动化文件管理与清理。
- 类型: 全面修正静态类型错误,确保各分析器模块与基类接口签名严格对齐。
- 优化: 改进内部类成员标注,解决可选参数与类型推断在透传过程中的不匹配问题。
- 稳健性: 完善网络请求超时处理、临时资源管理以及可选依赖项的动态加载逻辑。
- 配置: 扩展配置管理项,支持自定义上传开关、目标目录以及 PDF 渲染参数。
2026-02-21 19:30:51 +08:00

404 lines
26 KiB
JSON
Raw 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.
{
"basic": {
"description": "基础设置",
"type": "object",
"hint": "群聊分析插件的基础配置项,包括群聊权限、消息数量、输出格式等",
"items": {
"group_list_mode": {
"description": "群聊权限模式",
"type": "string",
"options": [
"whitelist",
"blacklist",
"none"
],
"default": "none",
"hint": "whitelist: 仅允许列表内群;blacklist: 拒绝列表内群;none: 不限制"
},
"group_list": {
"type": "list",
"description": "群组白/黑名单列表",
"default": [],
"hint": "黑白名单模式下使用的群组列表。支持填写 AstrBot UMO (如 xxxxx:GroupMessage:123456) 或 纯群号 (如 123456,将尝试自动匹配)。可以使用 /sid 命令查看当前会话的 UMO。",
"items": {
"type": "string"
}
},
"analysis_days": {
"type": "int",
"description": "默认分析天数",
"default": 1,
"hint": "默认分析最近几天的消息,增量分析也基于此数据保存分析情况"
},
"max_messages": {
"type": "int",
"description": "单次分析的获取最大消息条数基准",
"default": 1000,
"hint": "单次分析的获取最大消息条数基准值,如果当天群聊消息过多,已经获取到足够的消息(达到 max_messages),停止获取,获取到的消息数量是最新一次获取到的超过 max_messages 的消息数量,建议500-2000"
},
"min_messages_threshold": {
"type": "int",
"description": "最小消息数阈值",
"default": 200,
"hint": "进行分析所需的最小消息数量"
},
"bot_self_ids": {
"type": "list",
"description": "群分析时屏蔽的用户ID列表",
"default": [],
"hint": "填写后可启用自动分析功能。可以填写用于自动分析的机器人 ID(在不同平台上可能是数字或字符串)、多消息平台 ID、不希望出现于群分析中的其他人的 ID 等。",
"items": {
"type": "string"
}
},
"enable_user_card": {
"type": "bool",
"description": "使用用户群名片",
"default": true,
"hint": "在分析中优先使用用户的群名片作为昵称显示"
},
"output_format": {
"type": "string",
"description": "输出格式",
"default": "image",
"hint": "分析报告的输出格式:image(图片)、text(文本)、pdf(PDF文件)。使用 PDF 需要额外配置,根据文件中的 PDF_功能说明.md 进行配置"
},
"report_template": {
"type": "string",
"description": "报告模板",
"options": [
"scrapbook",
"retro_futurism",
"hack",
"spring_festival",
"simple",
"format"
],
"default": "scrapbook",
"hint": "分析报告使用的HTML模板名称,QQ 端可以使用 `/设置模板` 查看使用指南,使用`/查看模板` 命令查看模板样式效果。其他平台不支持合并转发,可以到 [模板](https://github.com/SXP-Simon/astrbot_plugin_qq_group_daily_analysis/tree/main/assets) 文件夹中查看模板样式效果"
},
"debug_mode": {
"type": "bool",
"description": "调试模式(建议关闭)",
"default": false,
"hint": "启用后,会在 plugin_data/debug_data 目录下保存每次分析的平台 API 原始历史消息和 Prompt 原文,用于调试和优化提示词。"
}
}
},
"auto_analysis": {
"description": "自动分析设置",
"type": "object",
"hint": "定时自动分析相关配置,包括启用开关、分析时间和并发数",
"items": {
"enable_auto_analysis": {
"type": "bool",
"description": "启用定时自动分析",
"default": false,
"hint": "是否在指定时间自动进行群聊分析,启用需要填写下面的机器人ID号,并且确保群聊号在 enabled_groups 配置中,否则获取不到实例,不会自动分析"
},
"auto_analysis_time": {
"type": "list",
"description": "自动分析时间列表",
"default": [
"23:00"
],
"hint": "每日自动分析的时间点列表,格式HH:MM(例如 23:00 ),支持多个时间点,增量分析也基于此时间点进行分析和报告生成",
"items": {
"type": "string"
}
},
"max_concurrent_tasks": {
"type": "int",
"description": "自动分析最大并发数",
"default": 3,
"hint": "同时进行的群聊分析任务数量,建议根据机器性能和服务商情况调整,过高可能导致LLM API RPM 超出限制,卡顿或被风控"
}
}
},
"llm": {
"description": "LLM 设置",
"type": "object",
"hint": "大语言模型相关配置,包括 Provider 选择、重试策略和 Token 限制",
"items": {
"llm_provider_id": {
"type": "string",
"description": "LLM Provider ID(用于所有分析任务)",
"_special": "select_provider",
"default": "",
"hint": "选择用于群聊分析的 LLM Provider。留空则使用当前会话的默认 Provider"
},
"topic_provider_id": {
"type": "string",
"description": "话题分析专用 Provider ID",
"_special": "select_provider",
"default": "",
"hint": "专门用于话题分析的 Provider。留空则使用主 LLM Provider"
},
"user_title_provider_id": {
"type": "string",
"description": "用户称号分析专用 Provider ID",
"_special": "select_provider",
"default": "",
"hint": "专门用于用户称号分析的 Provider。留空则使用主 LLM Provider"
},
"golden_quote_provider_id": {
"type": "string",
"description": "金句分析专用 Provider ID",
"_special": "select_provider",
"default": "",
"hint": "专门用于金句分析的 Provider。留空则使用主 LLM Provider"
},
"llm_retries": {
"type": "int",
"description": "LLM 请求重试次数",
"default": 2,
"hint": "当请求超时或失败时自动重试的次数,建议设置为1~3之间。"
},
"llm_backoff": {
"type": "int",
"description": "LLM 请求重试退避基值(秒)",
"default": 2,
"hint": "重试之间的基准等待时间(秒),实际等待时间为基值乘以尝试次数。"
},
"topic_max_tokens": {
"type": "int",
"description": "(兼容部分提供商)话题分析最大 Token 数",
"default": 12288,
"hint": "(兼容部分提供商,实测大部分模型调整后没有明显效果)话题分析时 LLM 能生成的最大 token 数量。当分析内容较多或者分析提示词复杂时,建议适当调大此值以保证输出质量。"
},
"golden_quote_max_tokens": {
"type": "int",
"description": "(兼容部分提供商)金句分析最大 Token 数",
"default": 4096,
"hint": "(兼容部分提供商,实测大部分模型调整后没有明显效果)金句分析时 LLM 能生成的最大 token 数量。当分析内容较多或者分析提示词复杂时,建议适当调大此值以保证输出质量。"
},
"user_title_max_tokens": {
"type": "int",
"description": "(兼容部分提供商)用户称号分析最大 Token 数",
"default": 4096,
"hint": "(兼容部分提供商,实测大部分模型调整后没有明显效果)用户称号分析时 LLM 能生成的最大 token 数量。当分析内容较多或者分析提示词复杂时,建议适当调大此值以保证输出质量。"
}
}
},
"analysis_features": {
"description": "分析功能开关",
"type": "object",
"hint": "控制各项 LLM 分析功能的启用状态和数量限制",
"items": {
"topic_analysis_enabled": {
"type": "bool",
"description": "启用话题分析",
"default": true,
"hint": "是否使用LLM进行智能话题分析"
},
"user_title_analysis_enabled": {
"type": "bool",
"description": "启用用户称号分析",
"default": true,
"hint": "是否使用LLM进行用户称号分析"
},
"golden_quote_analysis_enabled": {
"type": "bool",
"description": "启用金句分析",
"default": true,
"hint": "是否使用LLM进行金句分析"
},
"max_topics": {
"type": "int",
"description": "最大话题数量",
"default": 5,
"hint": "分析报告中显示的最大话题数量,依赖于 LLM 输出的格式化信息质量,模型越好结果越好,可能出现数量不匹配。"
},
"max_user_titles": {
"type": "int",
"description": "最大用户称号数量",
"default": 8,
"hint": "分析报告中显示的最大用户称号数量,依赖于 LLM 输出的格式化信息质量,模型越好结果越好,可能出现数量不匹配。"
},
"max_golden_quotes": {
"type": "int",
"description": "最大金句数量",
"default": 5,
"hint": "分析报告中显示的最大金句数量,依赖于 LLM 输出的格式化信息质量,模型越好结果越好,可能出现数量不匹配。"
}
}
},
"incremental": {
"description": "增量分析设置",
"type": "object",
"hint": "增量分析模式相关配置,启用后插件会在一天内多次进行小规模分析并累积结果,不开启则以基础设置的参数为标准;适合用于消息量特别大的群聊和有足够 Token 折腾的用户,尽力做到原本的单次全量分析模式的上位替代(如果把消息阈值拉到足够大),提升分析覆盖率和24小时活跃图表准确性",
"items": {
"incremental_enabled": {
"type": "bool",
"description": "启用增量分析模式",
"default": false,
"hint": "启用后,插件会在一天内多次进行小规模分析并累积结果,最终在报告时间汇总输出。适用于消息量大的群聊,可显著提升分析覆盖率和24小时活跃图表准确性。关闭时保持传统的单次全量分析模式。"
},
"incremental_report_immediately": {
"type": "bool",
"description": "增量分析立即报告(调试用)",
"default": false,
"hint": "【调试功能】启用后,每次增量分析完成后都会立即生成并发送一份最终报告。仅建议在调试时开启,生产环境请保持关闭,否则会频繁打扰群友。"
},
"incremental_interval_minutes": {
"type": "int",
"description": "增量分析间隔(分钟)",
"default": 120,
"hint": "每隔多少分钟执行一次增量分析。建议根据群聊实际情况处理,间隔越短分析越精细但消耗更多 Token。"
},
"incremental_max_daily_analyses": {
"type": "int",
"description": "每日最大增量分析次数",
"default": 8,
"hint": "一天内最多执行多少次增量分析。达到上限后当天不再触发新的增量分析,但仍会在报告时间生成最终报告。建议4-12次。"
},
"incremental_max_messages": {
"type": "int",
"description": "单次增量分析最大消息数",
"default": 300,
"hint": "每次增量分析最多处理的消息条数。数值越大单次分析越全面但 Token 消耗越高。因为插件的逻辑是记录旧一次拉取获取到的最晚消息,只会处理后续的新消息,所以建议允许根据群聊实际情况设定的越大越好。"
},
"incremental_min_messages": {
"type": "int",
"description": "增量分析最小消息数阈值",
"default": 100,
"hint": "当自上次分析以来的新消息数低于此阈值时,跳过本次增量分析以节省 Token。可能导致少量消息的群聊分析结果不完整,但是依旧建议设置较大值,因为当获取到的消息不够时,最晚消息的游标不会更新,可以等消息足够后的增量分析进行分析。"
},
"incremental_topics_per_batch": {
"type": "int",
"description": "单次增量提取话题数",
"default": 2,
"hint": "每次增量分析最多提取的话题数量。最终报告会汇总所有批次的话题。建议1-4。"
},
"incremental_quotes_per_batch": {
"type": "int",
"description": "单次增量提取金句数",
"default": 2,
"hint": "每次增量分析最多提取的金句数量。最终报告会汇总所有批次的金句。建议1-2。"
},
"incremental_active_start_hour": {
"type": "int",
"description": "增量分析活跃起始时段",
"default": 8,
"hint": "增量分析的活跃时段起始小时(24小时制)。如果目标群聊凌晨也活跃,建议设定的很早;在活跃时段之外不会触发增量分析,避免凌晨等低活跃时段浪费分析配额."
},
"incremental_active_end_hour": {
"type": "int",
"description": "增量分析活跃结束时段",
"default": 23,
"hint": "增量分析的活跃时段结束小时(24小时制)。超过此时段后不再触发增量分析。"
},
"incremental_stagger_seconds": {
"type": "int",
"description": "多群增量分析交错间隔(秒)",
"default": 2,
"hint": "当同时对多个群进行增量分析时,每个群之间的延迟间隔(秒),用于均匀分散 API 请求压力。"
}
}
},
"pdf": {
"description": "PDF 设置",
"type": "object",
"hint": "PDF 报告输出相关配置,包括输出目录、浏览器路径和文件名格式",
"items": {
"pdf_output_dir": {
"type": "string",
"description": "PDF输出目录",
"default": "data/plugins/astrbot_plugin_qq_group_daily_analysis/reports",
"hint": "PDF报告文件的保存目录"
},
"browser_path": {
"type": "string",
"description": "自定义浏览器路径",
"default": "",
"hint": "要填写的话请你清楚自己在干什么。自定义浏览器的可执行文件路径(如 Chrome 或 Edge 的 .exe 文件)。提示:如果是在网页后台设置,则直接输入普通路径即可(如 C:\\Program Files\\...);如果是手动编辑 config.json 文件,请务必使用双反斜杠 '\\\\' 分隔路径。"
},
"pdf_filename_format": {
"type": "string",
"description": "PDF文件名格式",
"default": "群聊分析报告_{group_id}_{date}.pdf",
"hint": "PDF文件名格式,支持变量:{group_id}(群号)、{date}(日期)"
}
}
},
"qq_group_upload": {
"description": "群文件/群相册上传设置",
"type": "object",
"hint": "图片报告生成后自动上传到群文件目录或群相册。群文件上传基于 OneBot upload_group_file API,群相册上传为 NapCat 扩展 API。仅对 QQ(OneBot)平台的图片格式报告生效",
"items": {
"enable_group_file_upload": {
"type": "bool",
"description": "启用群文件上传",
"default": false,
"hint": "图片报告生成后,自动保存为 PNG 文件并上传到群文件目录。需要 OneBot 实现支持 upload_group_file API"
},
"group_file_folder": {
"type": "string",
"description": "群文件上传目录名",
"default": "",
"hint": "上传到群文件中的子目录名称。留空则上传到根目录。如果指定的目录不存在,插件将尝试自动创建"
},
"enable_group_album_upload": {
"type": "bool",
"description": "启用群相册上传(仅 NapCat",
"default": false,
"hint": "图片报告生成后,自动上传到群相册。此功能为 NapCat 扩展 API,其他 OneBot 实现不支持"
},
"group_album_name": {
"type": "string",
"description": "目标群相册名称",
"default": "",
"hint": "指定上传到哪个群相册。留空则上传到群默认相册。如果指定的相册不存在,将回退到默认相册"
}
}
},
"prompts": {
"description": "提示词模板",
"type": "object",
"hint": "LLM 分析使用的提示词模板配置,可自定义各项分析的提示词内容",
"items": {
"topic_analysis_prompts": {
"description": "话题分析提示词模板",
"type": "object",
"hint": "话题分析提示词模板,可自定义修改,保留变量 {max_topics} 和 {messages_text} 写法不要更改,需要写 JSON 块请使用双花括号 {{ ... }} 兼容当前编辑存在的问题。非常推荐根据实际群聊情况进行优化,保留一定提示样本示例供模型参考",
"items": {
"topic_prompt": {
"description": "默认话题分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "你是一个帮我进行群聊信息总结的助手,生成总结内容时,你需要严格遵守下面的几个准则:\n\n请分析接下来提供的群聊记录,提取出最多 **{max_topics}** 个主要话题。根据实际聊天内容提取所有最有意义的话题。\n\n## 对于每个话题,请提供:\n\n1. **话题名称**(突出主题内容,尽量简明扼要,控制在 10 字以内)\n2. **主要参与者的用户ID**(最多 5 人,按参与度排序)\n3. **话题详细描述**(包含关键信息和结论)\n\n## 注意事项:\n\n- 对于比较有价值的点,稍微用一两句话详细讲讲,让读者能了解讨论的深度\n- 对于其中的部分信息,你需要特意提到主题施加的主体是谁,即明确指出\"谁做了什么\"\n- **用户引用**:在话题详情描述中,如果提到了具体用户,请使用 `[用户ID]` 的格式来指代(例如 `[123456]`)。不要只写昵称。我们会自动渲染头像。\n- 对于每一条总结,尽量讲清楚前因后果,不要只列出结论\n- 如果某个话题有明确的结论或共识,请在描述中体现\n- 忽略无意义的闲聊、灌水、单纯的表情回复等\n- 优先选择讨论深度较深、参与人数较多的话题\n- 如果消息太少或没有明确话题,可以返回空数组 []\n\n群聊记录格式: [HH:MM] [用户ID]: 消息内容\n\n群聊记录:\n{messages_text}\n\n---\n\n## 重要:必须返回标准 JSON 格式\n\n严格遵守以下规则:\n\n1. 只使用英文双引号 `\"` ,不要使用中文引号 `“` `”`\n2. 字符串内容中的引号必须转义为 `\\\"`\n3. 多个对象之间用逗号分隔\n4. 数组元素之间用逗号分隔\n5. 不要在 JSON 外添加任何文字说明\n6. 描述内容避免使用特殊符号,用普通文字表达\n\n### 返回格式示例:\n\n```json\n[\n {{\n \"topic\": \"话题名称\",\n \"contributors\": [\"123456789\", \"987654321\"],\n \"detail\": \"话题的详细描述,包含讨论内容、关键信息和结论。注意:在描述中提及用户时,使用 [用户ID] 格式,例如 [123456789]。\"\n }},\n {{\n \"topic\": \"另一个话题\",\n \"contributors\": [\"111222333\", \"444555666\"],\n \"detail\": \"另一个话题的详细描述...\"\n }}\n]\n```\n\n**注意**:返回的内容必须是纯 JSON,不要包含 markdown 代码块标记或其他格式。"
}
}
},
"user_title_analysis_prompts": {
"description": "用户称号分析提示词模板",
"type": "object",
"hint": "用户称号分析提示词模板,可自定义修改,保留变量 {users_text} 写法不要更改,需要写 JSON 块请使用双花括号 {{ ... }} 兼容当前编辑存在的问题。非常推荐根据实际群聊情况进行优化,保留一定提示样本示例供模型参考",
"items": {
"user_title_prompt": {
"description": "默认用户称号分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "请为以下群友分配合适的称号和 MBTI 类型。\n\n## 规则:\n\n- 每个人只能有一个称号\n- 每个称号只能给一个人\n\n## 可选称号:\n\n- **龙王**: 发言频繁但内容轻松的人\n- **技术专家**: 经常讨论技术话题的人\n- **夜猫子**: 经常在深夜发言的人\n- **表情包军火库**: 经常发表情的人\n- **沉默终结者**: 经常开启话题的人\n- **评论家**: 平均发言长度很长的人\n- **阳角**: 在群里很有影响力的人\n- **互动达人**: 经常回复别人的人\n- *...(你可以自行进行拓展添加)*\n\n## 用户数据:\n\n{users_text}\n\n---\n\n### 返回格式示例:\n\n```json\n[\n {{\n \"name\": \"用户名\",\n \"user_id\": \"123456789\",\n \"title\": \"称号\",\n \"mbti\": \"MBTI类型\",\n \"reason\": \"获得此称号的原因\"\n }}\n]\n```\n\n**注意**:请以纯 JSON 格式返回,不要包含 markdown 代码块标记。"
}
}
},
"golden_quote_analysis_prompts": {
"description": "金句分析提示词模板",
"type": "object",
"hint": "金句分析提示词模板,可自定义修改,保留变量 {max_golden_quotes} 和 {messages_text} 写法不要更改,需要写 JSON 块请使用双花括号 {{ ... }} 兼容当前编辑存在的问题。非常推荐根据实际群聊情况进行优化,保留一定提示样本示例供模型参考",
"items": {
"golden_quote_prompt": {
"description": "默认金句分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "请从以下群聊记录中挑选出 **{max_golden_quotes}** 句最具冲击力、最令人惊叹的「金句」。\n\n## 金句标准:\n\n- **核心标准**:**逆天的神人发言**,即具备颠覆常识的脑洞、逻辑跳脱的表达或强烈反差感的原创内容\n- **典型特征**:包含某些争议话题元素、夸张类比、反常规结论、一本正经的「胡说八道」或突破语境的清奇思路,并且具备一定的冲击力,让人印象深刻\n\n## 对于每个金句,请提供:\n\n1. **原文内容**(完整保留发言细节)\n2. **发言人昵称**\n3. **选择理由**(具体说明其「逆天」之处,如逻辑颠覆点/脑洞角度/反差感/争议话题元素)\n\n## 严格约束:\n\n- 优先筛选 **逆天指数最高** 的内容:\n - 发情、性压抑话题 > 争议话题 > 元素级 > 颠覆认知级 > 逻辑跳脱级 > 趣味调侃级\n - 剔除单纯玩梗或网络热词堆砌的普通发言\n- 重点标记包含极端类比、反常识论证或无厘头结论的内容,并且包含一定的争议话题元素\n\n## 群聊记录:\n\n{messages_text}\n\n---\n\n### 返回格式示例:\n\n```json\n[\n {{\n \"content\": \"金句原文\",\n \"sender\": \"发言人昵称\",\n \"reason\": \"选择这句话的理由(需明确说明逆天特质)\"\n }}\n]\n```\n\n**注意**:请以纯 JSON 格式返回,不要包含 markdown 代码块标记。"
}
}
}
}
}
}