tool-ui
将 AI 工具调用的 JSON payload 渲染成交互组件(审批卡片、选项列表、引导问答等),让用户直接在聊天界面内完成操作决策
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将 AI 工具调用的 JSON payload 渲染成交互组件(审批卡片、选项列表、引导问答等),让用户直接在聊天界面内完成操作决策
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
当大语言模型决定调用一个工具——比如搜索航班、生成图表、执行代码——大多数 AI 应用的做法是:直接把一段 JSON 扔给用户,让用户自己解读。这就是为什么你用过的很多 AI 助手,明明「调用了工具」,却对用户毫无感知。
Tool UI 解决了这个问题。它是一套 React 组件库,专注于把 AI 工具调用的 payload(有效载荷)渲染成交互友好的界面组件:审批卡片、多选列表、引导问答、数据表格、图表卡片、多媒体预览……用户不需要懂 JSON,只需要在 UI 上点几下,交互结果会自动「回执」给 AI 助手,形成完整的对话闭环。
想象这样一个场景:AI 助手在对话中调用了一个「机票预订」工具,API 返回了一堆 JSON,包含出发地、目的地、航班号、起降时间、价格、退改签政策。你把这些信息展示给用户,用户会怎么做?
答案是:大部分用户会感到困惑,然后忽略它,继续用自然语言跟 AI 对话——这完全浪费了工具调用的价值。
Tool UI 的做法是:让 AI 开发者只需要在组件库里复制粘贴几个文件,工具调用的结果就变成了一个结构化的「审批卡片」,用户可以直接在聊天界面里选择「确认预订」或「取消」,这个选择会作为 tool receipt(工具回执)自动传回给 AI,AI 继续推进对话。
这个理念贯穿整个项目:工具调用的结果不是数据的展示,而是用户行动的入口。
Tool UI 由 assistant-ui 团队开发和维护。这是一个专注于 AI 对话界面工具链的开源组织,旗下的另一款明星产品 @assistant-ui/react 是一个完整的 React AI 对话 UI 框架。
Tool UI 采用了与 shadcn/ui 完全相同的分发哲学——不是 npm 安装包,而是源代码级的复制粘贴。开发者从官方文档站(tool-ui.com)找到需要的组件,把对应的目录复制到自己的项目中,然后完全拥有这些代码,可以任意修改而不受依赖版本约束。
这种模式在 AI UI 领域非常有意义:AI 工具调用的结构变化很快,如果依赖一个 npm 包来渲染组件,版本更新会非常频繁且难以维护。而直接持有源代码,开发者可以随时按需修改,不怕上游更新破坏自己的 UI。
每个 Tool UI 组件都附带一个 Zod schema,定义了工具调用的预期输入结构。当 AI 发送的 payload 符合 schema 时,组件正常渲染;如果 payload 不符合(比如模型hallucination了参数),组件会优雅降级,而不是直接崩溃。
以 OptionList 组件为例:
options: [{id, label}] → 渲染为可点击选项列表这种「Schema-Validated」的设计理念让 AI 开发者可以在不写额外防御代码的情况下,获得可靠的 UI 表现。
根据源码分析,Tool UI 目前提供的核心组件包括:
| 组件 | 功能描述 | 典型场景 |
|---|---|---|
| Approval Card | 审批确认卡片 | 确认操作、执行高风险动作 |
| Option List | 选项列表 | 替代下拉菜单,支持多选 |
| Question Flow | 引导问答流 | 多步骤表单、复杂决策 |
| Progress Tracker | 进度追踪 | 展示长任务执行阶段 |
| Data Table | 数据表格 | 结构化数据展示与操作 |
| Chart | 图表卡片 | 可视化数据展示 |
| Code Block | 代码块 | 带语法高亮、差异对比 |
| Terminal | 终端模拟器 | 展示 CLI 输出 |
| Image Gallery | 图片画廊 | 多图展示 |
| Geo Map | 地理地图 | 位置信息可视化 |
| Video Player | 视频卡片 | 视频内容嵌入 |
| Link Preview | 链接预览 | URL 元信息展示 |
项目基于 TypeScript + Next.js 16 + pnpm monorepo 构建,核心技术栈:
ai 包)+ Anthropic/OpenAI/MCP providerspackages/agent/ 包提供了 tool-agent CLI,用于快速搭建集成 Tool UI 的 AI coding agent 开发环境。这使得开发者可以在本地快速启动一个支持工具调用的 AI 对话环境,方便调试和开发。
Tool UI 是一个纯前端组件库,不依赖任何后端服务。你只需要:
git clone 仓库到本地pnpm install(需要 Node.js >= 18)pnpm dev 启动本地文档站(默认端口 3000)文档站本身就是一个完整的 Demo 站点,包含了所有组件的交互示例,无需配置任何 API Key 就能浏览。如果你需要体验聊天功能,需要配置 OPENAI_API_KEY(在 .env.example 中有说明),但文档和组件预览完全免费使用。
开发者有两种使用路径:
路径一(推荐):在文档站找到想要的组件,进入组件页面,点击「Copy」按钮,将组件代码粘贴到自己的 React 项目中。组件依赖 shadcn/ui、Radix UI、Tailwind CSS——如果你的项目已经有了这些基础依赖(大多数 AI 应用都有),基本可以开箱即用。
路径二:直接引用 @assistant-ui/react 包作为完整 AI 对话 UI 框架,Tool UI 组件作为其子模块使用。这种方式适合需要完整对话界面的应用。
由于是 Next.js 应用,最直接的部署方式是 Vercel:vercel deploy 一键上线,不需要 Docker,也不需要配置数据库。文档站本身部署在 tool-ui.com,底层正是 Vercel。
项目不提供 Docker 支持,也没有 docker-compose.yml。对于习惯了容器化部署的 DevOps 团队,这可能是需要注意的点——不过由于是纯前端项目,迁移到容器并不困难。
Tool UI 是一个相对早期的项目(当前版本 0.2.0),存在一些需要注意的问题:
1. 文档覆盖不完整 官方文档站提供了组件预览和基本使用说明,但部分组件的高级用法和 API 细节文档仍在完善中。对于复杂的定制需求,可能需要直接阅读源码。
2. 依赖上游 shadcn/ui 的演进 由于基于 shadcn/ui 模式,组件的样式和交互实现与上游深度耦合。如果 shadcn/ui 做出breaking change,可能需要同步更新 Tool UI 组件。
3. Schema 适配成本 Zod schema 虽然提供了类型安全,但也意味着开发者需要为每个工具调用的 payload 设计 schema。对于快速迭代的 AI 应用,前期 schema 设计会增加一定的开发成本。
4. AI 模型输出的不确定性 Tool UI 的设计假设是:AI 模型会按照 schema 生成结构化的 tool result。但在实际使用中,LLM 的输出具有一定随机性,schema 验证失败的情况并不罕见。项目通过优雅降级来处理这些情况,但在复杂场景下,降级后的错误提示质量仍有提升空间。
Tool UI 的出现反映了 AI 应用开发领域的一个大趋势:AI 与用户的交互正在从「纯文本对话」向「结构化交互」演进。
当 AI 能够调用工具时,单纯靠文字描述工具调用的结果已经不够用了——用户需要更直观、更结构化、更可操作的交互界面。Tool UI 提供了一套经过设计验证的组件库,让 AI 开发者不需要从零开始设计工具调用的 UI,大幅降低了「让 AI 工具调用真正可用」的开发成本。
截至目前,该项目在 GitHub 上已获得 726 颗星,被标记为 ai chat components llm mcp ui 等 topics,在 AI UI 组件领域具备一定的影响力。随着 MCP(Model Context Protocol)等工具调用协议的标准化,这类组件库的需求预计会持续增长。
如果你正在开发 AI 应用中的工具调用功能,Tool UI 是一个值得关注的选项——尤其是当你希望用户能够在对话中直接操作工具结果,而不仅仅是阅读文字描述时。
分析时间:2026-06-18 | 项目地址:https://github.com/assistant-ui/tool-ui | 文档站:https://tool-ui.com