如何让LLM精准推断自然语言中的相对星期日期?
用专业日期解析库替代LLM直接解析
别让LLM承担它不擅长的精确计算任务,直接用成熟的日期处理库来解析自然语言相对日期。比如Python中的dateparser或arrow,这类库专门针对自然语言日期场景做了优化,能稳定处理“2天后”“下周四”“上周一”这类表述,准确率远高于LLM。示例代码:from dateparser import parse from datetime import datetime base_date = datetime(2025, 1, 28) relative_date_str = "本周五" result = parse(relative_date_str, settings={"RELATIVE_BASE": base_date}) print(result.strftime("%Y-%m-%d")) # 输出2025-01-31这类库逻辑明确,对月末跨月、跨年相对星期等边界场景的处理更可靠,完全无需依赖LLM的不稳定输出。
若必须结合LLM,做严格结构化输出约束
如果业务场景需要先从复杂文本中提取日期描述,一定要给LLM设定强制输出格式,要求它只输出标准化的相对日期表达式(比如+3 days、next thursday、last monday),而非直接输出具体日期。之后将这个标准化表达式传给日期库计算具体日期。
比如提示词可以明确:“从文本中提取相对日期描述,仅输出标准化格式:如'2天后'转为'+2 days','下周四'转为'next thursday','上周一'转为'last monday',禁止输出其他内容。” 严格限制输出范围后,LLM出错概率会大幅降低,后续交给专业库计算即可保证准确率。添加结果验证环节
无论用库还是结合LLM,都要加一层验证逻辑:比如解析出的日期必须符合相对描述的逻辑(“上周一”必须早于基准日期,“下周四”必须晚于基准日期),若不符合则触发重试或报错。比如解析“上周一”得到了晚于基准日期的结果,直接判定解析失败并重新处理。自定义相对日期映射规则
针对地域化表述(比如“本周五”的定义,部分场景指当前周的周五哪怕已过,部分指下一个周五),可预先定义规则,将模糊的自然语言映射成明确指令传给日期库。比如先判断基准日期的星期数,再定义“本周X”的逻辑:若基准日期早于本周X则取本周的X,若已过则取下一周的X(可根据业务需求调整),将该逻辑封装成工具函数,避免LLM的歧义理解。
内容的提问来源于stack exchange,提问作者user3535901

