← [ BACK_TO_NOTES ]

assistant-ui 架构概览

assistant-ui 的架构学习节点,聚焦 Primitive、Runtime、Adapter 与预构建组件之间的职责分层;框架身份、官网与仓库由 assistant-ui 资源节点承载。

#synthesis #evergreen #frontend #ai

[!info] related notes

assistant-ui 架构概览

本页学习 assistant-ui 内部怎么分层;框架的 canonical 资源身份、URL 与仓库入口统一放在 assistant-ui。

与资源节点的边界

assistant-ui.md 回答“这个项目是什么、去哪里使用”;本页回答“为什么它能把同一套 Chat UI 接到不同后端”。因此这里优先保留稳定的架构心智模型,而不是重复维护版本、官网或营销特性列表。

核心特点

特性说明
组合式原语Thread、Message、Composer、ActionBar 等独立原语,自由组合
流式打字机原生支持 SSE 流式响应,逐 token 渲染
工具调用渲染function calling 结果渲染为 React 组件,支持人工审批
多后端运行时通过运行时抽象层切换 Vercel AI SDK / LangGraph / 自定义后端
TypeScript 强类型运行时 API、工具 schema、消息 part 全部类型化
shadcn/ui 集成CLI 一键添加预样式组件到项目

安装

# 新项目
npx assistant-ui@latest create

# 已有项目
npx assistant-ui@latest init

# 手动安装
npm install @assistant-ui/react @assistant-ui/react-ai-sdk

架构分层

┌─────────────────────────────────┐
│  预构建 UI 组件 (shadcn Thread)  │  ← 开箱即用
├─────────────────────────────────┤
│  原语 (Primitives)              │  ← ThreadPrimitive, MessagePrimitive...
├─────────────────────────────────┤
│  运行时 (Runtime)               │  ← useChatRuntime, useLangGraphRuntime...
├─────────────────────────────────┤
│  后端集成 (Adapters)            │  ← Vercel AI SDK, LangGraph, 自定义 SSE
└─────────────────────────────────┘

Radix 风格:每个原语都是独立的 headless 组件,开发者掌控布局和样式,原语负责行为和状态管理。

原语一览

原语职责
ThreadPrimitive可滚动消息容器、自动滚动、空状态
MessagePrimitive单条消息渲染、内容 part 分发、hover 状态
ComposerPrimitive输入框、提交、附件、语音输入
ActionBarPrimitive消息级操作按钮(复制、重试、编辑、反馈)
BranchPickerPrimitive多分支回复导航(重新生成/编辑后)
ThreadListPrimitive多会话列表管理

后端集成

集成包名
Vercel AI SDK@assistant-ui/react-ai-sdk
LangGraph@assistant-ui/react-langgraph
LangChain@assistant-ui/react-langchain
AG-UI 协议@assistant-ui/react-ag-ui
Google ADK@assistant-ui/react-google-adk
自定义数据流@assistant-ui/react-data-stream
托管云服务assistant-cloud

基础用法

// app/page.tsx
import { Thread } from "@/components/assistant-ui/thread";
import { useChatRuntime } from "@assistant-ui/react-ai-sdk";

export default function ChatPage() {
  const runtime = useChatRuntime({
    api: "/api/chat",  // 后端 API 路由
  });

  return (
    <AssistantRuntimeProvider runtime={runtime}>
      <Thread />
    </AssistantRuntimeProvider>
  );
}

优雅之处:

  • 所有原语共享同一个 AssistantRuntimeProvider 上下文,状态管理自动完成
  • UI 与 Runtime/Adapter 分离,使后端迁移不必重写整套消息组件
  • 预构建组件可逐步替换为自定义原语,无需重写整个架构

学习检查

不看正文回答:

  1. Primitive、Runtime、Adapter、预构建组件分别解决什么问题?
  2. 为什么把 transport/backend 细节放进 Message 组件会破坏这套架构的可替换性?
  3. “换后端只改一行”在哪些情况下只是近似说法,哪些业务语义仍然需要适配?
  4. 如果需要展示 tool approval 和 artifact,应该优先扩展 Primitive、Runtime 还是业务组件?为什么?
  5. 与 Vercel AI SDK UI 对比时,应按哪个架构层级比较,而不是只比较 API 名称?

创建于 2026/6/25 更新于 2026/10/1
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本