ai-sdk-tools
围绕 Vercel AI SDK 的 9 合 1 生产工具箱,覆盖状态管理、多 Agent 编排、持久化记忆和可视化调试
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
围绕 Vercel AI SDK 的 9 合 1 生产工具箱,覆盖状态管理、多 Agent 编排、持久化记忆和可视化调试
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否有过这样的经历:花了大半天接好了大模型 API,结果发现对话状态管理一团乱麻、调试全靠 console.log、流式输出没法结构化、想把结果渲染成 React 组件却无从下手?midday-ai/ai-sdk-tools 正是为解决这些痛点而生的——它是一套围绕 Vercel AI SDK 的工具箱,将生产级 AI 应用中最常见的 9 类需求抽象为独立可插拔的 npm 包,让开发者从重复造轮子中解放出来。

图1:AI SDK Tools 整体架构概览
2023 年 Vercel AI SDK 发布后,无数开发者用它快速跑通了 AI 对话 Demo。但当真正要上线一个生产级应用时,问题接踵而至:对话状态怎么在组件间共享?用户刷新页面聊天记录丢了怎么办?工具调用出错了怎么追踪?想把 AI 返回的 JSON 数据实时渲染成图表,Stream 模式下该怎么处理?
Midday 团队在开发同名 AI 协作平台(https://midday.ai)的过程中,亲身经历了这些挑战。他们没有选择继续忍痛堆砌业务代码,而是把通用能力抽离出来,于 2024 年初开源了这套工具库。目前项目已积累 2066 Stars,由 Midday 团队维护,被其自身产品线深度使用。
这是整个工具箱中使用率最高的模块。传统 React 项目中,聊天状态(消息列表、加载状态、错误状态)往往通过 props 层层传递,一旦组件嵌套深了就变成「状态钻井」。store 模块提供了类似 React Query / Zustand 的全局聊天状态管理,内置 useChat、useSelector 等 hooks,开发者无需自行管理 state 的生命周期。更有价值的是它对 useVirtualMessages 的支持——当聊天记录达到数百条时,自动启用虚拟列表,只渲染可见区域,保证 UI 流畅不卡顿。
这是最有技术深度的模块。它的核心思路是:每个 Agent(智能体)本质上是一个拥有独立指令(instructions)、专属工具集(tools)、和路由规则(handoffs)的执行单元。源码 agent.ts 内部基于 Vercel AI SDK 的 Experimental_Agent 构建,扩展出了多 Agent 协作能力:
matchOn 配置,用字符串、正则或自定义函数判断某条消息应该由哪个 Agent 处理在浏览器中嵌入类似「浏览器 DevTools」的 AI 应用调试面板,可以实时查看:Tool 调用链、模型输入/输出 messages、每一步执行的时间线和 token 消耗。UI 基于 Material-UI 构建,带搜索和过滤功能,开发体验直接对标专业 IDE 的调试器。
Vercel AI SDK 原生支持流式文本,但结构化数据(如 AI 返回的 React 组件、图表配置、数据表格)如何实时渲染是个难题。artifacts 模块解决了这个问题:它让 AI 返回的 JSON Schema 定义的结构化数据,通过流式方式逐步渲染为 React 组件。这意味着 AI 可以一边「思考」一边产出可交互的 UI 组件,而不只是返回一段 Markdown。
AI API 调用成本高,对于相同输入(如用户反复询问相同问题),缓存能显著降低成本。cache 模块支持对普通工具调用、流式响应和 artifacts 均实现缓存,零配置接入,原理上基于输入内容的语义哈希做键管理。
让 AI Agent 拥有「长期记忆」。支持多种存储后端:In-Memory(开发调试用)、Upstash Redis(生产级)、Drizzle ORM(自建数据库)。记忆系统会维护工作内存(Working Memory),在每次 Agent 执行时注入相关上下文,实现跨对话的用户偏好和历史信息保持。
为所有模块提供统一格式的调试日志输出,支持分级(debug/info/warn/error)和日志持久化,方便接入 ELK/Sentry 等生产监控系统。
提供图片/文档文字识别能力,作为 Agent 工具集的一员,可让 AI 直接「看懂」用户上传的图片内容。
主包同时导出服务端和客户端所有 API:服务端引入 Agent、artifact、cached 等,客户端引入 useChat、useArtifact、AIDevtools 等。一个包搞定所有导入,简化依赖管理。
整体架构:Monorepo + Bun Workspaces
项目采用典型的 Monorepo 结构:根目录 package.json 定义 workspaces: ["packages/*", "apps/*"],各子包独立发布为 @ai-sdk-tools/{name} 的 npm 包。构建工具选择 Bun 而非 pnpm/yarn,利用 Bun 原生支持 Workspaces 和更快的安装速度。所有包的源码均为 TypeScript,经过 biome 代码格式化,保证代码风格统一。
依赖策略:最小 peer 依赖
各子包仅声明必要的 peer dependency。例如 store 包只依赖 ai(Vercel AI SDK),不捆绑任何 UI 框架;artifacts 只依赖 zod,不引入 React 强依赖。这种设计让包可以自由集成到任何技术栈中,避免依赖冲突。
Agents 模块核心实现
agents/agent.ts 内部封装了 Vercel AI SDK 的 Experimental_Agent,扩展出了 Handoff 机制。Handoff 的实现通过自定义 Tool(handoff.ts 中的 createHandoffTool)和 Handoff Prompt 注入来实现:当模型决定交接时,调用该 Tool 并携带目标 Agent 名称和上下文数据,框架自动将控制权移交给下一个 Agent。streaming.ts 则处理 UI 层面的流式状态更新,包括 Agent 执行状态和 AI 建议的展示。
安装极为简单,一行命令即可:
npm install ai-sdk-tools
然后按需引入需要的模块。文档提供了每个包的独立 README,且配有在线 Demo 网站(https://ai-sdk-tools.dev)。注意项目标注了「Active Development」——breaking changes 可能在版本间出现,生产环境建议锁定版本。
ai 包之上,如果 Vercel 废弃或大幅重构 Experimental_Agent,上游兼容风险较高AI 应用开发工具链正在走向「分工细化」:不是做一个大而全的框架,而是围绕核心 SDK 构建工具生态。AI SDK Tools 的出现填补了 Vercel AI SDK 在状态管理、多 Agent 协作、持久化记忆等生产级功能上的空白。它的模块化设计理念——每个包独立安装、独立使用——也值得其他 AI 开发工具借鉴。随着 AI 应用从「调 API 写 Demo」走向「构建可靠产品」,这类工具箱的需求会持续增长。