SuperAPI AI 工具集

tanstack-ai-memory-redis

智能体与模型

查看项目

更新于 10-16 00:02

技能介绍

用途:为 @tanstack/ai-memory 提供生产可用的 recall/save 适配器,底层使用普通 Redis,不要求向量索引,排序在客户端完成(词法、可选余弦、时间新近度与重要性)。

主要能力:redis() 接受与 inMemory() 相同的 topK、minScore、kinds、embedder、extract 选项。存储模型为 {prefix}:record:{id} 保存 JSON 记录,{prefix}:index:{tenantId 或 _}:{userId 或 }:{threadId} 保存 Set<id>。save 写入记录并加入作用域索引集合,recall 加载集合、打分并渲染。作用域值中的 :、\、 会被转义,避免分隔符或未设置占位符导致作用域冲突。

使用方式:需自带 Redis 客户端。ioredis 可直接接入:const client = new Redis(process.env.REDIS_URL); const memory = redis({ redis: client, prefix: 'myapp:memory' }); memoryMiddleware({ adapter: memory, scope })。node-redis v4+ 需用 fromNodeRedis 包装:const client = createClient({ url: process.env.REDIS_URL }); await client.connect(); const memory = redis({ redis: fromNodeRedis(client), prefix: 'myapp:memory' })。node-redis 使用 camelCase API(sAdd、mGet),fromNodeRedis 将其转换为小写 RedisLike 形状;直接传原始 node-redis 客户端会抛出 client.sadd is not a function。

限制:无旧索引布局的双读,若此前以不同形状写入(如无 tenantId),需重建索引或清空,旧键会成为孤儿。读写必须传入相同的 tenantId/userId/threadId,缺失的可选维度会变成 _,省略不等于“匹配任意”。排序在客户端进行,recall 会把该作用域全部记录加载进 Node 再打分,每作用域约 1 万条以内表现良好,超出应基于相同 recall/save 契约编写支持向量索引的适配器。跨进程不可见时,确认各进程使用相同 REDIS_URL 与 prefix。JSON 无法解析的行在读取时被跳过且保留不删除,每个坏 id 会触发一次 console.warn,需修复或删除对应的 {prefix}:record:{id} 键。