From 6ce010e46a5ab3b09200a5af0b9fe09ab988cb14 Mon Sep 17 00:00:00 2001 From: MingNian <1281442923@qq.com> Date: Mon, 22 Jun 2026 14:14:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20AI=E5=9B=9E=E5=A4=8D=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=BA=A6=E6=9D=9F=20+=20=E5=89=8D=E7=AB=AF=E6=B8=85=E6=B4=97?= =?UTF-8?q?=E5=99=A8=E5=A2=9E=E5=BC=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - prompt: 禁止**粗体*斜体等内联标记、HTML标签、表格,标题仅限### - 前端_cleanAiText: 移除$N占位符、HTML标签、多余#标题降级 - 确认卡片/结构化消息不受影响 --- .../src/Health.Infrastructure/AI/prompt_manager.cs | 10 ++++++++++ .../lib/pages/home/widgets/chat_messages_view.dart | 14 ++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/backend/src/Health.Infrastructure/AI/prompt_manager.cs b/backend/src/Health.Infrastructure/AI/prompt_manager.cs index ce3b931..6ce4c95 100644 --- a/backend/src/Health.Infrastructure/AI/prompt_manager.cs +++ b/backend/src/Health.Infrastructure/AI/prompt_manager.cs @@ -34,6 +34,16 @@ public sealed class PromptManager - 对胸痛、胸闷憋气、呼吸困难、意识异常、晕厥、说话不清、一侧肢体无力、血氧明显偏低、血压或血糖严重异常等情况,优先建议及时就医或急诊评估。 - 回答用语使用“可能、建议、需要结合医生判断”等表达,避免绝对化结论。 - 医疗相关分析末尾用一句自然的话提醒:以上为 AI 预分析,不能替代医生诊断和治疗建议。 + + 回复格式规则(严格遵守): + - 禁止使用 **粗体**、*斜体*、~~删除线~~ 等 Markdown 内联标记 + - 禁止使用 HTML 标签 + - 禁止使用 Markdown 表格(|--|--|) + - 标题只使用 ### 三级标题,禁止使用 #、##、#### + - 列表使用 - 开头,每项一行 + - 数值和单位之间加空格:120 mmHg、6.2 mmol/L + - 不要输出任何 $ 开头的占位符 + - 回复结尾不再重复免责声明,MedicalBoundaryRules 已统一处理 """; private const string DefaultPrompt = """ diff --git a/health_app/lib/pages/home/widgets/chat_messages_view.dart b/health_app/lib/pages/home/widgets/chat_messages_view.dart index e7f8985..6c0e7ed 100644 --- a/health_app/lib/pages/home/widgets/chat_messages_view.dart +++ b/health_app/lib/pages/home/widgets/chat_messages_view.dart @@ -1243,10 +1243,16 @@ class ChatMessagesView extends ConsumerWidget { /// 清理 AI 返回文本中的异常占位符(Markdown 格式交给 MarkdownBody 渲染) static String _cleanAiText(String text) { - return text - .replaceAll('\$1', '') // AI 偶尔输出 $1 占位符(正则残留) - .replaceAll(RegExp(r'\n{3,}'), '\n\n') - .trim(); + var t = text; + // 移除 $1、$2 等占位符 + t = t.replaceAll(RegExp(r'\$\d+'), ''); + // 移除残留 HTML 标签 + t = t.replaceAll(RegExp(r'<[^>]+>'), ''); + // 行首 # 超过 3 个降为 ### + t = t.replaceAllMapped(RegExp(r'^#{4,}\s', multiLine: true), (_) => '### '); + // 压缩多余空行 + t = t.replaceAll(RegExp(r'\n{3,}'), '\n\n'); + return t.trim(); } String _freqLabel(String freq) {