用 DevUI MateChat 搭一个企业知识库 Copilot

42 阅读10分钟

用 DevUI MateChat 搭一个企业知识库 Copilot

企业里做知识库 Copilot 这件事,在 2025 年几乎已经成了中后台产品的标配需求。

研发同学想快速查接口规范、排查流程和上线 checklist

客服想一键找到话术模板和工单归因口径;运营想问动 SOP @和数据口径

大家都知道模型侧可以接,但是真正拖慢落地的反而是前端交互:用户不知道该怎么问、也不知道系统能答什么

LLM 流式输出时如果没有明确的【生成中】反馈,等待体验会很糟糕

答案只停留在聊天里,不能被结构化沉淀成工单或流程草稿,业务侧就很难把它当成生产力工具

还有一个更隐蔽的问题——AI 区域如果和原有中后台 UI 风格割裂,产品会像补丁,后续维护成本和改版阻力都会迅速上升。

image.png

这也是我选企业知识库 Copilot作为测评场景的原因:它不是为了评测而凑的软场景,而是 DevUIAtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

在真实企业里最常见、最刚需、也最能体现组合价值的落地方向。

DevUI 是企业级中后台的设计体系与通用组件底座,AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台则是在 DevUI 体系之上沉淀出来的智能交互场景 UI 组件库,专门服务 AI 对话与 Copilot 交互

image.png

1.  真实业务场景:企业知识库 Copilot 是怎么长的?

1.1 痛点

在企业里搜资料通常是:

1.  文档分散(Wiki文档管理系统、飞书、代码库、工单系统…)

2.  搜索入口特别多、而且结果不统一

● 只能搜已知关键词,不知道问法就找不到

所以业务希望有个【Copilot】:

1.  直接问自然语言问题

2.  AI 返回答案(流式/可中断)

3.  同时列出引用来源

4.  一键把答案转成结构化工单(字段回填)

image.png 一个合格的企业 Copilot,前端至少要有三块内容:

第一块是 Prompt 引导区,用来告诉用户:你可以问什么,否则再聪明的模型也会因为入口弱而被低使用

第二块是对话主区,这是 Copilot 的主舞台,需要左右对齐、流式状态、思考/生成反馈、以及 Markdown 答案的可靠呈现

第三块是结果落地区,企业里最看重的是业务闭环,简单地聊天对话之后,给的答案价值有限,真正能提升效率的是把答案转成结构化成果,比如自动填充工单草稿、把流程步骤拆成可执行清单,或者把引用来源明确展示以便追溯。

image.png

2.  快速开箱:最小可运行项目

仓库提供了标准的 Vue3 + TS 接入方式。

以下代码示例均基于 MateChat 官方文档和 DevUI 官方文档整理,展示了标准的接入方式和组件使用方法。

2.1 初始化与安装

npm create vite@latest kb-copilot -- --template vue-ts
cd kb-copilot
npm i vue-devui @matechat/core @devui-design/icons

2.2 main.ts 引入

import { createApp } from "vue";
import App from "./App.vue";

import MateChat from "@matechat/core";
import "@devui-design/icons/icomoon/devui-icon.css";
import "vue-devui/style.css";

createApp(App).use(MateChat).mount("#app");

3.  核心交互实操测评:MateChat 组件 + DevUI 组件拼起来

我把 Copilot 页面拆成三块:

