From 0c670de0dd70e80ed87d7e08b7c08f6780628f9c Mon Sep 17 00:00:00 2001 From: ddshi <8811906+ddshi@user.noreply.gitee.com> Date: Mon, 2 Mar 2026 17:26:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=20DeepSeek=20prompt?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D=E6=97=B6=E9=97=B4=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 下午3点 = 15:00 (不是03:00) - "X点后" 理解为"几点之后"而非"X小时后" - 添加关键规则强调 Co-Authored-By: Claude Opus 4.6 --- src/routes/ai.ts | 40 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/routes/ai.ts b/src/routes/ai.ts index 5e60ce6..ec6ff31 100644 --- a/src/routes/ai.ts +++ b/src/routes/ai.ts @@ -11,6 +11,15 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒 当前时间:${new Date().toISOString()} +⚠️⚠️⚠️ 关键规则 - 必须在返回的JSON中遵守 ⚠️⚠️⚠️ +1. 下午3点 = 15:00,不是03:00! +2. 下午1点 = 13:00,下午2点 = 14:00,下午3点 = 15:00,下午4点 = 16:00 +3. 晚上8点 = 20:00,晚上9点 = 21:00 +4. "X点后"意思是"X点之后",不是"X小时后"! + - "下午3点后" = 今天或明天的 15:00 + - "晚上8点后" = 今天或明天的 20:00 +5. 当前时间之后的"X点",如果还没到就是今天,如果已经过了就是明天 + 任务:从自然语言中解析用户输入,并直接返回以下JSON格式(不要有其他文字解释): {"type": "anniversary", "title": "事件标题", "content": "详细内容", "date": "2026-02-13T09:00:00Z", "timezone": "Asia/Shanghai", "is_lunar": false, "repeat_type": "yearly", "priority": "none", "reminder_times": []} @@ -31,6 +40,13 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒 - "提醒我春节回家" → title = "春节回家" - "帮我记一下妈妈的生日" → title = "妈妈的生日" +时间解析示例(极其重要): +- "上午9点" → date 中的小时 = 09 +- "下午3点" → date 中的小时 = 15(下午3点=15点!不是3点!) +- "晚上8点" → date 中的小时 = 20 +- "下午3点后" → date = 今天 15:00(如果当前时间<15:00)或明天15:00(如果当前时间>=15:00) +- "晚上8点后" → date = 今天 20:00 或明天 20:00 + ## 意图识别规则(非常重要): ### 纪念日 vs 提醒 区分: @@ -57,9 +73,24 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒 4. 星期几:"周一"、"周二"... "周日"、"星期天" 5. 具体日期:"3月8日"、"5月1日"、"10月1日" -### 时间识别: -- "上午9点"、"下午3点"、"晚上8点"、"14:30" → 转换为对应小时 -- 如果没有指定具体时间,默认使用 09:00:00Z +### 时间识别(非常重要): +- "上午9点" → 09:00:00Z +- "下午3点" → 15:00:00Z(绝对不能误解为 03:00!) +- "晚上8点" → 20:00:00Z +- "14:30" → 14:30:00Z +- "上午X点" = X:00(X=1-12) +- "下午X点" = X+12:00(下午3点=15点,下午1点=13点) +- "晚上X点" = X+12:00(晚上8点=20点,晚上10点=22点) + +### "X点后"识别(非常重要): +- "8点后"、"9点后"、"10点后" → 这是"几点以后"的意思,不是"几小时后" +- "下午3点后" → 先识别"下午3点"=15:00,然后"后"表示"之后" +- "晚上8点后" → 先识别"晚上8点"=20:00,然后"后"表示"之后" +- 处理流程: + 1. 先识别时间(上午/下午/晚上 + X点) + 2. 转换为24小时制 + 3. 判断"后":如果还没到那个时间就是今天,否则是明天 +- 绝对禁止将"X点后"理解为"X小时后"! ### 重复规则识别: - "每天" → repeat_type = "daily" @@ -105,7 +136,8 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒 - 解析用户真实意图,不要编造日期 - 如果用户说"下周三",必须是真正下周星期三,不是今天也不是上周 - 如果用户没有明确日期,使用合理的默认日期(通常是明天或用户提到的第一个日期) -- 标题要简洁准确,去除"提醒"、"帮我"等前缀`; +- 标题要简洁准确,去除"提醒"、"帮我"等前缀 +- 绝对禁止将"X点后"理解为"X小时后"!例如"8点后"意思是"8点",不是"8小时以后"`; const parseMessageSchema = z.object({ message: z.string().min(1, 'Message is required').max(1000),