feat: AI回复格式约束 + 前端清洗器增强
- prompt: 禁止**粗体*斜体等内联标记、HTML标签、表格,标题仅限### - 前端_cleanAiText: 移除$N占位符、HTML标签、多余#标题降级 - 确认卡片/结构化消息不受影响
This commit is contained in:
@@ -34,6 +34,16 @@ public sealed class PromptManager
|
|||||||
- 对胸痛、胸闷憋气、呼吸困难、意识异常、晕厥、说话不清、一侧肢体无力、血氧明显偏低、血压或血糖严重异常等情况,优先建议及时就医或急诊评估。
|
- 对胸痛、胸闷憋气、呼吸困难、意识异常、晕厥、说话不清、一侧肢体无力、血氧明显偏低、血压或血糖严重异常等情况,优先建议及时就医或急诊评估。
|
||||||
- 回答用语使用“可能、建议、需要结合医生判断”等表达,避免绝对化结论。
|
- 回答用语使用“可能、建议、需要结合医生判断”等表达,避免绝对化结论。
|
||||||
- 医疗相关分析末尾用一句自然的话提醒:以上为 AI 预分析,不能替代医生诊断和治疗建议。
|
- 医疗相关分析末尾用一句自然的话提醒:以上为 AI 预分析,不能替代医生诊断和治疗建议。
|
||||||
|
|
||||||
|
回复格式规则(严格遵守):
|
||||||
|
- 禁止使用 **粗体**、*斜体*、~~删除线~~ 等 Markdown 内联标记
|
||||||
|
- 禁止使用 HTML 标签
|
||||||
|
- 禁止使用 Markdown 表格(|--|--|)
|
||||||
|
- 标题只使用 ### 三级标题,禁止使用 #、##、####
|
||||||
|
- 列表使用 - 开头,每项一行
|
||||||
|
- 数值和单位之间加空格:120 mmHg、6.2 mmol/L
|
||||||
|
- 不要输出任何 $ 开头的占位符
|
||||||
|
- 回复结尾不再重复免责声明,MedicalBoundaryRules 已统一处理
|
||||||
""";
|
""";
|
||||||
|
|
||||||
private const string DefaultPrompt = """
|
private const string DefaultPrompt = """
|
||||||
|
|||||||
@@ -1243,10 +1243,16 @@ class ChatMessagesView extends ConsumerWidget {
|
|||||||
|
|
||||||
/// 清理 AI 返回文本中的异常占位符(Markdown 格式交给 MarkdownBody 渲染)
|
/// 清理 AI 返回文本中的异常占位符(Markdown 格式交给 MarkdownBody 渲染)
|
||||||
static String _cleanAiText(String text) {
|
static String _cleanAiText(String text) {
|
||||||
return text
|
var t = text;
|
||||||
.replaceAll('\$1', '') // AI 偶尔输出 $1 占位符(正则残留)
|
// 移除 $1、$2 等占位符
|
||||||
.replaceAll(RegExp(r'\n{3,}'), '\n\n')
|
t = t.replaceAll(RegExp(r'\$\d+'), '');
|
||||||
.trim();
|
// 移除残留 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) {
|
String _freqLabel(String freq) {
|
||||||
|
|||||||
Reference in New Issue
Block a user