SuperAPI AI 工具集

tanstack-ai-core-locks

通用与其它

查看项目

更新于 10-16 00:01

技能介绍

用途:为 TanStack AI 提供锁协调能力,解决“当前谁可以运行这段临界区”的问题,与回答“哪些是持久化聊天数据”的状态存储相互独立。锁不属于 AIPersistence.stores,也不通过 composePersistence 组合,而是随 @tanstack/ai 发布。

主要能力:withLocks 是一个提供 LocksCapability 的 ChatMiddleware,供下游中间件(如 sandbox)消费。LockStore 契约定义 withLock(key, fn),按 key 串行化持有者,并通过 AbortSignal 向临界区传递租约丢失信号。InMemoryLockStore 随 @tanstack/ai/locks 提供,基于每 key 的 promise 链,仅在单进程内正确。

使用方式:从 @tanstack/ai/locks 导入 withLocks 与 InMemoryLockStore,放入 middleware 数组;可与 withPersistence 并用,但锁不依赖持久化。自定义存储用 defineLock 定义后交给 withLocks,在 withLock 内获取 key、执行 fn、在 fn 结束后释放。中间件顺序通常状态在前,锁并列或靠后,取决于谁消费该能力。

适用场景:多写入者竞争同一线程或资源时,自行按线程或其他粒度加锁;需要跨实例互斥时需自行实现分布式锁存储,Cloudflare Durable Object 方案见 ai-persistence/build-cloudflare-adapter。

限制与常见错误:不要从 @tanstack/ai-persistence 导入锁;不要把锁放进 AIPersistence.stores 或 composePersistence 覆盖项;不要把 'locks' 传给一致性测试套件的 skip,该套件不覆盖锁,需单独测试租约过期与中止。InMemoryLockStore 跨进程无互斥,且其信号永不中止。回调必须遵守 signal 并传递给可取消依赖,否则丢失租约后继续工作会与其他持有者竞争。