AI 回复比用户提问还早?一个空字符串引发的“时间倒流“
我今天在查 AI 聊天记录时看到一条很离谱的数据assistant message 的 created_at 竟然比触发它的 user message 还早。AI 难道会时间倒流当然不是。最后查下来根因居然是一个空字符串id 。项目背景:考虑需要快速开发,以及方便定位问题和拓展新需求,所以该项目的技术栈选用的是 Next.js Vercel AI SDK Supabase。服务端持久化消息:用户消息在流式响应前存,assistant 消息在 onEnd 回调里用 upsert(..., { onConflict: id }) 存。UI 一切正常,数据库里却是另一个世界。问题一:数据库里 assistant 消息的 id 是空字符串我在 Postgres 表结构中将 id 设置的属性为 primary key。PRIMARY KEY 隐含 NOT NULL,我以为空值必然被拦住。但是居然出现了毫无报错,但是 assistant 的 id 为空字符串的情况。后面我才发现,PRIMARY KEY 能拦住 NULL但拦不住 。在 Postgres 眼里 是一个合法字符串。想要真正的保护得加 CHECK 约束:ALTER TABLE chat_messages ADD CONSTRAINT id_not_empty CHECK (length(trim(id)) 0);问题二:为什么会出现 id 为空字符串的情况根因:AI SDK 只有在你传了 generateMessageId 时才会生成服务端消息 id。不传的话,SDK 内部直接兜底:messageId: messageId ! null ? messageId : 于是持久化回调里拿到的 responseMessage.id 就是 。start chunk 只有在你传了 generateMessageId 时才会带 messageId。不传的话,服务端这份 id 永远不会被覆盖。问题三:时间倒流的真相每一轮 assistant 消息的 id 都是 ,onConflict: id 的 upsert 让它们全部撞到同一行。用一个时间线看会更明显:事件写入 id数据库动作created_at第一次 assistant 回复INSERT 一行10:00第二次 user 提问msg_user_2INSERT 新行10:05第二次 assistant 回复命中同一个主键,UPDATE 旧行仍然是所以并不是 assistant 真的早于 user,而是第二次 assistant 回复没有创建新记录,而是覆盖了第一次那条 id 的旧记录。created_at 记录的是这行数据第一次 INSERT 的时间,不会因为后面的 UPDATE 自动变成当前时间。这就是时间倒流的真相:表面上是时间戳异常,本质上是所有 assistant 回复都被 upsert 到同一行,历史回复一直在被静默覆盖。这不是展示问题,而是数据丢失。那我们应该怎么办?核心修复是让服务端明确生成 assistant message id。比如:import { createIdGenerator } from ai; createAgentUIStreamResponse({ agent, uiMessages: messages, generateMessageId: createIdGenerator({ prefix: msg, size: 16, }), onEnd: async ({ responseMessage }) { await saveMessage(responseMessage); }, });这样 AI SDK 在创建 assistant response message 时,会给它一个稳定的服务端 id,onEnd 里拿到的 responseMessage.id 就不再是 。如果涉及续写已有 assistant 消息,再配合 originalMessages 使用,让 SDK 正确判断这次是在延续旧消息,还是创建一条新的 assistant 消息。数据库层也要加一道兜底,不要让空字符串 id 再混进来:ALTER TABLE chat_messages ADD CONSTRAINT id_not_empty CHECK (length(trim(id)) 0);前者解决源头,后者防止同类坏数据再次入库。最后这个 bug 反而验证了我当初的选型。我选 Vercel AI SDK 就是看中它够薄——出问题时可以直接读源码。这次从症状 → 持久化回调 → SDK 内部 → 根因,只花了几分钟。换成重型黑盒 Agent 框架,同样的问题可能要查比较久。几条教训:用 AI SDK 做服务端持久化,一定要传 generateMessageId(续写场景再加 originalMessages)PRIMARY KEY / NOT NULL ≠ 非空字符串我正在公开构建一个 AI 会议总结应用,这是开发记录的第一篇,后续会持续分享踩坑实录和从 demo 走向生产的全过程。欢迎关注,一起见证它上线。

相关新闻

框架表示法 vs 产生式规则:5 个维度对比结构化与因果式知识建模

框架表示法 vs 产生式规则:5 个维度对比结构化与因果式知识建模

