这类问题我又碰上了一次。合同抽取里日期字段返回 2024/3/5、2024年3月5日、05-03-2024 三种写法,写入 PostgreSQL 的 date 列时报 invalid input syntax for type date,单批 1200 条堵在写入环节。
第一反应是「缺归一化层 直接把原字符串入库」,验证下来不成立。
这类报错背后常见的原因有几处,逐个排除就行。schema 只声明 string 没给日期格式;原文本身格式不统一 模型照着抄;时区与日月顺序在部分样本上还有歧义。
动手时先把三种写法各取一条试解析
python -c "from datetime import datetime;print(datetime.strptime('05-03-2024','%m-%d-%Y').date())"
schema 加 pattern 约束日期形态
python patch_schema.py --field date --pattern '^\\d{4}-\\d{2}-\\d{2}$'
入库前统一走一遍 dateutil 归一
python norm_date.py --field date --tz Asia/Shanghai --out clean.jsonl
等前面都确认过,再把归一失败的样本单独落盘复核
grep -c '"date": null' clean.jsonl
这类问题以前遇到过,但这次的触发条件和上次不一样。
改完先别撤,确认这几项。1200 条全部写入成功,date 列无非法值,抽检日期与原文一致,日月没有颠倒。
容易忽略的是,日期是最容易被模型自由发挥的字段,schema 里的格式约束比事后补正则省事。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
