feat: ASR语音转写管线 + 群聊身份混淆修复

- 新增ASR语音识别管线: QQ语音→下载音频→qwen3-asr-flash转录→注入用户消息
- 模型名称全部从models.json路由获取,无硬编码
- 修复群聊中AI将非管理员用户误称为管理员昵称(叶酱)的问题
  - 助手回复缓存时标注[回复 昵称 (UID)],防止对话历史中身份混淆
  - 群聊上下文指令改为肯定性表述,移除具体名称提及
- trace面板时间戳改为YYYY-MM-DD HH:MM:SS格式,耗时统一显示为秒
- 修复Go time.Duration纳秒值在前端显示问题(Duration/1e6转毫秒)
- 新增video_tool插件模板
- 优化OpenAI adapter reasoning_content处理

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-31 16:46:47 +08:00
parent d112fdd540
commit a9c79d7887
16 changed files with 780 additions and 67 deletions
+3 -3
View File
@@ -1297,7 +1297,7 @@ app.get('/api/trace/recent', async (req, res) => {
hop: 'llm_call',
label: `LLM 调用: ${call.model || 'unknown'}`,
status: call.success ? 'success' : 'error',
durationMs: call.duration_ms || call.Duration || 0,
durationMs: call.duration_ms || (call.Duration ? Math.round(call.Duration / 1e6) : 0),
detail: call.error || `${call.prompt_tokens || 0}+${call.completion_tokens || 0} tokens`,
data: call,
});
@@ -1316,7 +1316,7 @@ app.get('/api/trace/recent', async (req, res) => {
hop: 'tool_call',
label: `工具调用: ${tc.tool_name || tc.name || 'unknown'}`,
status: tc.error ? 'error' : 'success',
durationMs: tc.duration_ms || tc.Duration || 0,
durationMs: tc.duration_ms || (tc.Duration ? Math.round(tc.Duration / 1e6) : 0),
detail: tc.error || tc.result?.substring?.(0, 100) || '',
data: tc,
});
@@ -1443,7 +1443,7 @@ app.get('/api/trace/session/:sessionId', async (req, res) => {
hop: 'llm_call',
label: `LLM: ${call.model || 'unknown'}`,
status: call.success ? 'success' : 'error',
durationMs: call.duration_ms || call.Duration || 0,
durationMs: call.duration_ms || (call.Duration ? Math.round(call.Duration / 1e6) : 0),
detail: call.error || `${call.prompt_tokens || 0}${call.completion_tokens || 0} tokens`,
data: call,
});