using Health.Infrastructure.AI; using Health.Domain.Enums; namespace Health.Tests; public sealed class PromptManagerTests { [Fact] public void UnifiedPrompt_DistinguishesQuestionsFromEntryRequests() { var prompt = new PromptManager().GetSystemPrompt(AgentType.Unified); Assert.Contains("先判断用户是在咨询数值,还是希望记录数据", prompt); Assert.Contains("血氧98%是不是太高了", prompt); Assert.Contains("先回答问题,不调用 record_health_data", prompt); Assert.Contains("帮我记录血压116/89", prompt); } [Fact] public void UnifiedPrompt_RequiresFreshToolsForPersonalStatusAndKeepsArchiveReadOnly() { var prompt = new PromptManager().GetSystemPrompt(AgentType.Unified); Assert.Contains("必须先调用对应只读工具", prompt); Assert.Contains("当前工具结果是最高优先级", prompt); Assert.Contains("聊天中不修改健康档案", prompt); Assert.DoesNotContain("健康档案查询/修改", prompt); } [Fact] public void UnifiedPrompt_UsesACommonTemporalIntentModelForPlanQueries() { var prompt = new PromptManager().GetSystemPrompt(AgentType.Unified); Assert.Contains("时间意图 + 业务对象", prompt); Assert.Contains("某一天的任务", prompt); Assert.Contains("计划所处的生命周期", prompt); Assert.Contains("不依赖某一句固定问法或某个单独关键词", prompt); Assert.Contains("scope=\"upcoming_plans\"", prompt); Assert.Contains("scope=\"ended_plans\"", prompt); Assert.Contains("scope=\"inactive_plans\"", prompt); Assert.Contains("scope=\"scheduled_date\"", prompt); Assert.Contains("复查使用同一语义映射", prompt); Assert.Contains("scope 必须明确传入", prompt); Assert.DoesNotContain("患者背景只包含当前日期范围内的部分计划", prompt); } }