```
docs(health-profile): 添加防编造加固修订记录到导出健康档案设计文档 补充了关于导出摘要出现虚构病例问题的详细分析和修复方案, 包括检索策略优化、空数据兜底处理和prompt重写等三层防护措施。 ```
This commit is contained in:
@@ -21,10 +21,13 @@ enum DiaryAssistPrompts {
|
||||
/// 第一轮传空数组。
|
||||
static func suggest(content: String, coveredDimensions: [String] = []) -> String {
|
||||
let covered = coveredDimensions.filter { !$0.isEmpty }
|
||||
let coveredLine = covered.isEmpty ? "无" : covered.joined(separator: "、")
|
||||
let excludeRule = covered.isEmpty
|
||||
let coveredSet = Set(covered)
|
||||
let allowed = dimensions.filter { !coveredSet.contains($0) }
|
||||
let allowedLine = allowed.isEmpty ? "(已基本问全)" : allowed.joined(separator: "、")
|
||||
// 正向约束:1.7B 对「只能从这些里挑」比对「严禁选这些」遵循更好。
|
||||
let scopeRule = covered.isEmpty
|
||||
? ""
|
||||
: "\n- 本轮【严禁】选择这些已覆盖维度:\(covered.joined(separator: "、"));只能从其余维度里挑。"
|
||||
: "\n- 已问过的维度【不要再问】:\(covered.joined(separator: "、"))。本轮只能从这些还没问的维度里挑:\(allowedLine)。"
|
||||
|
||||
return """
|
||||
你是社区医生的小助手。患者写了一段身体状态的健康记录,信息可能不够完整。
|
||||
@@ -41,7 +44,7 @@ enum DiaryAssistPrompts {
|
||||
8. 生活方式 —— 睡眠、饮食、运动习惯、压力
|
||||
|
||||
硬性规则:
|
||||
- 本轮每个问题必须来自【不同】维度,严禁两条落在同一维度(例如不能两条都问"伴随症状")。\(excludeRule)
|
||||
- 本轮每个问题必须来自【不同】维度,严禁两条落在同一维度(例如不能两条都问"伴随症状")。\(scopeRule)
|
||||
- 只问【最新记录】里还没写明的事。方括号 `[xxx]` 表示该话题已被提出、只是细节待填,【不要】再作为新问题重复它。
|
||||
- 不给诊断、不给用药建议、不写「建议就医」。
|
||||
- q ≤ 20 字,像真人医生在问;fill 是采纳后追加到原文的中文补充句,可含方括号占位符如 [时间] [部位]。
|
||||
@@ -66,7 +69,7 @@ enum DiaryAssistPrompts {
|
||||
]}
|
||||
|
||||
现在输出 JSON。
|
||||
已覆盖维度(必须避开):\(coveredLine)
|
||||
本轮可选维度:\(allowedLine)
|
||||
【最新记录】:
|
||||
\(content)
|
||||
|
||||
|
||||
@@ -62,15 +62,20 @@ enum HealthExportPrompts {
|
||||
? "# 就诊摘要"
|
||||
: "# 就诊摘要 — \(intentLabelCN)"
|
||||
return """
|
||||
你正在帮患者撰写一份给社区医生看的就诊摘要。要求:
|
||||
- 严格输出 Markdown,标题用 # / ##,不要 markdown 围栏
|
||||
- 只用「数据」中给出的信息,数据缺失就写「无记录」
|
||||
- 不要给诊断意见、用药建议或「建议就医」之类的话
|
||||
- 引用数值时保留单位 + 参考范围,异常项前加 ⚠️
|
||||
- 全文中文,简洁,医生 30 秒内能扫完
|
||||
- 不要复述「数据」二字,不要输出 JSON
|
||||
你是健康数据整理员。任务是把下面【真实数据】(JSON)里**已经存在**的内容,
|
||||
原样整理成一份给社区医生看的就诊摘要。这是**抽取 / 搬运**任务,不是创作。
|
||||
|
||||
结构(严格按以下 6 段):
|
||||
【最重要的铁律 —— 违反即失败】
|
||||
- 只能使用【真实数据】JSON 里**真实出现过**的内容。
|
||||
- 严禁编造或推测任何数字、日期、症状、药物、检查结果、诊断,哪怕看起来很合理。
|
||||
- JSON 里没有的信息,对应小节一律写「无记录」,不要补全、不要举例、不要套用常见病例模板。
|
||||
- 数值必须原样照搬(含单位与参考范围);status 为 high/low/abnormal 的指标前加 ⚠️。
|
||||
- 「主诉」「患者疑问」可参考【患者原话】,但不得加入原话与数据里都没有的症状。
|
||||
|
||||
输出格式:
|
||||
- 严格 Markdown,标题用 # / ##,不要 markdown 围栏,不要输出 JSON,不写「数据」二字。
|
||||
- 不给诊断意见、用药建议或「建议就医」。全文中文,简洁,医生 30 秒能扫完。
|
||||
- 严格按以下 6 段(顺序与标题固定):
|
||||
\(labelLine)
|
||||
## 主诉
|
||||
## 患者背景
|
||||
@@ -79,12 +84,33 @@ enum HealthExportPrompts {
|
||||
## 在服药与过敏
|
||||
## 患者疑问
|
||||
|
||||
数据:
|
||||
—— 格式示例(只示范「无记录」与数值写法,内容请勿照抄)——
|
||||
真实数据:{"profile":{},"symptoms":[],"indicators":[{"name":"体温","value":"38.5","unit":"℃","range":"36-37.2","status":"high","date":"2026-05-01"}],"reports":[],"diaries":[],"time_window":{"from":"2026-04-02","to":"2026-05-02"}}
|
||||
输出:
|
||||
# 就诊摘要 — 近期健康摘要
|
||||
## 主诉
|
||||
无记录
|
||||
## 患者背景
|
||||
无记录
|
||||
## 近期症状(按时间倒序)
|
||||
无记录
|
||||
## 关键指标(异常项优先)
|
||||
⚠️ 体温 38.5 ℃(参考 36-37.2,2026-05-01)
|
||||
## 在服药与过敏
|
||||
无记录
|
||||
## 患者疑问
|
||||
无记录
|
||||
—— 示例结束(以上咳嗽/体温等仅示范格式,切勿出现在你的输出里)——
|
||||
|
||||
现在,严格根据下面这份【真实数据】生成;数据里没有的就写「无记录」,**禁止编造**:
|
||||
|
||||
【真实数据】:
|
||||
\(dataJSON)
|
||||
|
||||
患者原话:\(userPrompt)
|
||||
【患者原话】:\(userPrompt)
|
||||
|
||||
现在请生成 Markdown(直接输出,不要思考过程,不要 <think> 标签):
|
||||
再次强调:只整理上面【真实数据】里真实出现过的内容,禁止编造任何数字/日期/症状/药物。
|
||||
直接输出 Markdown,不要思考过程,不要 <think> 标签:
|
||||
/no_think
|
||||
"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user