using Health.Infrastructure.AI; namespace Health.Tests; public sealed class PromptManagerTests { private readonly PromptManager _prompts = new(); [Fact] public void RouterPrompt_DistinguishesEntryConsultationAndDraftContinuation() { var prompt = _prompts.GetIntentRouterPrompt(); Assert.Contains("只负责识别意图,不回答用户问题", prompt); Assert.Contains("帮我记录血压 116/89", prompt); Assert.Contains("血压 116/89 正常吗", prompt); Assert.Contains("同时包含 health_entry 和 medical_consultation", prompt); Assert.Contains("存在草稿不代表所有后续消息都必须继续草稿", prompt); } [Fact] public void HealthEntryPrompt_RequiresWholeBatchDraftAndOneConfirmationCard() { var prompt = _prompts.ComposeForIntents(["health_entry"]); Assert.Contains("113/86、113-86、113—86", prompt); Assert.Contains("多指标属于同一录入批次", prompt); Assert.Contains("record_health_data_batch", prompt); Assert.Contains("每个录入批次只调用一次", prompt); Assert.Contains("先根据后端结果追问缺失或错误部分", prompt); Assert.Contains("全部补齐后再生成整批确认卡", prompt); Assert.Contains("只有后端明确提供的待补充草稿", prompt); Assert.DoesNotContain("医学知识库使用规则", prompt); } [Fact] public void EntryPrompts_DoNotInventRequiredPlanFields() { var medication = _prompts.ComposeForIntents(["medication_entry"]); var exercise = _prompts.ComposeForIntents(["exercise_entry"]); Assert.Contains("药品名称、每次剂量、频率、具体服药时间、开始日期", medication); Assert.Contains("不自行新增药品、猜测剂量", medication); Assert.Contains("运动项目、每天运动时长、持续天数、开始日期和具体提醒时间", exercise); Assert.Contains("当前产品不自动补默认", exercise); } [Fact] public void RagRules_AreOnlyComposedForMedicalKnowledgeModules() { var consultation = _prompts.ComposeForIntents(["medical_consultation"]); var query = _prompts.ComposeForIntents(["personal_query"]); var chat = _prompts.ComposeForIntents(["general_chat"]); Assert.Contains("医学知识库使用规则", consultation); Assert.DoesNotContain("医学知识库使用规则", query); Assert.DoesNotContain("医学知识库使用规则", chat); } [Fact] public void MixedIntentPrompt_ComposesBothEntryAndConsultationRules() { var prompt = _prompts.ComposeForIntents(["health_entry", "medical_consultation"]); Assert.Contains("健康指标录入模块", prompt); Assert.Contains("医疗咨询与健康建议模块", prompt); Assert.Contains("医学知识库使用规则", prompt); } }