|
@@ -1,4 +1,4 @@
|
|
|
-package com.pharmacopoeia.service;
|
|
|
|
|
|
|
+package com.pharmacopoeia.service;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
@@ -33,8 +33,8 @@ public class PromptService {
|
|
|
你是中华药典AI助手。简洁回答用户的药品问题。
|
|
你是中华药典AI助手。简洁回答用户的药品问题。
|
|
|
规则:剂量、用法、禁忌等关键数据必须完整复制原文,数字不能丢。
|
|
规则:剂量、用法、禁忌等关键数据必须完整复制原文,数字不能丢。
|
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
|
- 【结论】 2-3句话概括。
|
|
|
|
|
- 【来源明细】 列出本题引用的所有资料名称及出处。
|
|
|
|
|
|
|
+ 【结论】 2-3句话概括。
|
|
|
|
|
+ 【来源明细】列出本题引用的所有资料名称及出处。
|
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
|
|
|
|
|
|
// ============================================================
|
|
// ============================================================
|
|
@@ -45,9 +45,9 @@ public class PromptService {
|
|
|
|
|
|
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
|
|
|
|
|
|
- 【结论】2-3句话建议。
|
|
|
|
|
|
|
+ 【结论】 2-3句话建议。
|
|
|
【用法用量】剂量、频次、疗程 — 标注来源名称。
|
|
【用法用量】剂量、频次、疗程 — 标注来源名称。
|
|
|
- 【禁忌】标注来源名称。
|
|
|
|
|
|
|
+ 【禁忌】 标注来源名称。
|
|
|
【不良反应】标注来源名称。
|
|
【不良反应】标注来源名称。
|
|
|
【注意事项】孕妇/儿童/老年/肝肾不全等特殊人群提示。
|
|
【注意事项】孕妇/儿童/老年/肝肾不全等特殊人群提示。
|
|
|
【来源明细】列出本题引用的所有资料名称及出处。
|
|
【来源明细】列出本题引用的所有资料名称及出处。
|
|
@@ -61,10 +61,10 @@ public class PromptService {
|
|
|
你是药典法规条款查询助手。
|
|
你是药典法规条款查询助手。
|
|
|
规则:逐字引用原文条款,保留编号和术语原貌,标注条款出处。
|
|
规则:逐字引用原文条款,保留编号和术语原貌,标注条款出处。
|
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
|
- 【摘要】一句话概述该条款内容。
|
|
|
|
|
- 【原文引用】 逐字引用原文条款,保留编号和术语原貌。
|
|
|
|
|
|
|
+ 【摘要】 一句话概述该条款内容。
|
|
|
|
|
+ 【原文引用】逐字引用原文条款,保留编号和术语原貌。
|
|
|
【条款出处】编号 + 页码(如"2025版药典四部通则0631")。
|
|
【条款出处】编号 + 页码(如"2025版药典四部通则0631")。
|
|
|
- 【关联条款】 其他相关条款编号及简要说明(如有)。
|
|
|
|
|
|
|
+ 【关联条款】其他相关条款编号及简要说明(如有)。
|
|
|
【来源明细】列出本题引用的所有资料名称及出处。
|
|
【来源明细】列出本题引用的所有资料名称及出处。
|
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
|
|
|
|
|
@@ -92,9 +92,7 @@ public class PromptService {
|
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
|
|
|
|
|
|
【病情评估】严重程度判断 + 是否需要立即就医。
|
|
【病情评估】严重程度判断 + 是否需要立即就医。
|
|
|
- 【用药方案】方案一:药品名 — 用量(来源名称)
|
|
|
|
|
- 方案二:药品名 — 用量(来源名称)
|
|
|
|
|
- 每个方案后标注来源(如"2025版药典""维基百科""通用药学知识")。
|
|
|
|
|
|
|
+ 【用药方案】方案一:药品名 — 用量(来源名称);方案二:药品名 — 用量(来源名称)。每个方案后标注来源。
|
|
|
【非药物建议】休息、饮食、物理方法等。
|
|
【非药物建议】休息、饮食、物理方法等。
|
|
|
【注意事项】各方案的禁忌人群、药物相互作用、特殊人群提示(孕妇/儿童/老年)。
|
|
【注意事项】各方案的禁忌人群、药物相互作用、特殊人群提示(孕妇/儿童/老年)。
|
|
|
【就医指征】列出必须就医的警示信号(如体温>39°C持续、呼吸困难等)。
|
|
【就医指征】列出必须就医的警示信号(如体温>39°C持续、呼吸困难等)。
|
|
@@ -115,9 +113,9 @@ public class PromptService {
|
|
|
5. 若无法确定安全答案,直接建议就医
|
|
5. 若无法确定安全答案,直接建议就医
|
|
|
6. 每条信息标注为【通用药学知识】
|
|
6. 每条信息标注为【通用药学知识】
|
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
回答格式(紧凑排版,段落标题后直接接内容,不得有空行):
|
|
|
- 【结论】 1到3句话回答用户问题。
|
|
|
|
|
- 【详细说明】 基于通用药学知识作答,每条标注【通用药学知识】。
|
|
|
|
|
- 【来源说明】 声明:上述内容来源为AI通用药学知识库,非《中国药典》原文。
|
|
|
|
|
|
|
+ 【结论】 1到3句话回答用户问题。
|
|
|
|
|
+ 【详细说明】基于通用药学知识作答,每条标注【通用药学知识】。
|
|
|
|
|
+ 【来源说明】声明:上述内容来源为AI通用药学知识库,非《中国药典》原文。
|
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
""" + COMPLIANCE + AI_DISCLAIMER;
|
|
|
|
|
|
|
|
private static final Map<String, String> PROMPT_MAP = Map.of(
|
|
private static final Map<String, String> PROMPT_MAP = Map.of(
|
|
@@ -135,15 +133,15 @@ public class PromptService {
|
|
|
|
|
|
|
|
if (documents == null || documents.isEmpty()) {
|
|
if (documents == null || documents.isEmpty()) {
|
|
|
systemPrompt = NO_DOCS;
|
|
systemPrompt = NO_DOCS;
|
|
|
- userMessage = "【用户问题】" + query + "\n\n(提示:知识库中未找到相关药典原文,请使用通用药学知识作答)";
|
|
|
|
|
|
|
+ userMessage = "【用户问题】" + query + "\n(提示:知识库中未找到相关药典原文,请使用通用药学知识作答)";
|
|
|
} else {
|
|
} else {
|
|
|
systemPrompt = PROMPT_MAP.getOrDefault(intent, NO_DOCS);
|
|
systemPrompt = PROMPT_MAP.getOrDefault(intent, NO_DOCS);
|
|
|
|
|
|
|
|
String context = documents.stream()
|
|
String context = documents.stream()
|
|
|
.map(d -> "【资料:" + d.get("source") + "】\n" + d.get("content"))
|
|
.map(d -> "【资料:" + d.get("source") + "】\n" + d.get("content"))
|
|
|
- .collect(Collectors.joining("\n\n---\n\n"));
|
|
|
|
|
|
|
+ .collect(Collectors.joining("\n---\n"));
|
|
|
|
|
|
|
|
- userMessage = "【参考资料】\n" + context + "\n\n"
|
|
|
|
|
|
|
+ userMessage = "【参考资料】\n" + context + "\n"
|
|
|
+ "【引用要求】每条信息必须标注来源名称(如\"2025版药典二部P567\"),不得使用数字编号。\n"
|
|
+ "【引用要求】每条信息必须标注来源名称(如\"2025版药典二部P567\"),不得使用数字编号。\n"
|
|
|
+ "【用户问题】" + query;
|
|
+ "【用户问题】" + query;
|
|
|
}
|
|
}
|
|
@@ -153,4 +151,4 @@ public class PromptService {
|
|
|
Map.of("role", "user", "content", userMessage)
|
|
Map.of("role", "user", "content", userMessage)
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
+}
|