fix: 优化 DeepSeek prompt 修复时间解析问题
- 下午3点 = 15:00 (不是03:00) - "X点后" 理解为"几点之后"而非"X小时后" - 添加关键规则强调 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
dc98407edc
commit
0c670de0dd
@ -11,6 +11,15 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒
|
|||||||
|
|
||||||
当前时间:${new Date().toISOString()}
|
当前时间:${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格式(不要有其他文字解释):
|
任务:从自然语言中解析用户输入,并直接返回以下JSON格式(不要有其他文字解释):
|
||||||
|
|
||||||
{"type": "anniversary", "title": "事件标题", "content": "详细内容", "date": "2026-02-13T09:00:00Z", "timezone": "Asia/Shanghai", "is_lunar": false, "repeat_type": "yearly", "priority": "none", "reminder_times": []}
|
{"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 = "春节回家"
|
||||||
- "帮我记一下妈妈的生日" → 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 提醒 区分:
|
### 纪念日 vs 提醒 区分:
|
||||||
@ -57,9 +73,24 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒
|
|||||||
4. 星期几:"周一"、"周二"... "周日"、"星期天"
|
4. 星期几:"周一"、"周二"... "周日"、"星期天"
|
||||||
5. 具体日期:"3月8日"、"5月1日"、"10月1日"
|
5. 具体日期:"3月8日"、"5月1日"、"10月1日"
|
||||||
|
|
||||||
### 时间识别:
|
### 时间识别(非常重要):
|
||||||
- "上午9点"、"下午3点"、"晚上8点"、"14:30" → 转换为对应小时
|
- "上午9点" → 09:00:00Z
|
||||||
- 如果没有指定具体时间,默认使用 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"
|
- "每天" → repeat_type = "daily"
|
||||||
@ -105,7 +136,8 @@ const SYSTEM_PROMPT = `你是一个帮助用户创建事件(纪念日或提醒
|
|||||||
- 解析用户真实意图,不要编造日期
|
- 解析用户真实意图,不要编造日期
|
||||||
- 如果用户说"下周三",必须是真正下周星期三,不是今天也不是上周
|
- 如果用户说"下周三",必须是真正下周星期三,不是今天也不是上周
|
||||||
- 如果用户没有明确日期,使用合理的默认日期(通常是明天或用户提到的第一个日期)
|
- 如果用户没有明确日期,使用合理的默认日期(通常是明天或用户提到的第一个日期)
|
||||||
- 标题要简洁准确,去除"提醒"、"帮我"等前缀`;
|
- 标题要简洁准确,去除"提醒"、"帮我"等前缀
|
||||||
|
- 绝对禁止将"X点后"理解为"X小时后"!例如"8点后"意思是"8点",不是"8小时以后"`;
|
||||||
|
|
||||||
const parseMessageSchema = z.object({
|
const parseMessageSchema = z.object({
|
||||||
message: z.string().min(1, 'Message is required').max(1000),
|
message: z.string().min(1, 'Message is required').max(1000),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user