SuperAPI AI 工具集

tanstack-ai-persistence-build-custom-adapter

数据与分析

查看项目

更新于 10-16 00:02

技能介绍

用途:当应用需要在没有专用方案的数据库上实现 TanStack AI 聊天持久化时,本技能指导在应用内新建一个文件 src/lib/chat-persistence.ts,导出基于应用已有数据库客户端构建的 ChatPersistence,并通过应用现有迁移流程添加所需 DDL。不要新建包、第二个客户端或迁移运行器。

路由判断:若应用已使用 Drizzle ORM、Prisma 或 Cloudflare Workers + D1,应改用对应专用技能;其余情况适用本技能。

主要能力与结构:需实现四类逻辑记录——thread(键 threadId,含完整消息数组)、run(键 runId,含 threadId、status、startedAt、finishedAt、error、usage、sandboxKey、detachedSince、cancelRequested、driverEpoch 等)、interrupt(键 interruptId)、metadata(复合键 namespace+key)。时间戳在记录中为 epoch 毫秒。run.error 是结构化 RunError(message 与可选 code),SQL 表建议拆为 error、error_code 两列。run.status 取 running、interrupted、completed、failed、aborted,其中 interrupted 是暂停而非终态。

关键不变量:saveThread 为全量覆盖而非追加;loadThread 对未知线程返回 [];createOrResume 为 insert-if-absent,已存在 runId 原样返回;runs.update 对未知 id 静默无操作;对 sandboxKey、detachedSince、cancelRequested、driverEpoch 需区分“字段省略”与“显式清空”,用 'field' in patch 判断;interrupts.create 为 insert-if-absent;list* 按 requestedAt 升序;listReclaimable 使用包含式截止时间。

使用方式:用 defineAIPersistence 组装四个 store,标注为 ChatPersistence;若客户端为按请求创建,则导出工厂函数。可用 composePersistence 与 memoryPersistence 只覆盖部分 store。在聊天路由中通过 withPersistence(chatPersistence) 接入,并在路由层做线程授权。

验证:使用 @tanstack/ai-persistence/testkit 的 runPersistenceConformance 指向一次性数据库运行,声明所有有意省略的 store 与可选方法。

限制:无跨 store 事务;未实现的必需方法会导致测试失败;具体驱动细节需参考对应文档与示例。