最近体验了一个有意思的项目,让我重新思考了一个问题:当我们说"AI+UI组件库"协作时,到底在协作什么?
大多数项目的做法是"堆砌",在UI页面里调用AI API,在AI回调里操作图表,结果是各个能力相互纠缠,改一个地方要牵扯三五个文件。

这个项目采用了不同的思路,通过MCP(Multi-Component Platform)架构,将对话交互、数据处理、图表生成这三个独立的能力解耦出来,让它们各司其职,又能高效协作。
效果是什么样的?用户说一句"对比各区域销售表现",系统自动完成AI分析+图表生成+指标计算,2.5秒内返回包含文本解读、可视化图表和数据指标的完整分析结果。
MCP Business Analyzer(MCP多组件业务分析平台)
这个项目的出发点很现实。

在企业的日常工作中,业务分析人员需要:
- 数据处理(用Excel或数据库)
- 图表制作(用专门的工具)
- AI分析(调用ChatGPT或其他大模型)
- 报告生成(手动整理结果)
这四个环节割裂、低效、需要频繁切换工具。
MCP业务分析平台的目标就是将这些环节整合到一个统一的对话界面,通过自然语言驱动整个流程。
三层架构解析
项目之所以值得关注,核心在于它的架构设计。
传统的集成方式是"紧耦合"的——UI组件直接调用业务逻辑,业务逻辑又操作其他组件,职责混乱。
MCP的设计思想是通过"解耦+编排"将系统分为三层:
| 层级 | 职责 | 核心组件 | 职能描述 |
|---|---|---|---|
| 交互层 | 展示+交互 | MateChat(McBubble、McInput、McMarkdownCard) | 只负责对话界面展示,不掺杂业务逻辑。通过气泡消息展示AI回复,通过智能输入框采集用户问题,通过Markdown卡片渲染格式化内容 |
| 协调层 | 意图识别+任务编排+结果聚合 | MCPEngine | 接收用户问题,分析用户意图,判断需要哪些能力,并行调用适配器,最后将各能力的输出整合成统一格式 |
| 能力层 | 独立的业务能力实现 | AIAdapter、ChartAdapter、DataAdapter | 三个独立适配器,各自实现MCPAdapter接口。AIAdapter调用华为云AI,ChartAdapter生成图表配置,DataAdapter处理数据和指标计算 |
这种分层的核心优势:
职责清晰:交互层只管显示,能力层只管处理,协调层统一调度。修改图表逻辑不影响对话界面
易于扩展:新增能力(如数据导出、数据库查询)只需新增适配器,无需修改UI层或其他能力
支持复用:能力层的适配器可以独立复用到其他项目,协调逻辑也可以跨项目共享
协作流程
用户提问"对比各区域销售表现"后,MCPEngine的处理流程是这样的:
第一步:意图识别
通过关键词匹配分析用户意图。检测到"对比"关键词,判定为visualize意图,需要调用哪些能力:
ai:调用华为云AI分析数据特征chart:自动生成可视化图表data:计算关键指标
第二步:并行任务编排
三个适配器同时执行,而不是串行处理。
这是项目的关键设计——如果串行调用,总耗时是 AI分析(1.8s) + 图表生成(0.2s) + 数据处理(0.3s) = 2.3s。
但由于是并行,实际耗时就是 max(1.8, 0.2, 0.3) = 1.8s,再加上网络和渲染开销,总耗时约2.3-2.5s。
第三步:结果聚合与分层展示
MCPEngine将三个适配器的结果统一格式:
- 文本层:AI的分析结论(通过McMarkdownCard渲染)
- 图表层:可视化对比(通过Chart.js在canvas中渲染)
- 指标层:数据卡片(通过DevUI的d-row+d-col布局)
这样的分层展示遵循了"先理解、再直观、最后精准"的认知逻辑,业务人员可以快速抓取核心信息。
DevUI组件的深度集成
项目之所以整合度高,得益于对DevUI生态的充分利用。这里不只是"用了哪些组件"的问题,而是"这些组件如何协作"的问题。
MateChat对话交互
MateChat是DevUI生态中的对话组件,项目使用了三个核心组件:
- McBubble(气泡消息):支持用户/AI两种角色,自动处理头像、时间戳等。一条消息中可以混合渲染文本、图表、数据卡片
- McInput(智能输入框):内置了对话场景的常用逻辑(Enter发送、Shift+Enter换行、禁用状态)
- McMarkdownCard(富文本渲染):AI返回的分析报告通常是Markdown格式(包含加粗、列表、代码块),直接用普通div渲染会丢失格式。McMarkdownCard解决了这个问题
这三个组件的配合实现了"对话+数据展示"的混合界面。
与传统的"文本聊天框"相比,MateChat提供的是一个更高维的交互范式。
DevUI企业级组件
除了MateChat,项目还深度使用了DevUI其他组件:
- d-table:数据表格,支持排序、分页、自定义列。项目用它展示业务数据预览
- d-modal:对话框,用于数据集选择弹窗
- d-row + d-col:栅格系统,用于关键指标卡片的响应式布局
- d-button:按钮,支持多种变体和尺寸
- d-radio-group:单选组,用于数据选择
这些组件的统一设计语言(品牌色#5e7ce0、间距规范、交互反馈)保证了整个平台的视觉和交互一致性。用户从欢迎页面到数据加载到结果展示,不会感到任何界面的"割裂感"。
技术细节
华为云AI支持流式返回结果(token-by-token),如何在Vue中实现"逐字显示"效果?这里遇到了一个经典的Vue响应式坑。
错误做法:
const aiMessage = { id: 'ai_xxx', content: '' };
messages.value.push(aiMessage);
// 流式更新时
aiMessage.content += chunk; // ❌ Vue无法检测到变化
原因是Vue的响应式系统在push时建立了依赖追踪,但后续直接修改对象属性时,不会触发该依赖的更新。
正确做法:通过数组索引触发响应
messages.value.push({ id: 'ai_xxx', content: '' });
const aiMessageIndex = messages.value.length - 1;
await mcpEngine.process(query, tableData.value, (chunk: string) => {
messages.value[aiMessageIndex].content += chunk; // ✅ 触发响应式更新
});
在AIAdapter中,通过流式读取HTTP响应,逐个chunk推送到回调函数:
const reader = response.body?.getReader();
const decoder = new TextDecoder('utf-8');
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = decoder.decode(value, { stream: true });
const lines = chunk.split('\n').filter(line => line.trim() !== '');
for (const line of lines) {
if (line.startsWith('data: ')) {
const data = line.slice(6);
const parsed = JSON.parse(data);
const content = parsed.choices?.[0]?.delta?.content || '';
if (content && onStream) {
onStream(content); // 实时推送到UI层
}
}
}
}
实测中,一条200字的分析报告在2秒内逐字显示,用户体验比"等待后一次性显示"提升明显。
场景演示
场景1:区域销售对比
用户输入:"对比各区域销售表现"
系统处理:
- MCPEngine识别到"对比"关键词,判定为visualize意图
- 并行调用AIAdapter(华为云AI生成分析文本)、ChartAdapter(自动生成柱状图)、DataAdapter(计算总和、平均值、最大值)
展示结果:
- 文本层:AI解读"华东区域表现最佳,Q1销售额52万,增长率28%。华南、华北需探索增长潜力"
- 图表层:柱状图清晰对比四个区域的销售额
- 指标层:数据卡片展示"数据总量4条、Q1总和150万、平均值37.5万、最大值52万"
总耗时:2.3秒

