TanStack AI——未采用
决定(所有者,2026年10月3日): web 现在不采用 TanStack AI。等它到 1.0 时,或者出现一个会话消息流之外的聊天功能时,再重新评估。没有 ADR:没有任何结构性的变化。
它是什么
一组用于构建聊天界面的包(@tanstack/ai、@tanstack/ai-client、@tanstack/ai-react,MIT):客户端有一个带流式传输和消息队列的 ChatClient,服务器端有一个与 LLM provider 对话的 chat()。
测量了什么(2026年10月3日)
apps/web没有@tanstack/ai*依赖——只有 React Query 和 Router。- 当天的版本:
@tanstack/ai0.64.0、@tanstack/ai-client0.36.1、@tanstack/ai-react0.29.4。项目页面标注为 Alpha,几乎每天都有新版本。 - 自有连接是可行的(
ai-client的connection-adapters.d.ts中的ConnectConnectionAdapter/SubscribeConnectionAdapter)。只使用客户端的话,不会有任何 LLM 调用绕过 Harness、路由器或计量。
为什么不
- Phoenix 通道不说 AG-UI:它承载的是
agent.delta、agent.done、agent.status和tool.call(apps/web/src/lib/session-channel.ts)。采用它需要一个翻译层,或者修改七个对话式服务器。 - 点击在接受时就响应,回合的结束经由通道和日志到达(RN-578、ADR 0163、
apps/web/src/lib/session-turno.ts中的acompanharTurnoPeloLog)。 ChatClient的消息队列(whenBusy: 'queue')与存在于日志中的队列冲突(RN-673、ADR 0191)。- 每个对话一个助手,而我们的消息流有多个 agent 和显式的收件人(RN-584、RN-631)。
- 活动条和回合的步骤来自日志(RN-460、AT-395)。
- RN-639 的按 token 隔离(
SessionPage.streaming-isolado.test.tsx)会面临风险。 - 消息流的截断和经由日志的重新水合(RN-644、RN-580)得不到任何好处。
唯一的收益是替换 apps/web/src/lib/streaming-do-turno.ts 的 store。
任何未来采用中都禁止的
- TanStack 服务器的
chat():它直接与 provider 对话,绕过 Harness、路由器和计量。 - 该包的 BYOK:浏览器中的 API 密钥违反 RN-058(agent 花费的是 workspace owner 的密钥,由 api 加密保存)。
何时重新评估
- TanStack AI 到达 1.0;或者
- 出现一个会话消息流之外的聊天功能。