技术栈 :Vue 3 + Vite + TypeScript + MateChat

一、引言:当 AI 能力需要"恰到好处"的前端载体
生成式人工智能(GenAI)正以前所未有的速度融入企业工作流。然而,许多团队在落地 AI 助手时面临一个共同困境:
- 直接调用大模型 API,但缺乏一致、专业、易用的交互界面;
- 自研聊天组件,却陷入样式混乱、状态管理复杂、多端适配困难的泥潭;
- 通用聊天机器人无法理解研发、运维、数据等垂直领域语境,体验割裂。
正是在这一背景下,华为云推出了 MateChat ------ 一个专为企业智能化场景 设计的前端 UI 解决方案。它不是又一个聊天窗口,而是一套面向 GenAI 的交互语言系统 ,致力于在多元业务中构建高一致性、低侵入性、强可维护性的智能体验。
本文将深入解析 MateChat 的核心能力,并通过一个完整可本地运行的 Demo,展示如何快速构建一个适用于云控制台或 IDE 的智能助手应用。
二、MateChat 是什么?------ 不止于组件库,更是 GenAI 交互范式
MateChat 是由华为云 DevCloudFE 团队开源的前端智能化场景解决方案 UI 库,其定位非常明确:
"构建不同业务场景下高一致性的 GenAI 体验系统语言,匹配工具/平台的原生业务特征,提供更适合研发工具领域的对话组件。"
与通用聊天 UI 不同,MateChat 从设计之初就聚焦于 B 端、开发者工具、企业系统三大场景,强调:
- 无边界:AI 能力自然融入现有界面,不打断主流程;
- 无侵害:不强制用户改变习惯,提供渐进式引导;
- 高一致性:跨产品、跨平台保持统一的交互语言。
三、核心特性详解:五大支柱支撑企业级落地
3.1 快速唤醒:灵活的入口策略
MateChat 支持多种唤醒方式,适配不同产品形态:
- 固定入口:右下角悬浮按钮(适合控制台)
- 快捷键 :
Ctrl+K全局呼出(适合 IDE) - 情境触发:错误日志旁出现"问 AI"按钮
通过 McTrigger 或自定义逻辑,可轻松实现:
ts
// 全局快捷键唤醒
import { useMagicKeys } from '@vueuse/core'
const { ctrl_k } = useMagicKeys()
watch(ctrl_k, (v) => v && (showChat.value = true))
3.2 轻松使用:上下文感知的引导系统
新手面对空白输入框常不知如何提问。MateChat 提供 McPrompt 组件,动态展示高频指令或场景建议:
vue
<McPrompt
:list="[
{ label: '帮我写一个快速排序', value: 'quickSort' },
{ label: '怎么绑定项目空间?', value: 'bindProjectSpace' }
]"
@itemClick="onSubmit"
/>
支持水平/垂直布局,可置于启动页或输入框上方,大幅降低学习成本。
3.3 自由表达:富交互输入能力
McInput 不仅是文本框,更是多模态输入中枢:
- 支持
@提及(如@代码助手、@知识库) - 可插入附件(日志、截图)
- 扩展槽支持添加"智能体"、"词库"等快捷操作
vue
<McInput>
<template #extra>
<span><i class="icon-at"></i> 智能体</span>
<span><i class="icon-add"></i> 附件</span>
</template>
</McInput>
3.4 过程监督:透明化 AI 内部状态
用户需要知道"AI 是否在思考"。MateChat 通过:
loading状态显示"加载中"动画- 流式(streaming)响应实现"边思考边输出"
- 消息 ID 追踪会话上下文
确保人机交互可信、可控、可中断。
3.5 可读性强:专业的 Markdown 渲染
AI 输出常含代码、列表、标题。MateChat 内置语义化 Markdown 渲染:
- 自动高亮代码块(支持多语言)
- 清晰层级标题
- 响应式表格与列表
配合 McBubble 的气泡布局,提供媲美文档的阅读体验。
四、实战:5 分钟搭建一个云控制台智能助手(可本地运行)
4.1 项目初始化
bash
npm create vite@latest matechat-demo -- --template vue-ts
cd matechat-demo
npm install @matechat/core @devui-design/icons vue-devui
在 main.ts 中注册:
ts
import { createApp } from 'vue'
import App from './App.vue'
import MateChat from '@matechat/core'
import '@devui-design/icons/icomoon/devui-icon.css'
createApp(App).use(MateChat).mount('#app')
💡 MateChat 基于 DevUI 主题体系,自动继承其设计变量。
4.2 完整对话界面实现
vue
<!-- App.vue -->
<template>
<McLayout class="chat-container">
<!-- 启动页 -->
<McLayoutContent v-if="showIntro" style="align-items: center; justify-content: center; gap: 16px">
<McIntroduction
:logoImg="'https://matechat.gitcode.com/logo2x.svg'"
title="云智能助手"
subTitle="Hi,我是您的 AI 运维伙伴"
:description="[
'我可以帮您查询资源状态、生成修复命令、解释错误日志。',
'您的反馈将帮助我持续改进。'
]"
/>
<McPrompt :list="introPrompts" @itemClick="onSubmit" />
</McLayoutContent>
<!-- 对话历史 -->
<McLayoutContent v-else class="messages">
<McBubble
v-for="(msg, idx) in messages"
:key="idx"
:content="msg.content"
:from="msg.from"
:align="msg.from === 'user' ? 'right' : 'left'"
:avatarConfig="msg.from === 'user'
? { imgSrc: 'https://matechat.gitcode.com/png/demo/userAvatar.svg' }
: { imgSrc: 'https://matechat.gitcode.com/logo.svg' }"
:loading="msg.loading"
/>
</McLayoutContent>
<!-- 输入区 -->
<McLayoutSender>
<McInput
:value="inputValue"
:maxLength="2000"
@change="(e) => inputValue = e"
@submit="onSubmit"
>
<template #extra>
<div class="input-footer">
<span><i class="icon-at"></i> 智能体</span>
<span><i class="icon-standard"></i> 词库</span>
<span class="divider"></span>
<span>{{ inputValue.length }}/2000</span>
</div>
</template>
</McInput>
</McLayoutSender>
</McLayout>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const showIntro = ref(true)
const inputValue = ref('')
const messages = ref<any[]>([])
const introPrompts = [
{ label: '列出所有异常的 ECS 实例', value: 'listAbnormalECS' },
{ label: '如何释放闲置资源?', value: 'releaseIdleResource' },
{ label: '解释这个错误码:ECS.403', value: 'explainErrorCode' }
]
const onSubmit = (query: string) => {
inputValue.value = ''
showIntro.value = false
// 用户消息
messages.value.push({ from: 'user', content: query })
// 模拟 AI 流式回复(实际应对接大模型 API)
messages.value.push({ from: 'model', content: '', loading: true })
setTimeout(() => {
messages.value[messages.value.length - 1].loading = false
messages.value[messages.value.length - 1].content =
`正在处理请求:"${query}"\n\n💡 建议:请确保已授权云 API 访问权限。`
}, 1500)
}
</script>
<style>
.chat-container {
width: 800px;
height: 80vh;
margin: 20px auto;
border: 1px solid var(--devui-dividing-line);
border-radius: 16px;
overflow: hidden;
}
.messages {
padding: 16px;
overflow-y: auto;
}
.input-footer {
display: flex;
align-items: center;
gap: 12px;
font-size: 14px;
color: var(--devui-text-secondary);
}
.divider {
width: 1px;
height: 14px;
background: var(--devui-dividing-line);
}
</style>
✅ 此 Demo 可直接
npm run dev本地运行,展示完整的启动引导、对话历史、富输入区。
五、典型适用场景:从 IDE 到云控制台
场景 1:AI 编程助手(如 InsCode AI IDE)
- 集成于 IDE 插件,支持
@explain code、@write test - 利用
McBubble渲染代码块,McInput支持 @提及 - 效果:开发者无需离开编辑器,获得上下文感知的 AI 建议
案例:InsCode AI IDE 基于 MateChat 快速完成 UI 搭建。
场景 2:云运维智能问答
- 用户问:"为什么我的 ECS 无法访问公网?"
- AI 结合 VPC、安全组配置,生成排查步骤
- 价值:降低运维门槛,提升问题解决效率
场景 3:企业知识库对话系统
- 接入 RAG(检索增强生成),回答 HR、财务政策
McBubble自动标注引用来源,增强可信度- 优势:替代静态 FAQ,实现动态知识服务
六、未来展望:MateChat × DevUI,构建智能前端新生态
MateChat 与 DevUI 天然互补:
- DevUI 负责标准化界面构建(表格、表单、布局)
- MateChat 负责智能化交互注入(对话、引导、生成)
二者结合,可实现:
- 自然语言生成 DevUI 表单("创建一个带筛选的订单列表" → 渲染 DTable)
- 在 DevUI 控制台中嵌入 MateChat 助手,体验无缝融合
- 统一主题、动效、无障碍标准,保障企业级体验一致性
七、总结
MateChat 的出现,标志着 GenAI 应用从前端"自由发挥"走向"规范落地"。它通过:
- 场景化的交互组件
- 对开发者工具的深度理解
- 与企业 UI 生态的天然兼容
为企业提供了低门槛、高一致性、强业务耦合的智能化升级路径。
无论你是构建 IDE、云平台还是内部系统,MateChat 都值得成为你 GenAI 之旅的首选前端伙伴。
立即体验:
bashgit clone https://gitcode.com/DevCloudFE/MateChat.git cd MateChat pnpm install && pnpm run docs:dev
参考链接
- MateChat GitHub:https://gitcode.com/DevCloudFE/MateChat
- MateChat 官网:https://matechat.gitcode.com
- DevUI 官网:https://devui.design/home