框架表示法与产生式规则:5个维度解析结构化与因果式知识建模的抉择在构建专家系统或业务规则引擎时,知识表示方法的选择往往决定了系统的表达能力、推理效率和维护成本。框架表示法与产生式规则作为两种经典的知识建模范式,分别代表了结构化思…

2026/7/13 3:20:22阅读更多 →
YOLO26目标检测实战:从环境配置到自定义模型训练完整指南

YOLO26目标检测实战:从环境配置到自定义模型训练完整指南

如果你正在学习计算机视觉,特别是目标检测方向,那么YOLO(You Only Look Once)这个名字你一定不会陌生。但面对网络上零散的教程、复杂的配置过程和不断更新的版本,很多初学者往往在环境安装这一步就放弃了,…

2026/7/13 3:15:22阅读更多 →
SCI 3/4区目标检测论文创新:YOLO与RT-DETR五大改进方向

SCI 3/4区目标检测论文创新:YOLO与RT-DETR五大改进方向

1. 先搞清楚SCI 3/4区论文对目标检测创新的真实要求写SCI 3/4区论文,最怕的就是花几个月时间做实验,最后审稿人说“创新性不足”。YOLO和RT-DETR这两个方向,现在投稿的人太多了,单纯跑个公开数据集、调几个参数,基本没…

2026/7/13 3:15:22阅读更多 →
内存不够用了怎么办?大模型正在“倒逼”一场产业革命

内存不够用了怎么办?大模型正在“倒逼”一场产业革命

当算力不再是唯一瓶颈,内存稀缺正在成为大模型发展的“隐形天花板”。而打破这堵墙的,不是闭源巨头,而是一群“轻装上阵”的开放模型。AI产业的游戏规则,正在被重写。 这是什么 最近,一篇来自 arXiv 的前沿研究&#…

2026/7/13 4:30:30阅读更多 →
Word 公式编辑器排错:Shift+Enter 失效与对齐点丢失的 2 种修复方案

Word 公式编辑器排错:Shift+Enter 失效与对齐点丢失的 2 种修复方案

Word 公式编辑器排错:ShiftEnter 失效与对齐点丢失的 2 种修复方案当你在 Word 中编辑复杂的数学公式时,突然发现 ShiftEnter 无法换行,或者右键菜单中找不到"对齐点"选项,这种体验就像写作时钢笔突然没墨一样令人抓狂。…

2026/7/13 4:30:30阅读更多 →
ROS中Time与TF协同机制深度解析:时间戳、坐标变换与分布式系统一致性

ROS中Time与TF协同机制深度解析:时间戳、坐标变换与分布式系统一致性

1. 项目概述:为什么“Time”和“TF”是ROS里最常被低估的硬骨头刚接触ROS的新手,往往把精力全砸在话题(Topic)、服务(Service)和动作(Action)上——毕竟它们有明确的输入输出、能立刻…

2026/7/13 4:30:30阅读更多 →
Python字典底层原理与高效实战:哈希表、有序性与性能优化

Python字典底层原理与高效实战:哈希表、有序性与性能优化

1. 为什么字典是Python里最值得花时间吃透的数据结构刚学Python的人,常把list当万能筐,什么数据都往里塞;等写到第三个项目,突然发现代码越来越慢、逻辑越来越绕,调试时print满屏跑——十有八九,是该换用di…

2026/7/13 4:30:30阅读更多 →
AI偏差探测器:从数据到部署的三层实战审计方法

AI偏差探测器:从数据到部署的三层实战审计方法

1. 项目概述:当算法开始“偏心”,我们得先学会认出它“Biased Machines and Where to Find Them”——这个标题不是科幻小说的副标题,而是我在过去五年里参与过17个AI系统审计项目后,写在笔记本第一页的真实工作信条。它直白、带点…

2026/7/13 4:30:30阅读更多 →
马斯克终于对 OpenAI 动手了:Grok 4.5 联手 Cursor,这是要抢金融和法律饭碗?

马斯克终于对 OpenAI 动手了:Grok 4.5 联手 Cursor,这是要抢金融和法律饭碗?

航天巨头 SpaceX 不做火箭了?不,它和代码编辑器 Cursor 联手搞了个大模型 Grok 4.5,直接杀入金融、法律等企业级 AI 市场。这不是玩票,这是马斯克第一次系统性地向 OpenAI 和 Anthropic 的“钱袋子”宣战。 这是什么 7 月 9 日&a…

2026/7/13 4:25:30阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/12 0:02:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/12 0:02:11阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →