技术解构 2026-10-24 24 分钟阅读 进阶

TanStack AI 1.0 架构解构:把「不锁定」做成稳定 API,再把智能体会话做成可恢复的

十个月前它是一个 chat 函数加四个模型适配器,10 月 23 日它长成了 23 个适配器、八套 UI 框架、11 个沙箱供应商的工具箱,并附带一个明确标着实验的 Harness。本文拆开它的两层版本策略为什么这样切、持久会话的三条机制各自解决了什么以及没解决什么、threadId 从可选变必需背后那次所有权转移,并给出五条本文推算的增量判断

摘要

2026 年 10 月 23 日,TanStack 发布 TanStack AI 1.0。团队给 1.0 下的定义相当克制:稳定的是核心 API,覆盖 chat、tools、media、MCP、persistence、sandboxes 与 agents;同期发布的 @tanstack/ai-harness 则单独以 0.x 版本发布,官方明确标注其 API 可能在次版本内变更。规模读数是:模型适配器从 4 个增至 23 个外加一个面向任意 OpenAI 风格接口的 openaiCompatible;UI 框架从 React、Solid 与原生 JS 三套扩到 React、Vue、Solid、Svelte、Preact、Angular、Octane、Remix 与原生 JS;沙箱供应商从零增至 11 个;编码智能体支持覆盖 Claude Code、Codex、OpenCode、Grok Build 以及任何 ACP 智能体。团队仍由三名维护者构成,累计 143 人提交过代码,OpenRouter 自项目起步即提供支持。本文的重点不在复述这份清单,而在四件事:稳定与实验那条分界线为什么正好画在 Harness 上;持久会话靠会话日志、可恢复等待与单宿主归属三条机制落地,而官方文档同时写明内存态的子智能体等待无法跨宿主恢复;threadId 变为必填且客户端与服务端都不再自动生成,意味着会话标识的所有权从框架转移到了应用;以及端到端测试用确定性模型夹具而不是实时 API 调用,这个工程选择如何应对适配器与沙箱的笛卡尔积。文末给出五条增量判断与一份采用清单。

背景:智能体框架的竞争点从「能不能跑」转到「跑多久」

2025 年这一波智能体框架首先要解决的问题是连通性:怎么把一个模型、一批工具和一段上下文拼起来,跑出一个能用的循环。到 2026 年,连通性已经不是瓶颈,真正拉开差距的是会话能持续多久、能不能在崩溃与发布之后接着跑、以及换模型换沙箱时有多少代码要重写。

TanStack AI 从立项起就把第三个问题当成卖点,官方原话是「永不锁定」。这句话在 1.0 里被拆成了四个可分别选择的东西:模型供应商、UI 框架、沙箱,以及它们之间的线协议。值得注意的是,1.0 并没有把这个承诺升级成「我们替你选好」,而是把它固化成了接口契约——你仍然要自己选,但选完之后不必重写。

理解这一点很重要,因为它解释了本文后面会反复出现的那个结构:TanStack AI 在功能上扩张得很凶,但在 API 上收缩得很谨慎。1.0 公告里有一句容易被忽略的话——1.0 没有引入新概念,团队只是把 0.x 里所有被标记为弃用的 API 全部移除,而每一个替代方案在 0.x 时代就已经交付了。

🧭 定位澄清:1.0 稳定的是核心,Harness 明确处于实验状态

官方公告与文档都写明了这一分层:核心 API 稳定且可用于生产;@tanstack/ai-harness 与 @tanstack/ai-harness-cli 以 0.x 发布,其他包中的 Harness 入口点(例如 ai-skills 与 ai-acp 下的对应入口)同样是实验性的,可能在次版本内发生变更。任何把 Harness 直接放进关键生产链路的计划都需要自己承担这个变更风险。目前官方及行业暂未披露更多细节,后续将持续跟进迭代动态。

两层版本策略:稳定的是契约,不是功能集合

多数框架发 1.0 时的潜台词是「功能齐了」。TanStack 这次给出的定义不一样:1.0 是对你所依赖的那批 API 的正式承诺。这个措辞把稳定的对象从功能集合挪到了接口契约上,带来的直接后果是功能可以继续快速加,只要不破坏契约。

这条界线画在哪里,是本文认为这次发布里信息量最大的一个决策。Harness 被单独留在 0.x,理由在文档里写得很直白:它是整套工具箱里最新的一块,团队希望在锁定 API 之前先把它交到用户手里,然后「告诉我们哪里会坏」。

从采用角度看,这条界线给出了一个相当清晰的操作路径:核心层可以进生产,Harness 层适合进试点。它同时也意味着,至少在 Harness 转稳定之前,任何基于它的长期架构都需要预留一层自己的封装。

从 alpha 到 1.0:一组可核对的增长读数

官方给出了一张 alpha 与 1.0 的对照,这是本文认为少数几个值得原样引用的表格之一,因为它把「扩张了多少」变成了可核对的数字,而不是形容词。

维度Alpha(2025 年 12 月)1.0(2026 年 10 月)
模型适配器4 个23 个,外加 openaiCompatible 覆盖任意 OpenAI 风格接口
UI 框架React、Solid、原生 JSReact、Vue、Solid、Svelte、Preact、Angular、Octane、Remix、原生 JS
编码智能体无Claude Code、Codex、OpenCode、Grok Build 及任意 ACP 智能体
沙箱供应商无11 个

时间线同样公开:2025 年 12 月 alpha 发布,两周后的 Alpha 2 补齐了全模态;随后是一段被团队自己称作「重写之冬」的时期,ai 函数在投入八天工作后被砍掉,适配器被拆成可树摇的小块;2026 年春加入中间件、实时语音、Code Mode、流式结构化输出与完整的 AG-UI 合规;6 月加入 MCP、发布 Beta、在 Open Source Awards 获评年度 AI 项目,并支持在沙箱中运行编码智能体;8 月发布 RC 并锁定架构;10 月发布 1.0。

团队规模是这张表里没有但应当被一起读的数字:维护者仍是三人,贡献者 143 人。这个比例既是社区健康度的证据,也是集中风险的来源——三名维护者要覆盖 23 个适配器与 11 个沙箱的兼容性,是这套架构最现实的脆弱点。

稳定核心覆盖哪几块面

1.0 声明进入稳定状态的面有七块:chat、tools、media、MCP、persistence、sandboxes、agents。把它们放在一起看,能看出一条清晰的分层——chat 是请求响应循环,tools 是能力边界,media 是模态,MCP 是对外协议,persistence 是状态,sandboxes 是执行环境,agents 是编排层。

其中 persistence 进入稳定这件事,是 Harness 能做持久会话的前提。如果状态层本身还在变,会话层就没有可依赖的地基。这也部分解释了为什么 Harness 必须单独留在实验状态:它站在最上面那层,下面任何一层的语义变化都会传导到它。

官方还提到一个容易被忽略的工程细节:端到端测试在每个拉取请求上运行,针对的是确定性模型夹具,不发起真实 API 调用。这句话的实际含义是,23 个适配器乘以若干工具执行流所构成的组合矩阵,是通过把模型输出固定住来测的。测的是适配与执行的机械正确性,不是模型的实际表现。这个取舍很务实,但也意味着测试通过不代表某家供应商的实际响应格式一定没问题——尤其是那些改动频繁的供应商。

Harness 的执行模型:定义一次,按会话打开

chat 函数解决的是一次请求一次响应,这在聊天框里够用,但对编码智能体、客服机器人或媒体工作室不够:它们需要一个保持打开的会话,能在工作过程中接收新消息、能派生别的智能体、能在一次发布之后活下来。

Harness 的模型因此分成两步:先以 defineHarness 用与 chat 函数相同的参数定义一次,得到一个具名的 Harness;再由 createHarnessHost 起一个宿主,按 threadId 为每路会话 open 出一个 session。会话用 send 发送消息,用 onEvent 订阅标准 AG-UI 事件。

这个模型里有一个设计值得单独拎出来:send 支持 steer 模式。它意味着用户可以在智能体正在工作的过程中插话,这条消息会在下一次模型调用之前加入正在运行的那一轮;如果当前轮已经结束,它就成为下一轮的输入。与之相对的是 follow-up,它会等到当前工作完成才被处理。把「插话」和「排队」做成两个显式模式,而不是统一塞进消息队列,是这套执行模型里少见的一处对用户意图的细分。

持久会话的三条机制与它们的边界

官方把 session 提供的能力列了六项,其中前三项构成了持久化的核心,本文把它们拆成三条机制来看。

机制解决什么官方写明的边界
会话日志每个 thread 拥有一份日志;只要给宿主一个能扛住重启的存储,被崩溃或发布切断的那一轮可以在下一个宿主上继续同一时刻只有一个宿主拥有某个 thread
可恢复等待审批、提问、登录会把运行停下来等,等待状态落在日志里;任何服务器都能在重启之后接走这个回答内存态的子智能体等待无法跨宿主恢复
凭据与多用户访问规则、团队共享的 thread、按用户各自的供应商密钥文档示例默认用内存持久化,生产需要自备持久存储

第三条机制里的那句边界声明值得放大:官方明确写了「仍然存在恢复限制,包括内存态的子智能体等待无法跨宿主恢复」。这句话的含金量在于它把「持久」这个词拆成了两层——会话日志是持久的,但运行时状态不是全部持久。一个正在等待子智能体返回的父会话,如果宿主换了,这段等待不会自动继续。

对工程来说这直接决定了存储选型不是可选项而是必选项。文档给的例子用的是内存持久化,官方紧接着补了一句:要在重启后恢复,你需要一个能扛住重启的存储。换句话说,开箱配置不具备恢复能力。

插件、子智能体与预算

Harness 的扩展方式是插件:把工具、提示词、中间件、命令与状态打包,然后加载进任意 Harness。官方自带的插件覆盖文件工具、权限、undo 命令、待办列表、compact 命令与用量统计,这一套组合起来已经足够在终端里搭出一个编码智能体。

子智能体在两条路径上都可用:可以从代码里按并行或串行方式调用,带预算与超时;也可以让模型把它们当工具调用。RC 之后新增的能力允许在 chat 与 useChat 中直接把某一轮交给一个具名子智能体,例如 researcher 或 writer,并带上类型化输入与限制。

预算与超时被显式做成参数而不是约定,这一点在多智能体场景下比看上去重要。近期多项评测都指向同一个现象:多智能体系统的开销与收益并不总是成正比。把预算做成一等参数,至少让「花多少」这件事变成可以在代码里写死的选择。

Harness 还能把编码工作交接给 Claude Code、Codex、Grok Build 或任意 ACP 智能体,每个都跑在自己的沙箱里。这条路径把 TanStack AI 定位在了编排层而不是执行层——它不自己做编码,它决定交给谁做、在什么环境里做。

一处定义多处运行:五条入口形态

Harness 被设计成同一份定义可以在多个入口运行,官方给出的命令行形态有五种,这个设计是「不锁定」承诺在运行时侧的延伸。

入口形态适用场景
默认终端里的对话本地开发与调试
-p 参数单条提示词脚本与持续集成
--serve基于 HTTP 的会话协议自建后端服务
--acpACP 智能体编辑器集成,如 Zed
--mcpMCP 服务器接入 Claude Code 与 Cursor 等 MCP 宿主

其中 acp 与 mcp 两个入口是按需加载的,只有真正用到时才会引入对应包。这个细节在处理依赖体积的前端工程里不是小事。

在 Web 应用中,createHarnessHandler 通过 HTTP 提供会话,handleHarnessSocket 通过 WebSocket 提供。运行路由讲的是标准 AG-UI 事件,因此 useChat 可以直接对接一个 Harness,并且支持审批与页面刷新后重新加入正在运行的那一轮。

RC 之后落地的新能力

架构在 8 月的 RC 中锁定,此后两个月是纯功能开发。按官方分类,落地的内容可以归到四组。

智能体相关:chat 与 useChat 中的子智能体;decide 函数用于类型化的选择、打分与布尔决策;Portable Agent Skills 让任何支持工具调用的模型在需要时加载 SKILL.md 技能文件;Compaction 用于把长会话压在上下文上限之内,并在供应商提供原生压缩时优先使用;computer use 让模型通过截图操作网页,且同一份代码在 OpenAI 与 Anthropic 上都能跑。

模型相关:reasoning 作为一个统一选项在所有供应商上一致工作并按模型分别定型;自动提示缓存,且工具或系统提示词在会话中途变更不会丢失缓存;retry 用于应对限流;历史可以跨模型重放,让一段会话迁移到另一个模型;各家的 Files API 收敛到同一个接口。

MCP 相关:createMCPServer 把 TanStack 工具以 MCP 服务器的形式暴露给 Claude Desktop、Cursor 与任意 MCP 宿主;工具过滤器、审批与基于任务的工具;WebMCP 双向可用,浏览器智能体可以调用你的客户端工具,你的聊天也可以使用页面提供的工具。

供应商、框架与沙箱:新增 Cloudflare Workers AI 与 AI Gateway、Lovable AI Gateway、Azure OpenAI、World Labs Marble、TypeSafe、Ollaya 等适配器;Remix 3 支持与 Svelte 开发者工具;新增 Blaxel、Upstash Box、E2B、boxd、Railway 五个沙箱供应商。

构建与测试:类型化的无头聊天 UI 工厂,可为任意框架写自定义适配器;fakeText 可在无网络无密钥的情况下测试 chat、工具与中间件;以及给你的编码助手用的 Agent Skills,让 Claude Code 或 Cursor 按你安装的版本写出正确的 TanStack AI 代码。

升级路径与真实代价

官方给出的升级步骤是四步:跑 codemod、把稳定包一起升到 1.0 同时移除三个没有 1.0 版本的 UI 包、跑类型检查逐个修、按指南处理 0.x 遗留的存储数据。本文认为真正需要提前评估的是后面三项。

其一是 threadId。它从可选变成了浏览器端与服务端都必填,且两侧都不再自动生成。浏览器端需要为每个会话传入一个稳定标识,例如路由 ID 或数据库 ID;服务端需要传入客户端发来的那个值。codemod 无法自动添加 threadId,因为它不知道你的 ID 从哪来。这一改动的实际含义是:会话标识的所有权从框架转移到了应用。它既是持久化能够工作的前提,也是这次升级里无法由 codemod 自动处理的部分。

其二是三个 UI 包的移除:ai-react-ui、ai-solid-ui 与 ai-vue-ui 没有 1.0 版本,官方要求改用对应的 createChatHook 自行构建 UI。如果你的界面依赖的是这几个包的现成组件,这次升级等于一次界面重写。

其三是存储数据迁移。官方明确警告,通过类型检查并不等于迁移了已存储的会话、运行记录与文件,部署前必须按指南执行存储数据的处理步骤。对已经有线上会话的系统来说,这一步的风险高于前两项的总和。

另外还有两处需要改代码:addToolApprovalResponse 被移除,改为解析工具审批中断;自建服务端如果向客户端流数据,停止发送 DONE 标记,改用 RUN_FINISHED 事件结束运行。

本文推算:五条增量判断

以下五条是本文基于公开材料做的推算与判断,原文并未直接给出,仅供参考。

其一,稳定的对象是契约而不是功能,这决定了 1.0 之后的功能扩张速度不会下降,反而可能加快,因为新增功能不必再承担破坏性变更的代价。对使用者来说,这意味着「升到 1.0 就安心了」这个直觉需要修正为「核心可以安心,边界仍会移动」。

其二,threadId 变必填且双侧不自动生成,是一次明确的所有权转移。它换来的是持久化能力,代价是应用必须自己承担会话标识的生成、稳定与去重。这个交换在架构上是对的,但很多团队会在迁移阶段低估它的工作量,因为它牵涉到路由、数据库与客户端三处。

其三,恢复能力是分层的,不是二值的。会话日志可以恢复,内存态的子智能体等待不能。因此在设计多智能体流程时,凡是跨宿主必须活下来的等待,都应该被显式建模为会话日志中的事件,而不是依赖运行时内存。

其四,端到端测试用确定性模型夹具,是对适配器与沙箱组合爆炸的务实应对。它保证了机械正确性,但不保证供应商的实际兼容性。工程上应当在这个测试层之外,另建一层低频的真实调用冒烟测试,专门盯那些改动频繁的供应商。

其五,三名维护者覆盖 23 个适配器与 11 个沙箱,是这套架构最现实的集中风险。选择供应商时,除了看是否在列表里,还应看该适配器最近一次实质性提交的时点,以及是否有活跃的独立贡献者在维护。

冷静判断:它改变了什么,没改变什么

它改变的是选择权的成本模型。在 1.0 之前,换模型或换沙箱往往意味着重写编排层;现在这件事被压缩成了换一个适配器包。对那些必须同时支持多家供应商、或者需要在公有云与私有部署之间来回迁的团队,这个变化是实打实的。

它没有改变的是智能体本身的能力上限。TanStack AI 不提供模型,也不提供智能体的规划与记忆能力,它提供的是把这些东西接起来并跑久一点的管道。会话能持续多久、能不能恢复,是它能负责的部分;会话里的决策质量如何,仍然取决于你选的模型与你写的提示词。

最需要留意的是版本策略带来的采用节奏。核心与 Harness 分处在稳定与实验两侧,这个分层是诚实的,但也意味着一个完整的产品级智能体应用,至少在当下仍需要自己维护一层对 Harness 的封装。官方在公告结尾写的是「接下来先打磨,然后是支持,最后把 Harness 推到稳定」,这条路线是否按期兑现,目前官方及行业暂未披露更多细节,后续将持续跟进迭代动态。

核心发现

参考来源

  1. TanStack 官方博客 —《TanStack AI 1.0: Still Your AI, Still Your Way》(2026 年 10 月 23 日;含 alpha 与 1.0 对照表、完整时间线、Harness 代码示例、session 六项能力清单、恢复限制声明、五种命令行入口、RC 后新增能力分组、四步升级步骤与 threadId 变更细节、实验性 API 声明)
  2. AI Frontier Post —《TanStack AI hits 1.0: the lock-in-free agent toolkit goes stable》(2026 年 10 月 23 日;含发布署名维护者名单、23 适配器与 8 UI 框架与 11 沙箱的规模口径、三个被移除的 UI 包名、Harness 插件清单、OpenRouter 支持与获奖信息)
  3. TanStack AI 官方文档与升级指南入口(用于核对 Harness 的实验状态声明、codemod 命令形式、threadId 在浏览器端与服务端的具体用法差异、存储数据处理步骤)
  4. TanStack 官方博客历史条目与 GitHub 仓库公开信息(用于核对 2025 年 12 月 alpha、2026 年 6 月 Beta 与 MCP、8 月 RC 的时间节点,以及贡献者计数)
  5. 本栏目此前研究 — R-TECH-43《Google Harness² 递归智能体架构解构》、R-TECH-39《Builder.io Agent-Native 六面投射架构解构》(用于把 Harness 层优化与一处定义多处运行的设计放在同一坐标下对照)