网站首页 > 博客文章 正文
各位前端开发者有遇到做 AI Chat 项目的聊天交互界面需求了吗?TDesign 出品的这个组件很不错,推荐给大家。
TDesign AI Chat 简介
TDesign AI Chat 是 TDesign 为 AIGC 场景开发的 UI 系列组件中的一部分,主要用于开发目前非常流行的 ChatBot 对话交互场景。最近 TDesign AI Chat 发布了 0.2 的版本,增加了思考过程、增强版的可扩展输入框和配套加载动画等相关组件,同时配套内置支持了多语言能力,让我们开发者可以快速构建具有 AI ChatBot 对话交互功能的项目。
组件预览
TDesign AI Chat 适配的是桌面端,目前提供的是 vue3.x 版本,据官方透露,很快就会支持 React。
Chat 组件介绍
TDesign AI Chat 的组件由多个组成 Chat 组件的子组件。开发过程中,如果 Chat 组件无法满足需求,可以尝试用子组件自由组合来满足更多的使用场景。
组件名 | 描述 |
Chat | 整体对话容器组件,通过 data 配置,快速实现 ChatBot 的界面效果 |
ChatAction | 对话单元操作组合(点赞/点踩/重新生成/复制) |
ChatContent | 对话内容组件 |
ChatInput | 对话输入框 |
ChatItem | 对话单元组件 |
ChatLoading | 加载动画组件 ,新版本新增。为 Chat 相关加载场景设计的加载效果 |
ChatReasoning | 思考过程组件,新版本新增。模拟推理过程,支持折叠交互与自定义内容 |
ChatSender | 可扩展的对话输入框,新版本新增。在 ChatInput 的基础上,支持多模态扩展,模型切换的能力展示 |
Chat 组件一览表
开发上手体验
NPM 安装
npm i @tdesign-vue-next/chat
基础使用
import { createApp } from 'vue';
import App from './app.vue';
import TDesignChat from '@tdesign-vue-next/chat'; // 引入chat组件
const app = createApp(App);
app.use(TDesignChat);
这种方式会全量注册所有组件,适合在项目大规模使用这个系列组件。当然支持摇树优化的按需引入,还有多语言支持(这个很有必要)、自定义主题等,具体方法参考官方文档。
TDisign AI Chat 官网
重点说说 ChatContent 对话内容组件
ChatContent 是用于渲染对话内容的组件,内置了轻量化 Markdown 渲染效果, 能够满足一定程度的对话内容需求,体现在下面几点:
- 代码高亮:内置 highlight.js,支持代码块的语法高亮;
- 轻量:内置 Marked.js 体积轻巧,保留 Markdown 基础渲染能力,更高阶的能力需要额外的插件支持;
- 安全:过滤 HTML 内容,防止 XSS 攻击。
除了这些,TDesign AI Chat 还内置了对话内容属性的判断,用户侧的文本不做转义,按用户输入的默认格式显示,不会对代码做高亮;Bot 侧的文本消息,则默认开启 Markdown 的相关渲染逻辑。如果这些都要自己去实现,那真的需要费不少心思。
轻松接入流式传输
流式输出,也称为流式传输,是指服务器持续地将数据推送到客户端,而不是一次性发送完毕。这种模式下,连接一旦建立,服务器就能实时、不间断地发送更新给客户端。
因为受当前大模型推理时间、token 数量限制,这也是目前 AIGC 交互的主要数据传输方式。举例来说,前端收到的流式数据是这样的:
data: {"id":"7eced65bb3cb122d9f927563fc0e5673","created":1695218378,"choices":[{"delta":{"role":"assistant","content":"我是"}}],"usage":{"prompt_tokens":10,"completion_tokens":1,"total_tokens":11}}
data: {"id":"7eced65bb3cb122d9f927563fc0e5673","created":1695218378,"choices":[{"delta":{"role":"assistant","content":"由腾"}}],"usage":{"prompt_tokens":10,"completion_tokens":3,"total_tokens":13}}
data: {"id":"7eced65bb3cb122d9f927563fc0e5673","created":1695218378,"choices":[{"delta":{"role":"assistant","content":"讯公"}}],"usage":{"prompt_tokens":10,"completion_tokens":5,"total_tokens":15}}
data: {"id":"7eced65bb3cb122d9f927563fc0e5673","created":1695218378,"choices":[{"delta":{"role":"assistant","content":"司开"}}],"usage":{"prompt_tokens":10,"completion_tokens":7,"total_tokens":17}}
data: {"id":"7eced65bb3cb122d9f927563fc0e5673","created":1695218378,"choices":[{"delta":{"role":"assistant","content":"发的"}}],"usage":{"prompt_tokens":10,"completion_tokens":8,"total_tokens":18}}
根据 TDesign AI Chat 官方提供的代码片段,可以很容易解析和接入:
export const fetchSSE = async (options: FetchSSEOptions = {}) => {
const { success, fail, complete } = options;
// fetch请求流式接口url,需传入接口url和参数
const responsePromise = fetch().catch((e) => {
const msg = e.toString() || '流式接口异常';
complete?.(false, msg);
return Promise.reject(e); // 确保错误能够被后续的.catch()捕获
});
responsePromise
.then((response) => {
if (!response?.ok) {
complete?.(false, response.statusText);
fail?.();
throw new Error('Request failed'); // 抛出错误以便链式调用中的下一个.catch()处理
}
const reader = response.body.getReader();
const decoder = new TextDecoder();
if (!reader) throw new Error('No reader available');
const bufferArr: string[] = [];
let dataText = ''; // 记录数据
const event: SSEEvent = { type: null, data: null };
async function processText({ done, value }: ReadableStreamReadResult<Uint8Array>): Promise<void> {
if (done) {
complete?.(true);
return Promise.resolve();
}
const chunk = decoder.decode(value);
const buffers = chunk.toString().split(/\r?\n/);
bufferArr.push(...buffers);
const i = 0;
while (i < bufferArr.length) {
const line = bufferArr[i];
if (line) {
dataText += line;
const response = line.slice(6);
if (response === '[DONE]') {
event.type = 'finish';
dataText = '';
} else {
const choices = JSON.parse(response.trim())?.choices?.[0];
if (choices.finish_reason === 'stop') {
event.type = 'finish';
dataText = '';
} else {
event.type = 'delta';
event.data = choices;
}
}
}
if (event.type && event.data) {
const jsonData = JSON.parse(JSON.stringify(event));
console.log('流式数据解析结果:', jsonData);
// 回调更新数据
success(jsonData);
event.type = null;
event.data = null;
}
bufferArr.splice(i, 1);
}
return reader.read().then(processText);
}
return reader.read().then(processText);
})
.catch(() => {
// 处理整个链式调用过程中发生的任何错误
fail?.();
});
};
使用建议
看到这里,相信各位开发者应该也懂了,TDesign AI Chat 适用于用来搭建类似 ChatGPT 这样的对话式交互应用,无论是在已有项目里内嵌 AIGC,还是搭建全新的 AI 对话,TDesign AI Chat 都可以帮助我们节省大量的时间,建议搭配 TDesign 这套 UI 组件库一起使用。
组件文档
如果你更习惯用阿里的 AntDesign,Ta 家也出了类似的 AI 对话组件 Lobe UI。
对了,TDesign AI Chat 最新的 0.2 版本也发布了 Figma 的设计资源,方便产品经理和设计师取用。
免费开源说明
TDesign AI Chat 属于 TDesign 开源组件库的一份子,同样是采用 MIT 开源协议,我们可以自由地下载来使用,用在商业项目上也没有问题。
原文:
https://www.thosefree.com/tdesign-ai-chat
猜你喜欢
- 2025-05-27 腾讯设计云产品亮相2021腾讯设计周_深圳新闻网
- 2025-05-27 B端表单|实战篇:表单的具体设计方法解析
- 2025-05-27 Material Design:为什么 FAB 是不好的体验设计
- 2025-05-27 6款高颜值 Vue3 PC端UI组件库
- 2025-05-27 西门子明导首席研发工程师黄宇:AI芯片的可测试性设计
- 2025-05-27 创意无限:用Midjourney设计你的独特T恤艺术之旅
- 2025-05-27 开源!腾讯 TDesignFlutter 组件库
- 2025-05-27 硬件工程师现在为什么不吃香了?
- 2025-05-27 基于TDesign风格的Blazor企业级UI组件库
- 2025-05-27 如何做好 Web 自定义排序产品设计?
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 416℃用AI Agent治理微服务的复杂性问题|QCon
- 415℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 396℃初次使用IntelliJ IDEA新建Maven项目
- 394℃Maven技术方案最全手册(mavena)
- 389℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 386℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 384℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 383℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)