59 lines
3.5 KiB
Swift
59 lines
3.5 KiB
Swift
import Foundation
|
|
|
|
/// 「长按 + 语音直达」prompt:端侧语音转写文本 → LLM(MNN/SME2 主链路)分类到新建入口。
|
|
/// 输出契约:严格 JSON `{"intent":"…"}`;解析失败/超时 → VoiceIntentService 回退关键词匹配(§3.2)。
|
|
nonisolated enum IntentPrompts {
|
|
|
|
static func classify(_ utterance: String) -> String {
|
|
classifyTemplate.replacingOccurrences(of: "{{TEXT}}", with: String(utterance.prefix(120)))
|
|
}
|
|
|
|
private static let classifyTemplate: String = #"""
|
|
你是健康 App 的语音意图分类器。用户长按「新建」按钮说了一句话,判断 ta 想打开哪个功能。
|
|
请只输出一段合法 JSON,格式 {"intent":"<分类>"},不要解释、不要 markdown 围栏、不要任何前后缀文字。
|
|
|
|
分类(只能选下面其中一个):
|
|
- "diary" 写日记,记录今天的感受、饮食、睡眠、身体状态
|
|
- "medication" 记一次用药/服药、吃了什么药、拍药盒(凡涉及「吃药/服药/用药」都归这里)
|
|
- "symptom" 记录身体症状,哪里不舒服(头疼、咳嗽、发烧、头晕…),与吃药无关
|
|
- "indicator" 记录指标数值(血压、血糖、体重、心率、体温…)
|
|
- "archive" 归档整份体检报告/化验单(拍报告存档)
|
|
- "export" 生成给医生看的身体档案/健康总结
|
|
- "reminder" 设置周期提醒
|
|
- "unknown" 无法判断
|
|
|
|
规则:
|
|
- 说到「提醒我…」一律 "reminder",即使内容涉及吃药或量血压。
|
|
- 凡是「记录/记一次用药、服药、吃药、吃了药」→ "medication",哪怕没说具体药名。
|
|
- 「记录/记一次」+ 动作时,先看这个动作是什么(吃药→medication、量血压→indicator、
|
|
哪里疼→symptom),不要因为出现「记录」二字就归类成 symptom。
|
|
- 明确说出具体身体症状(头疼、咳嗽、发烧、头晕、拉肚子…)才算 "symptom";
|
|
与吃药/用药无关。只是泛泛说今天的状态、心情、饮食、睡眠、累不累、舒不舒服 → "diary"。
|
|
- 既像日记又提到具体数值时,以数值为准 → "indicator"。
|
|
- 含否定或「忘了/没顾上」的吃药(「没吃药」「忘了吃药」「不用吃药」)不是记录用药 → "diary"。
|
|
- 只有明确要「拍下/存档这份报告或化验单」时才算 "archive";只是顺口提到体检或报告
|
|
(「下周去体检」「医生说报告没问题」)不要归 archive,按日记或提醒处理。
|
|
- 拿不准、又不明确属于其它类别时,默认 "diary"(日记是最常见、最自由的入口)。
|
|
尤其 "medication" 和 "archive" 会直接打开相机,把握不大时宁可归 "diary",不要误开相机。
|
|
|
|
示例:
|
|
"帮我记一下今天的血压,高压128低压85" → {"intent":"indicator"}
|
|
"我今天有点头疼,想记录一下" → {"intent":"symptom"}
|
|
"我要记录一次用药" → {"intent":"medication"}
|
|
"记一下今天吃的药" → {"intent":"medication"}
|
|
"今天有点累,感觉不太舒服" → {"intent":"diary"}
|
|
"刚买了一盒降压药,拍一下存进去" → {"intent":"medication"}
|
|
"今天睡得不错,写个日记" → {"intent":"diary"}
|
|
"把这份体检报告存档" → {"intent":"archive"}
|
|
"今天太忙,忘了吃药" → {"intent":"diary"}
|
|
"下周打算去做个体检" → {"intent":"diary"}
|
|
"医生说我报告没什么大问题" → {"intent":"diary"}
|
|
"每天早上八点提醒我量血压" → {"intent":"reminder"}
|
|
"整理一份给医生看的健康总结" → {"intent":"export"}
|
|
|
|
现在判断下面这句话,只输出 JSON。/no_think
|
|
|
|
用户的话:{{TEXT}}
|
|
"""#
|
|
}
|