From b941f5a8d917c27e2817c89d25939d1940aa9ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AC=E6=98=8E?= <83812544+Ed1s0nZ@users.noreply.github.com> Date: Fri, 29 May 2026 11:17:05 +0800 Subject: [PATCH] Add files via upload --- web/static/js/monitor.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/web/static/js/monitor.js b/web/static/js/monitor.js index 97cd8911..db054244 100644 --- a/web/static/js/monitor.js +++ b/web/static/js/monitor.js @@ -416,6 +416,22 @@ function _normalizeUnicodeBulletMarkersToMdDash(segment) { .replace(/^\s*\u00b7\s+/gm, '- '); } +/** + * 修正模型常见的强调语法偏差: + * 1) 把 `\*\*文本\*\*` 还原为 `**文本**`(常见于多层转义输出) + * 2) 把 `** 文本 **` 收敛为 `**文本**`(避免分隔符内空格导致不生效) + * 仅处理单行内容,避免跨段落误匹配。 + */ +function _normalizeEmphasisMarkersForMarkdown(segment) { + let s = String(segment); + s = s.replace(/\\\*\*([^\n*][^\n]*?[^\n*])\\\*\*/g, '**$1**'); + s = s.replace(/\*\*\s+([^\n*][^\n]*?[^\n*])\s+\*\*/g, '**$1**'); + // marked 在「中文紧邻 ** 且加粗内容首字符是引号/书名号」时常不触发 strong。 + // 仅对“有闭合 ** 的同一行片段”补一个空格,尽量减少误判面。 + s = s.replace(/([\u4e00-\u9fff])\*\*([“"‘'《((][^\n*]*?\*\*)/g, '$1 **$2'); + return s; +} + /** * 解析前归一化助手 Markdown:去掉零宽字符,NFKC 将全角 * ` _ 等转为 ASCII, * 避免 marked 无法识别强调/行内代码而原样显示 **、反引号; @@ -432,6 +448,7 @@ function normalizeAssistantMarkdownSource(text) { } catch (e) { /* ignore */ } + s = _normalizeEmphasisMarkersForMarkdown(s); s = _stripXmlReasoningWrappersForMarkdown(s); const fb = _maskFencedCodeBlocksForMdPreprocess(s); s = _unwrapHtmlBlockWrappersForMarkdown(fb.masked);