-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy path_conf_schema.json
More file actions
678 lines (678 loc) · 51.4 KB
/
_conf_schema.json
File metadata and controls
678 lines (678 loc) · 51.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
{
"basic": {
"description": "基础设置",
"type": "object",
"hint": "群聊分析插件的基础配置项,包括群聊权限、消息数量、输出格式等。注意:基础群权限是第一道门槛,不通过就不会进入定时/增量流程。",
"items": {
"group_list_mode": {
"description": "群聊权限模式",
"type": "string",
"options": [
"whitelist",
"blacklist",
"none"
],
"default": "none",
"hint": "先决定“哪些群可以用这个插件”。这是第一道门槛:不通过这里,后面的定时/增量都不会触发。whitelist=只允许列表里的群;blacklist=屏蔽列表里的群;none=所有群都可以。示例:whitelist + [\"onebot:GroupMessage:123456\"] 表示只有这个群能用。"
},
"group_list": {
"type": "list",
"description": "群组白/黑名单列表",
"default": [],
"hint": "要填的群列表。可以填完整会话ID(如 onebot:GroupMessage:123456)或只填群号(如 123456)。新手建议优先填完整会话ID,更不容易填错。可用 /sid 获取当前会话ID。",
"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": "输出格式",
"options": [
"image",
"text",
"html"
],
"default": "image",
"hint": "选择分析报告的输出方式:image(图片)、text(纯文本摘要)、html(可交互式网页文件)"
},
"report_template": {
"type": "string",
"description": "报告模板",
"options": [
"ATRI",
"scrapbook",
"retro_futurism",
"HatsuneMiku",
"hack",
"spring_festival",
"simple",
"format"
],
"default": "scrapbook",
"hint": "分析报告使用的HTML模板名称,QQ 端可以使用 `/设置模板` 查看使用指南,使用`/查看模板` 命令查看模板样式效果。其他平台不支持合并转发,可以到 [模板](https://github.com/SXP-Simon/astrbot_plugin_qq_group_daily_analysis/tree/main/assets) 文件夹中查看模板样式效果"
},
"profile_display_mode": {
"type": "string",
"description": "人格标签展示模式",
"options": [
"mbti",
"sbti",
"acgti"
],
"default": "mbti",
"hint": "只影响群友画像卡片的角色主题展示,不影响实际 MBTI 分析结果。mbti=原始 MBTI,sbti=映射为 SBTI 人格,acgti=映射为 ACGTI 角色。"
},
"profile_image_opacity": {
"type": "float",
"description": "人格背景图透明度",
"default": 0.12,
"hint": "建议 0.08~0.18,仅作为卡片底层装饰,避免遮挡正文。"
},
"profile_image_size_mode": {
"type": "string",
"description": "人格背景图尺寸模式",
"options": [
"contain",
"cover"
],
"default": "contain",
"hint": "建议默认 contain,减少角色图被裁切过多的问题。"
},
"profile_mapping_config": {
"type": "text",
"description": "人格映射配置(JSON)",
"editor_mode": true,
"editor_language": "json",
"default": "{\n \"mbti\": {\n \"INTJ\": {\n \"code\": \"INTJ\",\n \"name_zh\": \"建筑师\"\n },\n \"INTP\": {\n \"code\": \"INTP\",\n \"name_zh\": \"逻辑学家\"\n },\n \"ENTJ\": {\n \"code\": \"ENTJ\",\n \"name_zh\": \"指挥官\"\n },\n \"ENTP\": {\n \"code\": \"ENTP\",\n \"name_zh\": \"辩论家\"\n },\n \"INFJ\": {\n \"code\": \"INFJ\",\n \"name_zh\": \"提倡者\"\n },\n \"INFP\": {\n \"code\": \"INFP\",\n \"name_zh\": \"调停者\"\n },\n \"ENFJ\": {\n \"code\": \"ENFJ\",\n \"name_zh\": \"主人公\"\n },\n \"ENFP\": {\n \"code\": \"ENFP\",\n \"name_zh\": \"竞选者\"\n },\n \"ISTJ\": {\n \"code\": \"ISTJ\",\n \"name_zh\": \"物流师\"\n },\n \"ISFJ\": {\n \"code\": \"ISFJ\",\n \"name_zh\": \"守卫者\"\n },\n \"ESTJ\": {\n \"code\": \"ESTJ\",\n \"name_zh\": \"总经理\"\n },\n \"ESTP\": {\n \"code\": \"ESTP\",\n \"name_zh\": \"企业家\"\n },\n \"ISTP\": {\n \"code\": \"ISTP\",\n \"name_zh\": \"鉴赏家\"\n },\n \"ISFP\": {\n \"code\": \"ISFP\",\n \"name_zh\": \"探险家\"\n },\n \"ESFJ\": {\n \"code\": \"ESFJ\",\n \"name_zh\": \"执政官\"\n },\n \"ESFP\": {\n \"code\": \"ESFP\",\n \"name_zh\": \"表演者\"\n }\n },\n \"sbti\": {\n \"INTJ\": {\n \"code\": \"CTRL\",\n \"name_zh\": \"拿捏者\",\n \"asset_code\": \"CTRL\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/CTRL.png\"\n },\n \"INTP\": {\n \"code\": \"THIN-K\",\n \"name_zh\": \"思考者\",\n \"asset_code\": \"THIN-K\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/THIN-K.png\"\n },\n \"ENTJ\": {\n \"code\": \"BOSS\",\n \"name_zh\": \"领导者\",\n \"asset_code\": \"BOSS\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/BOSS.png\"\n },\n \"ENTP\": {\n \"code\": \"JOKE-R\",\n \"name_zh\": \"小丑\",\n \"asset_code\": \"JOKE-R\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/JOKE-R.jpg\"\n },\n \"INFJ\": {\n \"code\": \"LOVE-R\",\n \"name_zh\": \"多情者\",\n \"asset_code\": \"LOVE-R\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/LOVE-R.png\"\n },\n \"INFP\": {\n \"code\": \"SOLO\",\n \"name_zh\": \"孤儿\",\n \"asset_code\": \"SOLO\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/SOLO.png\"\n },\n \"ENFJ\": {\n \"code\": \"THAN-K\",\n \"name_zh\": \"感恩者\",\n \"asset_code\": \"THAN-K\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/THAN-K.png\"\n },\n \"ENFP\": {\n \"code\": \"GOGO\",\n \"name_zh\": \"行者\",\n \"asset_code\": \"GOGO\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/GOGO.png\"\n },\n \"ISTJ\": {\n \"code\": \"OH-NO\",\n \"name_zh\": \"哦不人\",\n \"asset_code\": \"OH-NO\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/OH-NO.png\"\n },\n \"ISTP\": {\n \"code\": \"POOR\",\n \"name_zh\": \"贫困者\",\n \"asset_code\": \"POOR\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/POOR.png\"\n },\n \"ESTJ\": {\n \"code\": \"SHIT\",\n \"name_zh\": \"愤世者\",\n \"asset_code\": \"SHIT\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/SHIT.png\"\n },\n \"ESTP\": {\n \"code\": \"WOC!\",\n \"name_zh\": \"握草人\",\n \"asset_code\": \"WOC\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/WOC.png\"\n },\n \"ISFJ\": {\n \"code\": \"MUM\",\n \"name_zh\": \"妈妈\",\n \"asset_code\": \"MUM\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/MUM.png\"\n },\n \"ISFP\": {\n \"code\": \"MALO\",\n \"name_zh\": \"吗喽\",\n \"asset_code\": \"MALO\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/MALO.png\"\n },\n \"ESFJ\": {\n \"code\": \"ATM-er\",\n \"name_zh\": \"送钱者\",\n \"asset_code\": \"ATM-er\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/ATM-er.png\"\n },\n \"ESFP\": {\n \"code\": \"SEXY\",\n \"name_zh\": \"尤物\",\n \"asset_code\": \"SEXY\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/sbti/SEXY.png\"\n }\n },\n \"acgti\": {\n \"INTJ\": {\n \"code\": \"MRTS-X\",\n \"name_zh\": \"Mortis\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/MRTS-X.png\"\n },\n \"INTP\": {\n \"code\": \"KNAN\",\n \"name_zh\": \"江户川柯南\"\n },\n \"ENTJ\": {\n \"code\": \"SAKI\",\n \"name_zh\": \"丰川祥子\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/SAKI.png\"\n },\n \"ENTP\": {\n \"code\": \"CHKA\",\n \"name_zh\": \"藤原千花\"\n },\n \"INFJ\": {\n \"code\": \"DLRS\",\n \"name_zh\": \"三角初华\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/DLRS.png\"\n },\n \"INFP\": {\n \"code\": \"BCHI\",\n \"name_zh\": \"后藤一里\"\n },\n \"ENFJ\": {\n \"code\": \"YCYO\",\n \"name_zh\": \"月见八千代\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/YCYO.png\"\n },\n \"ENFP\": {\n \"code\": \"HTMK\",\n \"name_zh\": \"初音未来\"\n },\n \"ISTJ\": {\n \"code\": \"MRTS\",\n \"name_zh\": \"若叶睦\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/MRTS.png\"\n },\n \"ISTP\": {\n \"code\": \"AYRE\",\n \"name_zh\": \"绫波丽\"\n },\n \"ESTJ\": {\n \"code\": \"MIKT\",\n \"name_zh\": \"御坂美琴\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/MIKT.png\"\n },\n \"ESTP\": {\n \"code\": \"ASKA\",\n \"name_zh\": \"明日香\"\n },\n \"ISFJ\": {\n \"code\": \"SOYO\",\n \"name_zh\": \"长崎爽世\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/SOYO.png\"\n },\n \"ISFP\": {\n \"code\": \"LTYI\",\n \"name_zh\": \"洛天依\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/LTYI.png\"\n },\n \"ESFJ\": {\n \"code\": \"ANON\",\n \"name_zh\": \"千早爱音\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/ANON.png\"\n },\n \"ESFP\": {\n \"code\": \"FRNA\",\n \"name_zh\": \"芙宁娜\",\n \"image\": \"https://fastly.jsdelivr.net/gh/SXP-Simon/profile_assets@main/acgti/characters/FRNA.png\"\n }\n }\n}",
"hint": "按 MBTI 覆盖当前展示模式的人格名称与图片地址。留空时自动使用插件内置默认映射和 manifest。插件不负责校验图片链接可访问性。"
},
"debug_mode": {
"type": "bool",
"description": "调试模式(建议关闭)",
"default": false,
"hint": "启用后,会在插件数据目录下的 debug_data 目录中保存每次分析的平台 API 原始历史消息和 Prompt 原文,用于调试和优化提示词。"
},
"enable_base64_image": {
"type": "bool",
"description": "图片传输使用 Base64 编码",
"default": true,
"hint": "启用后图片会被转为 Base64 编码传输。关闭后将直接传递文件路径或 URL 给 OneBot 实现端,适用于 go-cqhttp、Lagrange 等支持本地路径的实现,可降低内存占用。"
},
"enable_analysis_reply": {
"type": "bool",
"description": "发送文本/表情回复",
"default": false,
"hint": "开启后,/群分析 将通过发送文本消息提示进度;关闭(默认)则使用表情回应。"
}
}
},
"t2i_rendering": {
"description": "图片渲染策略",
"type": "object",
"hint": "配置 HTML 转图片的渲染参数。支持两轮尝试:第一轮优先保证质量,第二轮作为回退方案,建议使用更低的分辨率和质量以提高成功率。",
"items": {
"t2i_r1_type": {
"type": "string",
"description": "第一轮:图片格式",
"options": ["jpeg", "png"],
"default": "png",
"hint": "建议:PNG 格式无损但体积较大;JPEG 格式体积较小。"
},
"t2i_r1_quality": {
"type": "int",
"description": "第一轮:图片质量 (若为 JPEG)",
"default": 100,
"slider": {
"min": 1,
"max": 100,
"step": 1
},
"hint": "仅对 JPEG 格式生效。建议 80-100。"
},
"t2i_r1_device_scale": {
"type": "string",
"description": "第一轮:分辨率等级",
"options": ["normal", "high", "ultra"],
"default": "ultra",
"hint": "影响图片清晰度。normal=1.0x, high=1.3x, ultra=1.8x。高质量日报建议 ultra。"
},
"t2i_r1_timeout": {
"type": "int",
"description": "第一轮:渲染超时 (ms)",
"default": 50000,
"slider": {
"min": 30000,
"max": 180000,
"step": 5000
},
"hint": "单次渲染的最长等待时间。复杂页面建议调大。"
},
"t2i_r2_type": {
"type": "string",
"description": "第二轮 (回退):图片格式",
"options": ["jpeg", "png"],
"default": "jpeg",
"hint": "回退策略建议使用 jpeg 以减少渲染压力。"
},
"t2i_r2_quality": {
"type": "int",
"description": "第二轮 (回退):图片质量 (若为 JPEG)",
"default": 80,
"slider": {
"min": 1,
"max": 100,
"step": 1
},
"hint": "仅对 JPEG 格式生效。可以设置较低值以确保生成成功。"
},
"t2i_r2_device_scale": {
"type": "string",
"description": "第二轮 (回退):分辨率等级",
"options": ["normal", "high", "ultra"],
"default": "high",
"hint": "回退建议使用 high/normal 以降低复杂页面的内存消耗和超时概率。"
},
"t2i_r2_timeout": {
"type": "int",
"description": "第二轮 (回退):渲染超时 (ms)",
"default": 100000,
"slider": {
"min": 30000,
"max": 180000,
"step": 5000
},
"hint": "回退尝试通常针对复杂页面,建议设置更长的超时时间(如 100000ms+)。"
},
"t2i_font_source": {
"type": "string",
"description": "t2i 渲染环境切换",
"options": ["Mainland", "Overseas"],
"default": "Overseas",
"hint": "字体和静态资源的访问环境,内地(Mainland)、海外(Overseas),切换环境会自动应用下方对应的镜像站地址、语言标识(简体中文/繁体中文)及字体优先级。(实测 Overseas 也可以正常渲染简体中文)"
},
"t2i_mainland_google_fonts": {
"type": "string",
"description": "[内地] Google Fonts 镜像",
"default": "https://fonts.loli.net",
"hint": "内地环境下推荐使用 loli.net 或其他可访问镜像。"
},
"t2i_mainland_gstatic": {
"type": "string",
"description": "[内地] Gstatic 镜像",
"default": "https://gstatic.loli.net",
"hint": "内地环境下推荐使用 loli.net 或其他可访问镜像。"
},
"t2i_overseas_google_fonts": {
"type": "string",
"description": "[海外] Google Fonts 官方",
"default": "https://fonts.googleapis.com",
"hint": "海外环境通常直接使用官方地址即可。"
},
"t2i_overseas_gstatic": {
"type": "string",
"description": "[海外] Gstatic 官方",
"default": "https://fonts.gstatic.com",
"hint": "海外环境通常直接使用官方地址即可。"
}
}
},
"auto_analysis": {
"description": "定时分析设置",
"type": "object",
"hint": "配置每日自动分析的时间点和目标群聊范围。只有先通过基础群权限的群,才会在这里继续判断。",
"items": {
"auto_analysis_time": {
"type": "list",
"description": "自动分析时间列表",
"default": [
"23:00"
],
"hint": "每天几点自动出报告,格式是 HH:MM。可填多个时间,例如 [\"09:00\", \"21:30\"]。",
"items": {
"type": "string"
}
},
"scheduled_group_list_mode": {
"type": "string",
"description": "定时分析名单模式",
"options": [
"whitelist",
"blacklist"
],
"default": "whitelist",
"hint": "定时任务要作用到哪些群。whitelist=只跑下面列表里的群;blacklist=除了下面列表,其他都跑。注意:这里只对“已通过基础群权限”的群生效。"
},
"scheduled_group_list": {
"type": "list",
"description": "定时分析群列表",
"default": [],
"hint": "定时任务群列表。示例1:mode=whitelist + [\"onebot:GroupMessage:123456\"] => 只跑这个群。示例2:mode=blacklist + [\"onebot:GroupMessage:123456\"] => 这个群不跑,其他群跑。注意:whitelist + 空列表 = 不会开启定时任务。即使某群在增量名单里,只要不在定时白名单里,也不会自动触发。",
"items": {
"type": "string"
}
}
}
},
"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"
},
"quality_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": "重试之间的基准等待时间(秒),实际等待时间为基值乘以尝试次数。"
},
"enable_streaming_llm_call": {
"type": "bool",
"description": "启用流式 LLM 调用",
"default": false,
"hint": "默认关闭,使用原有非流式调用方式。开启后,插件将使用 AstrBot Provider 的流式接口并聚合结果,适用于仅支持 stream=true 的服务。"
}
}
},
"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进行金句分析"
},
"chat_quality_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 输出的格式化信息质量,模型越好结果越好,可能出现数量不匹配。"
},
"keep_original_persona": {
"description": "继承会话人设风格",
"type": "bool",
"default": false,
"hint": "【优先级2】开启后将自动尝试识别当前群聊会话(或对话)的人格设定。若该群已设置人设,则分析报告会尽量模拟该人设的口吻进行回复。注意:此开关在“强制使用插件指定人格”关闭时才会生效。"
},
"use_plugin_specific_persona": {
"description": "强制使用插件指定人格",
"type": "bool",
"default": false,
"hint": "【优先级1:核心开关】若开启,将完全忽略当前群聊的人格设定,统一强制使用下方选择的“插件指定人格 ID”进行分析。适用于希望全群分析保持某种统一固定风格(如特定的“记录员”人设)的情况。"
},
"plugin_specific_persona_id": {
"description": "插件指定人格 ID",
"type": "string",
"_special": "select_persona",
"default": "",
"hint": "当“强制使用插件指定人格”开启时,在此处选择系统中已定义的人设。若此处未选择,则仍会尝试识别全局默认人格。"
}
}
},
"incremental": {
"description": "增量分析设置",
"type": "object",
"hint": "增量分析通过在活跃时段分步提取摘要,能显著提高分析深度和覆盖率。这里仅决定“已通过前两关的群”是走增量还是普通模式。",
"items": {
"incremental_group_list_mode": {
"type": "string",
"description": "增量分析名单模式",
"options": [
"whitelist",
"blacklist"
],
"default": "whitelist",
"hint": "哪些群用“增量分析”。whitelist=只有列表里的群用增量;blacklist=除了列表外都用增量。没命中的群会走普通模式。注意:增量名单不负责放行群,只负责选模式。"
},
"incremental_group_list": {
"type": "list",
"description": "增量分析群列表",
"default": [],
"hint": "增量分析群列表。示例1:mode=whitelist + [\"onebot:GroupMessage:123456\"] => 只有这个群增量。示例2:mode=blacklist + [\"onebot:GroupMessage:123456\"] => 这个群不用增量,其他群用增量。注意:whitelist + 空列表 = 不启用增量。只有先通过基础群权限 + 定时名单的群,才会在这里判断。",
"items": {
"type": "string"
}
},
"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_safe_limit": {
"type": "int",
"description": "增量分析单次安全上限 (Safe Count)",
"default": 2000,
"hint": "增量分析模式下,当群聊极其活跃导致大量消息堆积时,插件单次回溯历史的最大消息条数。这同时也是为了防止特殊情况下无限回溯。即使没追到上次分析的断点,拉满此数值也会强制停止。建议 1000-5000。"
},
"incremental_min_messages": {
"type": "int",
"description": "增量分析最小消息数阈值",
"default": 300,
"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 请求压力。"
},
"incremental_fallback_enabled": {
"type": "bool",
"description": "增量失败自动回退全量分析",
"default": true,
"hint": "建议开启。开启后,如果增量分析失败,会自动改用普通分析,避免当天没报告。"
}
}
},
"html": {
"description": "HTML 设置",
"type": "object",
"hint": "HTML 报告输出相关配置,包括外链 Base URL 和报告储存目录",
"items": {
"html_base_url": {
"type": "string",
"description": "外鏈 Base URL",
"default": "",
"hint": "用于生成外链的 Base URL(可留空)。如果设置了此项,发送报告时会在消息中提供超连結 (${BASE_URL}/${FILENAME})。留空则不提供外链。"
},
"html_output_dir": {
"type": "string",
"description": "报告储存目录",
"default": "",
"hint": "HTML报告文件的保存目录,用于存储生成的 HTML 文件和原始 JSON 数据。留空则自动使用插件数据目录(astrbot_path/data/plugin_data/astrbot_plugin_qq_group_daily_analysis/)下的 self_hosted_html_reports 目录。"
},
"html_only_url": {
"type": "bool",
"description": "仅发送外链",
"default": false,
"hint": "勾选后,若配置了外链 Base URL,则发送 HTML 报告时将只发送外链链接,不再发送HTML文件,若未勾选,将保持发送HTML文件。"
},
"html_filename_format": {
"type": "string",
"description": "HTML文件名格式",
"default": "群聊分析报告_${group_id}_${date}_${ulid}.html",
"hint": "HTML文件名格式,支持变量:${group_id}(群号)、${date}(日期)、${ulid}(时间排序ID),支持子目录/层级。"
}
}
},
"qq_group_upload": {
"description": "群文件/群相册上传设置",
"type": "object",
"hint": "图片报告生成后自动上传到群文件目录或群相册。群文件上传基于 OneBot upload_group_file 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": "启用群相册上传",
"default": false,
"hint": "图片报告生成后,自动上传到群相册(确保 Bot 有权限上传群相册)。此功能为 NapCat 扩展 API,其他 OneBot 实现可能不支持"
},
"group_album_name": {
"type": "string",
"description": "目标群相册名称",
"default": "",
"hint": "指定上传到哪个群相册(请确保已经存在这个名称的相册)。留空则上传到群默认相册。如果指定的相册不存在,将回退到默认相册"
},
"group_album_strict_mode": {
"type": "bool",
"description": "群相册上传严格模式",
"default": true,
"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": "请分析接下来提供的群聊记录,提取出最多 **${max_topics}** 个主要话题。根据实际聊天内容提取所有最有意义的话题。\n\n## 对于每个话题,请提供:\n\n1. **话题名称**(突出主题内容,尽量简明扼要,控制在 10 字以内)\n2. **主要参与者的用户ID**(最多 5 人,按参与度排序)\n3. **话题详细描述**(包含关键信息和结论)\n\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_v2_prompt": {
"description": "默认金句分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "请从以下群聊记录中挑选出 **${max_golden_quotes}** 句最具冲击力、最令人惊叹的「金句」。\n\n## 金句标准:\n\n- **核心标准**:**逆天的神人发言**,即具备颠覆常识的脑洞、逻辑跳脱的表达或强烈反差感的原创内容\n- **典型特征**:包含某些争议话题元素、夸张类比、反常规结论、一本正经的「胡说八道」或突破语境的清奇思路,并且具备一定的冲击力,让人印象深刻\n\n## 对于每个金句,请提供:\n\n1. **原文内容**(完整保留发言细节)\n2. **发言人用户ID**(必须严格使用消息记录中提供的 [用户ID])\n3. **选择理由**(具体说明其「逆天」之处,如逻辑颠覆点/脑洞角度/反差感/争议话题元素)\n\n## 严格约束:\n\n- 优先筛选 **逆天指数最高** 的内容:\n - 发情、性压抑话题 > 争议话题 > 元素级 > 颠覆认知级 > 逻辑跳脱级 > 趣味调侃级\n - 剔除单纯玩梗或网络热词堆砌的普通发言\n- **用户引用**:在选择理由(reason)中,如果提到了具体用户,请使用 `[用户ID]` 的格式来指代(例如 `[123456]`)。不要只写昵称。我们会自动渲染头像。\n- **身份对齐**:返回的 `sender` 字段必须是 `[用户ID]` 格式(例如 `[123456]`)。我们会根据 ID 自动还原昵称和头像。\n\n## 群聊记录格式: [HH:MM] [用户ID]: 消息内容\n\n## 群聊记录:\n\n${messages_text}\n\n---\n\n### 返回格式示例:\n\n```json\n[\n {{\n \"content\": \"金句原文\",\n \"sender\": \"[123456789]\",\n \"reason\": \"这句话太逆天了,尤其是对 [987654321] 的逻辑降维打击。\"\n }}\n]\n```\n\n**注意**:返回的内容必须是纯 JSON,不要包含 markdown 代码块标记或其他格式。"
}
}
},
"quality_analysis_prompts": {
"description": "聊天质量分析提示词模板",
"type": "object",
"hint": "聊天质量分析提示词模板,可自定义修改",
"items": {
"quality_v2_prompt": {
"description": "默认聊天质量分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "请分析以下群聊记录,输出一份\"聊天质量锐评\"。\n\n## 任务目标:\n1. **维度划分**:将聊天内容划分为 3-6 个【高层级、抽象、泛化】的维度(例如:就业焦虑、生涯规划、技术方案研究、情感树洞、无意义水群等)。\n2. **严禁在维度名称(name)中出现任何具体的群聊人物名、项目名、具体的报错内容或细碎的事件点。标题必须保持高度抽象且字数简练(2-6个字)。**\n3. 为每个维度计算一个大致的百分比占位(总和小于等于 100%)。\n4. **点评内容**:为每个维度写一句符合你当前人格设定的犀利、幽默或温情的点评。具体的吐槽内容、具体的细节事件描述请放在这里。\n5. **全群表现**:给出一句总结性的评价,作为总结标题对应的“金句”。\n6. **主题设定**:设定一个本次报告的主题标题和副标题。\n\n## 点评风格指南:\n- 语言要接地气,多用互联网黑话。吐槽要精准,避重就轻。\n- **只有维度名称(name)需要抽象,点评(comment)和总结(summary)可以非常具体和生动。**\n\n## 返回格式要求:\n必须以纯 JSON 格式返回,不得包含任何 Markdown 格式。\n\n```json\n{{\n \"title\": \"今日群聊主题\",\n \"subtitle\": \"副标题\",\n \"dimensions\": [\n {{\n \"name\": \"抽象维度名\",\n \"percentage\": 比例,\n \"comment\": \"与该维度相关的锐评,请务必保持你的人设口吻\"\n }}\n ],\n \"summary\": \"一句总结性的金句\"\n}}\n```\n\n群聊记录:\n${messages_text}"
},
"quality_summary_prompt": {
"description": "增量汇总聊天质量分析提示词",
"type": "text",
"editor_mode": true,
"editor_language": "markdown",
"default": "你现在有一份今天全天分散时间段的多个“增量批次点评笔记”。\n你的任务是将这些分散的笔记汇总成一份最终的“全天聊天质量终极锐评”。\n\n## 任务目标:\n1. **全局抽象维度**:根据各批次的维度表现,平衡权重,提取出 3-6 个覆盖全天的【核心、上层抽象】课题维度(如:职场/行业风向、技术架构演进、社畜心理博弈等)。\n2. **严禁在维度名称(name)中出现具体的批次细节。标题必须代表全天的某种趋势。**\n3. **百分比融合**:根据全天笔记的频率和强度,给出一个代表全天整体分布的比例(总和不超过100%)。\n4. **终极点评**:为每个汇总维度写出一句符合你当前人设且升华后的全天总结性点评。可以融合具体批次中的有趣槽点。\n5. **终极总结**:拟定全天的大型主题标题、副标题,并给出一句霸气的全天表现总结。\n\n## 风格要求:\n- 只有维度名称(name)需要高度概括抽象。\n- 点评(comment)和总结(summary)请尽量生动、具体,要把一整天的梗串联起来。\n\n## 返回格式要求:\n必须以纯 JSON 格式返回,不得包含任何 Markdown 格式。\n\n```json\n{{\n \"title\": \"今日群聊主题\",\n \"subtitle\": \"副标题\",\n \"dimensions\": [\n {{\n \"name\": \"抽象大类标题\",\n \"percentage\": 比例,\n \"comment\": \"全天的锐评总结,请务必保持你的人设口吻\"\n }}\n ],\n \"summary\": \"全天总结金句\"\n}}\n```\n\n增量汇总数据:\n${reviews_text}"
}
}
}
}
},
"performance": {
"description": "并发限流设置",
"type": "object",
"hint": "控制插件运行时的各项并发强度。合理的配置可以保护您的服务器不宕机、API 不被封禁。",
"items": {
"max_concurrent_groups": {
"type": "int",
"description": "最大活跃任务数(任务总闸)",
"default": 2,
"hint": "限制同时有多少个群聊分析任务正在进行。主要用于【保护服务器内存和 IO】,防止瞬间读取过多群聊记录导致程序崩溃(OOM)。"
},
"max_concurrent_llm": {
"type": "int",
"description": "最大 LLM 请求并发数(API 闸口)",
"default": 3,
"hint": "限制同时发起的 AI 分析请求数量。主要用于【遵守 API 频率限制(RPM)】,避免因为请求过快导致 API 被封号或报错。"
},
"max_concurrent_t2i": {
"type": "int",
"description": "最大 T2I渲染并发数",
"default": 1,
"hint": "限制同时开启的 T2I 渲染进程数。"
},
"stagger_seconds": {
"type": "int",
"description": "多群分析交错间隔(秒)",
"default": 30,
"hint": "当同时启动多个群组的定时分析任务时,每个任务之间的延迟间隔(秒),建议根据实际的 LLM 服务速度填写,过短可能导致请求堆积,过长则分析效率降低。"
}
}
}
}