feat(trace): 实现语义化 Trace ID 机制并美化报告展现

- [TraceContext] 重构 ID 生成算法,支持包含群名和时间(如 manual_技术交流群_1733),极大提升日志调试效率。
 - [视觉美化] 从用户可见消息(初始提示及图片 Caption)中彻底移除技术性的 [ID: xxx] 字符串。
 - [去重增强] 在报告 Caption 中引入基于秒级时间戳的“隐式指纹”,配合共享正则匹配,确保精准去重。
 - [自动分析] 优化自动调度器逻辑,引入群名缓存,使服务端定时任务日志更具业务可读性。
 - [逻辑精简] 利用插件现有的任务并发锁,移除了 Trace ID 中冗余的 4 位随机后缀,进一步精简长度。
This commit is contained in:
SXP-Simon
2026-03-12 18:03:23 +08:00
parent 16c756259a
commit bd991e9c16
5 changed files with 113 additions and 31 deletions
+19 -7
View File
@@ -466,12 +466,23 @@ class GroupDailyAnalysis(Star):
yield event.plain_result("❌ 此群未启用日常分析功能")
return
# 设置 TraceID
trace_id = TraceContext.generate(prefix=f"manual_{group_id}")
# 获取群名以生成语义化的 TraceID
group_name = ""
try:
adapter = self.bot_manager.get_adapter(platform_id)
if adapter:
info = await adapter.get_group_info(group_id)
if info and info.group_name:
group_name = info.group_name
except Exception:
pass
# 设置 TraceID (语义化格式: manual_群名_HHmm)
trace_id = TraceContext.generate(prefix="manual", group_name=group_name or group_id)
TraceContext.set(trace_id)
yield event.plain_result(
f"🔍 正在启动跨平台分析引擎,正在拉取最近消息...\n[ID: {trace_id}]"
"🔍 正在启动跨平台分析引擎,正在拉取最近消息..."
)
try:
@@ -492,7 +503,7 @@ class GroupDailyAnalysis(Star):
f"📊 已获取{result['messages_count']}条消息,正在生成渲染报告..."
)
async for res in self._send_analysis_report(event, result, trace_id):
async for res in self._send_analysis_report(event, result):
yield res
except DuplicateGroupTaskError:
@@ -504,7 +515,7 @@ class GroupDailyAnalysis(Star):
)
async def _send_analysis_report(
self, event: AstrMessageEvent, result: dict, trace_id: str
self, event: AstrMessageEvent, result: dict
) -> AsyncGenerator:
"""处理分析结果的渲染和发送"""
group_id = result["group_id"]
@@ -536,17 +547,18 @@ class GroupDailyAnalysis(Star):
)
if image_url:
caption = f"📊 每日群聊分析报告已生成:\n[ID: {trace_id}]"
caption = TraceContext.make_report_caption()
await adapter.send_image(group_id, image_url, caption=caption)
await self._try_upload_image(group_id, image_url, platform_id)
elif html_content:
yield event.plain_result("⚠️ 群分析报告图片发送失败,自动重试中。")
caption = TraceContext.make_report_caption()
await self.retry_manager.add_task(
html_content,
analysis_result,
group_id,
platform_id,
caption=f"📊 每日群聊分析报告已生成:\n[ID: {trace_id}]",
caption=caption,
)
else:
text_report = self.report_generator.generate_text_report(