哈曼卡顿Harman Kardon One(哈曼卡顿智能音箱)
156.1MB · 2026-03-12
本文由云软件体验技术团队胡靖原创。
面向企业 AI 应用的 Vue 3 交互组件与对话框架。
TinyRobot 是一套专为 AI 应用构建的前端交互框架,帮助团队快速搭建企业级 AI 助手、智能客服与多轮对话系统。基于 OpenTiny 设计体系,TinyRobot 提供从对话 UI、流式渲染到会话管理的完整能力,使开发者无需自研复杂交互逻辑,即可构建体验一致、可扩展的 AI 产品。从原型到可运行 AI 应用,仅需数小时。
构建 AI 对话类产品通常涉及以下工程挑战:
借助 TinyRobot 的标准化组件与组合式 API,开发者不再需要从零实现复杂的 AI 交互系统,只需按需组装组件,就能快速完成高质量 AI 对话产品开发。
内置面向对话场景设计的 UI 组件:
组件采用可组合架构,支持按需引入与 Tree Shaking。
通过 useMessage 与 responseProvider 抽象 AI 响应协议:
开发者仅需实现模型请求逻辑,即可完成完整对话链路。
TinyRobot 提供标准化工具调用展示机制:
该机制使 AI 应用具备可扩展能力,而非仅限文本对话。
基于 CSS 变量的主题架构:
可快速构建符合企业视觉规范的 AI 产品界面。
支持多种存储策略:
适用于长对话、用户偏好与多会话管理场景。
# tiny-robot 套件
pnpm add @opentiny/tiny-robot @opentiny/tiny-robot-kit @opentiny/tiny-robot-svgs
# markdown 渲染器依赖
pnpm add markdown-it dompurify
入口引入样式:
import '@opentiny/tiny-robot/dist/style.css'
<template>
<div class="chat-demo">
<!-- 在 BubbleList 上配置其他渲染器,需要使用 BubbleProvider 包裹 -->
<tr-bubble-provider :fallback-content-renderer="BubbleRenderers.Markdown">
<tr-bubble-list class="chat-list" :messages="messages" :role-configs="roles" auto-scroll />
</tr-bubble-provider>
<tr-sender
v-model="inputMessage"
:placeholder="isProcessing ? '正在思考中...' : '请输入问题'"
:loading="isProcessing"
:clearable="true"
@submit="handleSubmit"
@cancel="abortRequest"
/>
</div>
</template>
<script setup lang="ts">
import { BubbleRenderers, TrBubbleList, TrBubbleProvider, TrSender, type BubbleRoleConfig } from "@opentiny/tiny-robot";
import { IconAi, IconUser } from "@opentiny/tiny-robot-svgs";
import { h, ref } from "vue";
import { useChat } from "./useChat";
const { messages, isProcessing, sendMessage, abortRequest } = useChat();
const inputMessage = ref("");
function handleSubmit(content: string) {
if (!content || isProcessing.value) return;
sendMessage(content);
inputMessage.value = "";
}
// 简洁角色配置:左右排列 + 头像
const roles: Record<string, BubbleRoleConfig> = {
assistant: { placement: "start", avatar: h(IconAi, { style: { fontSize: "32px" } }) },
user: { placement: "end", avatar: h(IconUser, { style: { fontSize: "32px" } }) },
};
</script>
<style scoped>
.chat-demo {
max-width: 640px;
width: 100%;
margin: 0 auto;
padding: 16px;
display: flex;
flex-direction: column;
gap: 16px;
}
.chat-list {
height: 400px;
}
/* 使用 data-type 选择器可以匹配不同类型的渲染器 */
:deep([data-type="markdown"]) p {
margin: 0;
}
</style>
import { useMessage, sseStreamToGenerator } from '@opentiny/tiny-robot-kit'
export function useChat() {
return useMessage({
initialMessages: [{ role: 'assistant', content: '你好!我是 TinyRobot 示例助手。' }],
responseProvider: async (requestBody, abortSignal) => {
// 替换为你的大模型 API 地址
const url = import.meta.env.VITE_API_URL
if (!url) {
throw new Error('api url is not set')
}
// 替换为你的大模型 API 密钥
const apiKey = import.meta.env.VITE_API_KEY
if (!apiKey) {
throw new Error('api key is not set')
}
const res = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
},
body: JSON.stringify({
model: 'deepseek-chat',
...requestBody,
stream: true,
}),
signal: abortSignal,
})
return sseStreamToGenerator(res, { signal: abortSignal })
},
plugins: [
{
onError: ({ currentTurn, error }) => {
currentTurn[currentTurn.length - 1]!.content = String(error)
},
},
],
})
}
完成上述步骤后,你即可获得一个完整的 AI 聊天界面,支持:
想快速体验?执行下面步骤,在本地运行
npx degit opentiny/tiny-robot#chat-demo tiny-robot-chat-demo
.env.local 文件,填写你的 API 地址和密钥(接口返回格式兼容 ChatGPT API 即可)# 示例(以 DeepSeek 为例,可替换为 OpenAI/其他兼容接口)
VITE_API_URL=
VITE_API_KEY=sk-xxxx
# 进入项目目录
cd tiny-robot-chat-demo
# 安装依赖
pnpm i
# 启动项目并自动打开浏览器
pnpm dev --open
更多 API 细节与组件用法,请参考 TinyRobot 官方文档
TinyRobot 将持续优化 AI 组件与交互能力,重点提升多轮对话、流式消息显示、会话管理和主题定制的支持,同时扩展更多适用于 AI 应用的组件,让开发者能够更高效地构建智能界面。
我们欢迎开发者加入共建,一起推动 TinyRobot 的发展:
156.1MB · 2026-03-12
31.0MB · 2026-03-12
117.49M · 2026-03-12