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) {