场景2:销售趋势分析
用户输入:"分析销售数据趋势"
系统处理:ChartAdapter识别到"趋势"关键词后自动选择折线图类型
展示结果:
- 折线图展示6个月的销售走势
- AI给出"1月至2月增长10%,2月至3月增长28.57%,总体趋势向上"的专业建议

场景3:产品占比分析
用户输入:"各产品占比分析"
系统处理:ChartAdapter自动生成饼图
展示结果:
- 饼图展示产品A(36%)是销售冠军,产品B和C占比较低
- AI给出"需要优化销售策略"的建议

与类似项目的对比
市场上有类似的"AI+数据分析"工具,MCP项目的差异化在于:
| 维度 | MCP Business Analyzer | 传统BI工具(如Tableau) | 通用AI聊天工具(如ChatGPT) |
|---|---|---|---|
| 交互方式 | 对话+自动图表生成 | 拖拽配置报表 | 纯文本对话 |
| 处理流程 | 用户提问→自动识别意图→并行调用多个能力→统一展示 | 手动上传数据→选择图表类型→调整参数 | 用户提问→文本回复(需要手动复制、查看、导出) |
| 用户学习成本 | 低(只需会说话) | 中等(需要学习UI操作) | 低(但结果整理复杂) |
| 数据安全性 | 本地部署支持,数据不出网 | 通常本地或企业私有部署 | 数据可能上传到第三方服务 |
| 扩展性 | 高(适配器模式支持快速新增能力) | 中等(通常需要专业人员配置) | 低(无法深度定制) |
架构扩展性
MCP的设计让新增能力的成本很低。假设将来需要增加"数据导出"功能:
// 新增ExportAdapter
export class ExportAdapter implements MCPAdapter {
name = 'Export Adapter';
async process(payload: MCPPayload): Promise {
const workbook = XLSX.utils.book_new();
const worksheet = XLSX.utils.json_to_sheet(payload.data);
XLSX.utils.book_append_sheet(workbook, worksheet, 'Data');
XLSX.writeFile(workbook, 'export.xlsx');
return '数据已导出';
}
}
// 在MCPEngine中注册
class MCPEngine {
private exportAdapter: ExportAdapter;
async orchestrate(message: MCPMessage): Promise {
if (message.capabilities.includes('export')) {
tasks.push(this.exportAdapter.process(payload));
}
}
}
只需新增一个适配器实现,无需修改交互层、协调层或其他能力层代码。这种"关闭修改、开放扩展"的设计模式,让系统具备了长期演进的能力。
对DevUI生态的观察
通过这个项目,我对DevUI生态的认识更深了一层:
MateChat的本质不是"聊天组件",而是"交互范式的变更"。传统企业软件是"表单+按钮"范式(用户选择→系统执行),MateChat引入的是"对话+理解"范式(用户表达意图→系统自动判断并执行)。这种范式转变特别适合数据分析、运维监控、知识问答等场景。
DevUI不只是UI库,更是"企业级前端工程体系"。从基础组件(按钮、输入框)到高级组件(表格、图表),从设计规范到交互标准,都经过了企业应用的打磨。使用DevUI开发企业应用,效率和规范性都比通用UI库(如Element Plus)更好。
能力层与AI的融合可以超越"简单调用"。这个项目将华为云AI的能力通过MCPEngine纳入系统的协作机制中,AI不再是"独立的工具",而是"组件协作的一部分"。这种融合方式为未来更复杂的多模态、多能力协作奠定了基础。
总结
这个项目给我的启发不在于"如何做业务分析平台",而在于"好的协作机制比单个组件的强大更重要"。
DevUI提供了优秀的UI组件,MateChat提供了优秀的对话交互,华为云AI提供了强大的大模型能力。
但真正让这个平台成为"1+1>2"的,是MCP架构的协作设计——通过清晰的分层、明确的接口、高效的编排,让三个独立的能力有序地协作。
如果你在做企业应用开发,尤其是涉及数据分析、业务决策支持的应用,这个项目的架构思想是值得参考的。
即使不完全采用MCP模式,理解其中"解耦+编排"的核心思想,也能让你的架构设计更清晰、更易扩展。
相关资源
在线体验:https://mcpchat.acowbo.com
开源项目:https://gitcode.com/Mrxiao_bo/mcp-business-analyzer
DevUI官网:https://devui.design/home
MateChat使用指南:https://matechat.gitcode.com/use-guide/introduction.html