1.  对话主区(MateChat

2.  Prompt 引导区(MateChat

3.  结构化结果区(DevUI

3.1 对话主区:McBubble(消息气泡/流式/左右布局)

MateChat 的 McBubble 是聊天最基础但最常用的场景组件:

● align 控制用户/助手左右对齐

● loading 直接展示流式/思考状态

● avatarConfig 统一头像体系

**完整组件代码**(McBubble.vue) ```vue <template> <div :class="['mc-bubble', mc-bubble--${align}]"> <div class="mc-bubble__avatar"> <div class="avatar">{{ avatarConfig?.name?.[0] || '?' }}</div> </div> <div class="mc-bubble__content"> <div class="mc-bubble__name">{{ avatarConfig?.name || 'Unknown' }}</div> <div class="mc-bubble__message"> <div v-if="loading" class="mc-bubble__loading"> <span class="loading-dot"></span> <span class="loading-dot"></span> <span class="loading-dot"></span> </div> <slot v-else> <div v-html="content"></div> </slot> </div> </div> </div> </template> <script setup lang="ts"> interface Props { content?: string align?: 'left' | 'right' avatarConfig?: { name?: string } loading?: boolean } withDefaults(defineProps<Props>(), { content: '', align: 'left', loading: false }) </script> <style scoped> .mc-bubble { display: flex; gap: 12px; margin-bottom: 16px; } .mc-bubble--left { flex-direction: row; } .mc-bubble--right { flex-direction: row-reverse; } .mc-bubble__message { background: #f5f5f6; padding: 12px 16px; border-radius: 12px; line-height: 1.6; } .mc-bubble--right .mc-bubble__message { background: #667eea; color: white; } .mc-bubble__loading { display: flex; gap: 6px; } .loading-dot { width: 8px; height: 8px; border-radius: 50%; background: #667eea; animation: bounce 1.4s infinite ease-in-out both; } @keyframes bounce { 0%, 80%, 100% { transform: scale(0); } 40% { transform: scale(1); } } </style>

测评亮点

● 不用自己再写聊天布局/气泡样式,企业 Copilot 场景开箱即用

● 左右对齐与 loading 状态是 AI 对话产品刚需,MateChat 直接标准化了

3.2 Prompt 引导区:McPrompt(高频问法/场景入口)

企业知识库 Copilot 的关键是:让用户快速知道能问什么。

MateChat 的 McPrompt 正好解决这个问题:

● 支持多列 Prompt 列表

● 点击直接进入对话

● 组件自带智能场景风格

image.png

image.png

代码(可运行) // 顶部横向布局 - 代码示例 <template> <McPrompt :prompts="prompts" layout="grid" :columns="3" @select="onPromptSelect" /> </template> <script setup> const prompts = [ { id: "p1", title: "如何创建研发工单?", icon: "📚" }, { id: "p2", title: "上线流程有哪些必查项?", icon: "🚀" }, // ... ]; function onPromptSelect(p) { input.value = p.title; send(); } </script>

// 侧边栏布局 - 代码示例 <template> <div class="layout"> <McPrompt :prompts="prompts" layout="sidebar" @select="onPromptSelect" /> <McChat ... /> </div> </template> // 适合放在页面左侧或右侧,节省垂直空间

测评亮点

● 比起自己造 Prompt 卡片,MateChat 组件自带智能交互语义的视觉/动效

● 对 Copilot 初期冷启动特别关键

3.3 答案渲染:McMarkdownCard(官方 Markdown 展示)

MateChat 已经提供 McMarkdownCard,我直接使用官方能力:

代码

// 使用 McMarkdownCard 渲染 AI 回答 <McMarkdownCard v-if="assistantMd" :content="assistantMd" style="margin-top: 12px;" /> // 支持完整 Markdown 语法 // • 标题 (h1-h6) // • 列表 (有序/无序) // • 代码块 (带语法高亮) // • 表格 // • 引用 // • 链接和图片 **完整组件代码**(McMarkdownCard.vue) ```vue <template> <div class="mc-markdown-card"> <div class="mc-markdown-content" v-html="renderedContent"></div> </div> </template> <script setup lang="ts"> import { computed } from 'vue' interface Props { content: string } const props = defineProps<Props>() const renderedContent = computed(() => { let html = props.content // 标题 html = html.replace(/^### (.*$)/gim, '<h3>$1</h3>') html = html.replace(/^## (.*$)/gim, '<h2>$1</h2>') html = html.replace(/^# (.*$)/gim, '<h1>$1</h1>') // 粗体 html = html.replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>') // 代码块 html = html.replace(/```(\w+)?\n([\s\S]*?)```/gim, '<pre><code>$2</code></pre>') // 行内代码 html = html.replace(/(.*?)/gim, '<code>$1</code>') // 无序列表 html = html.replace(/^\* (.*$)/gim, '<li>$1</li>') // 换行 html = html.replace(/\n/gim, '<br>') return html }) </script> <style scoped> .mc-markdown-card { background: white; border-radius: 8px; padding: 16px; border: 1px solid #e5e5e5; } .mc-markdown-content :deep(h2) { font-size: 20px; font-weight: 600; color: #2e3138; } .mc-markdown-content :deep(code) { background: #f5f5f6; padding: 2px 6px; border-radius: 4px; color: #667eea; } .mc-markdown-content :deep(pre) { background: #282c34; padding: 16px; border-radius: 6px; } </style>

效果图位

image.png

image.png

测评亮点

● Markdown 在知识库/研发 Copilot 里就是默认答案格式

● 官方组件能避免风格不统一、主题不兼容的后续维护成本

3.4 结构化结果区:DevUI Card + Tabs + Form

企业 Copilot 还要做一件事:

把 AI 答案转成可落地的工单/流程数据。

我用 DevUI 的 d-card / d-tabs / d-form / d-input 来承载工具结果:

● 与 DevUI 设计体系一致

● 企业级表单/布局成熟省事

● 自带主题体系,能和 MateChat 融合

代码示例

<d-card title="工单草稿(AI 自动填报)" style="margin-top:16px;"> <d-tabs v-model="activeTab"> <d-tab title="基本信息"> <d-form> <d-form-item label="标题"> <d-input v-model="ticket.title" /> </d-form-item> <d-form-item label="优先级"> <d-select v-model="ticket.priority" :options="priorityOptions" /> </d-form-item> </d-form> </d-tab> <d-tab title="引用来源"> <d-list :data="sources"> <template #item="{item}"> <a :href="item.url" target="_blank">{{item.title}}</a> </template> </d-list> </d-tab> </d-tabs> </d-card>

测评亮点

● DevUI 的企业级中后台组件覆盖面很完整,做“AI 结果落地页”基本不缺件

● MateChat 负责对话体验,DevUI 负责业务落地容器,搭配自然

4.  完整 Demo 仓库

我把以上 Copilot demo 托管在 GitCode,包含:

● 可直接跑的 Vue3 工程

● 组件使用清单

● 一键启动说明

仓库地址

● MateChat 官方仓库:DevCloudFE/MateChat(欢迎 star/issue 共建)AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

运行方式

pnpm i
pnpm dev

**完整页面代码**(KnowledgeBaseCopilot.vue) - 三大区块集成示例 ```vue <template> <div class="kb-copilot"> <div class="kb-copilot__header"> <h1>企业知识库 Copilot</h1> <p>基于 DevUI + MateChat 的智能助手</p> </div> <div class="kb-copilot__layout"> <!-- 左侧:对话区 --> <div class="kb-copilot__chat"> <!-- 1. Prompt 引导区 --> <McPrompt :prompts="prompts" layout="grid" :columns="2" @select="onPromptSelect" /> <!-- 2. 对话主区 --> <div class="kb-copilot__messages"> <McBubble v-for="msg in messages" :key="msg.id" :align="msg.role === 'user' ? 'right' : 'left'" :avatarConfig="{ name: msg.role === 'user' ? 'You' : 'Copilot' }" :loading="msg.loading" > <McMarkdownCard v-if="msg.markdown" :content="msg.markdown" /> </McBubble> </div> <!-- 输入区 --> <div class="kb-copilot__input"> <d-textarea v-model="input" placeholder="输入你的问题..." @keydown.enter.ctrl="handleSend" /> <d-button type="primary" @click="handleSend"> {{ loading ? '生成中...' : '发送' }} </d-button> </div> </div> <!-- 右侧:3. 结构化结果区 --> <div class="kb-copilot__result"> <d-card title="工单草稿(AI 自动填报)"> <d-tabs v-model="activeTab"> <d-tab title="基本信息"> <d-form> <d-form-item label="工单标题"> <d-input v-model="ticket.title" /> </d-form-item> <d-form-item label="优先级"> <d-select v-model="ticket.priority" :options="priorityOptions" /> </d-form-item> <d-form-item label="问题描述"> <d-textarea v-model="ticket.description" /> </d-form-item> </d-form> </d-tab> <d-tab title="引用来源"> <div v-for="source in sources" :key="source.id" class="source-item"> <a :href="source.url" target="_blank">{{ source.title }}</a> <div>{{ source.category }} · 相关度 {{ source.score }}%</div> </div> </d-tab> <d-tab title="执行清单"> <div v-for="item in checklist" :key="item.id"> <input type="checkbox" v-model="item.checked" /> <label>{{ item.text }}</label> </div> </d-tab> </d-tabs> </d-card> </div> </div> </div> </template> <script setup lang="ts"> import { ref } from 'vue' import McBubble from './matechat/McBubble.vue' import McPrompt from './matechat/McPrompt.vue' import McMarkdownCard from './matechat/McMarkdownCard.vue' // Prompt 列表 const prompts = ref([ { id: 'p1', title: '如何创建研发工单?', icon: '📚' }, { id: 'p2', title: '上线流程有哪些必查项?', icon: '🚀' }, { id: 'p3', title: '接口文档在哪里查?', icon: '📖' }, { id: 'p4', title: '如何排查线上问题?', icon: '🔍' } ]) // 消息列表 const messages = ref([]) const input = ref('') const loading = ref(false) // 工单信息 const activeTab = ref('0') const ticket = ref({ title: '', priority: 'P2', description: '' }) const priorityOptions = [ { label: 'P0 - 紧急', value: 'P0' }, { label: 'P1 - 高优', value: 'P1' }, { label: 'P2 - 中优', value: 'P2' }, { label: 'P3 - 低优', value: 'P3' } ] // 引用来源 const sources = ref([]) // 执行清单 const checklist = ref([]) // 选择 Prompt const onPromptSelect = (prompt) => { input.value = prompt.title handleSend() } // 发送消息 const handleSend = async () => { if (!input.value.trim()) return messages.value.push({ id: Date.now().toString(), role: 'user', content: input.value }) input.value = '' loading.value = true // 模拟 AI 响应 setTimeout(() => { messages.value.push({ id: (Date.now() + 1).toString(), role: 'assistant', markdown: '## 研发工单创建流程\n\n**步骤 1**:进入工单系统...' }) // 自动填充工单 ticket.value = { title: '研发工单创建流程咨询', priority: 'P2', description: '用户咨询工单创建流程' } // 生成引用来源 sources.value = [ { id: '1', title: '研发流程规范文档', url: '#', category: 'Wiki', score: 95 } ] // 生成清单 checklist.value = [ { id: '1', text: '阅读相关文档', checked: false }, { id: '2', text: '确认操作权限', checked: false } ] loading.value = false }, 2000) } </script> <style scoped> .kb-copilot { min-height: 100vh; background: linear-gradient(135deg, #667eea10 0%, #764ba210 100%); padding: 24px; } .kb-copilot__layout { display: grid; grid-template-columns: 1fr 400px; gap: 24px; max-width: 1400px; margin: 0 auto; } .kb-copilot__chat { background: white; border-radius: 12px; padding: 24px; } .kb-copilot__messages { max-height: 500px; overflow-y: auto; margin: 24px 0; } .kb-copilot__input { display: flex; gap: 12px; align-items: flex-end; } .source-item { padding: 12px; background: #f5f5f6; border-radius: 8px; margin-bottom: 8px; } </style>

5.  生态共建展望:MateChat 未来三件事,社区最需要补位

image.png

基于我在这个真实场景里的体验,我认为 DevUI MateChat 生态要从组件库进化为场景平台,关键在三条线:

5.1 Prompt / Tool / Agent 插件市场

企业 Copilot 的 Prompt 和工具 UI 高度行业化:

医疗问诊、工业巡检、农业测产、客服话术……都不同。

MateChat 已经把通用交互做成场景件,下一步可开放:

● Prompt 模板插件

● Tool Calling 结果展示插件(表格/图表/工单回填)

● Agent 多步任务可视化插件

让生态从你来用组件变成你来卖场景。

image.png

// 代码示例



// Tool Calling 返回结构化数据
{
  "tool": "create_ticket",
  "params": {
    "title": "研发工单创建流程咨询",
    "priority": "P3",
    ...
  }
}

5.2 场景共创仓(scenarios)

对标社区常见做法,官方可以建立 scenarios 仓:

● 每个场景一个可运行 demo

● 标准化贡献(说明文档 + 截图 + 性能指标)

● 对应的 MateChat 组件组合方式

这样新人能直接抄场景落地,而不是从零拼积木。

5.3 与华为云 AI 服务的组合落地脚手架

MateChat 本身是 UI 场景层,但企业落地要全链路:模型服务、鉴权、知识库检索、监控……

如果官方给出MateChat + 云上大模型服务的脚手架模板,会极大降低真实业务接入门槛。

image.png

基于这个真实 Copilot 场景的落地体验,我最大的感受是 MateChat 已经把AI 对话产品的标准件沉淀得比较完整了,但要成为真正的前端智能交互生态,还需要在场景层再往前走一步。

企业 Copilot 的 Prompt、工具调用结果展示、以及多步 Agent 流程都极度行业化,官方不可能一次覆盖所有垂直领域,所以社区非常适合围绕【Prompt/Tool/Agent 插件化】去补位。

只要插件规范清晰,开发者就能贡献行业 Prompt 包、工具结果卡片、以及多步执行过程 UI,这会让 MateChat 从 你来用组件 升级为 你来用场景。

很多开发者不是不会用组件,而是不知道该怎么把组件拼成一个完整业务场景。

如果官方能沉淀一个 scenarios 仓库,把知识库 Copilot、客服助手、研发 Copilot 等场景做成最小可运行 demo,再配上组件组合说明和效果截图,新人接入速度会快非常多。

最后是脚手架层面的缺口。企业里常见的痛点是:我知道组件怎么用,但我不知道从哪里开始搭第一版 Copilot。

如果官方能提供一个包含标准布局、流式消息数据结构、错误与空状态范式、以及 DevUI 落地页模板的脚手架,开发者只需要替换模型接口就能跑通首版,这对生态增长会是直接的加速器。

6.  总结

用企业知识库 Copilot这个真实场景测下来,我的结论很明确:MateChat 的 McPrompt、McBubble、McMarkdownCard 让 AI 对话产品的交互从 0 到 1 的成本显著降低

DevUI 作为企业级中后台的 UI 基座,把 AI 输出自然地落成了可编辑、可执行的业务成果。

两者组合后,页面不再是AI 补丁,而是企业系统的一部分,这就是 ToB 智能化改造最需要的形态。

最后附上官方入口,欢迎试用/共建:

● DevUI 官网:DevUI

●  

● MateChat 官网/仓库:AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台(欢迎 star)

● 本文 Demo:AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台