华为MateChat组件是为AI生成内容(AIGC)场景设计的UI库。MateChat,作为华为专为AIGC场景精心打造的UI库,旨在助力开发者高效构建AI对话应用。实际上,它不仅支撑了华为内部多个应用的对话需求,还融入了CodeArts、InsCode AI IDE等智能化助手的构建之中。

在这里插入图片描述MateChat 是由华为 DevUI 团队开发的一款开源前端 AI 组件库,旨在帮助开发者快速构建智能对话应用。

它专注于生成式 AI(GenAI)场景,提供了一套完整的对话式交互组件,如消息气泡、输入框和过程监督组件,以实现流畅、易用的用户体验。 其核心特点包括:

  • 即插即用:轻量化设计,支持快速集成到 React、Vue 等主流前端框架中,降低开发门槛。
  • 高扩展性:允许自定义消息格式、主题样式和对话逻辑,兼容 OpenAI、Gemini 等主流 AI 模型。
  • 多场景适配:不仅适用于通用网站(如企业官网、电商平台),还特别优化了研发工具领域(如 IDE 插件),支持沉浸式、情境化的交互体验。

MateChat 已在华为内部多个应用及 CodeArts、InsCode AI IDE 等产品中落地,体现了其在实际项目中的可靠性。 通过提供开箱即用的组件和灵活的定制能力,它致力于简化 AI 对话功能的开发流程,助力应用智能化升级。


在安装完成MateChat 后,我们需要将AI大模型进行对接进来。

OpenAI

在搭建完成页面后,我们可以开始对接模型服务,如 DeepSeek、盘古大模型、ChatGPT 等优秀大模型。在注册并生成对应模型的调用API_Key后,可以参考如下方法进行调用:

通过 npm 安装 openai:

$ npm install openai

使用OpenAI初始化并调用模型接口,如下为一段代码示例:
注意:通常openai-node用于node环境,如果在浏览器环境使用,需要开启dangerouslyAllowBrowser,开启该配置存在安全风险(API凭证泄露),请确保在安全环境中使用,详见openai-node官方文档说明。

import OpenAI from 'openai';

const client = ref();

client.value = new OpenAI({
  apiKey: '', // 模型APIKey
  baseURL: '', // 模型API地址
  dangerouslyAllowBrowser: true, // 浏览器环境使用需要开启
});

const fetchData = (ques) => {
  const completion = await client.value!.chat.completions.create({
    model: 'my-model', // 替换为自己的model名称
    messages: [
      { role: 'user', content: ques },
    ],
    stream: true, // 为 true 则开启接口的流式返回
  });

  for await (const chunk of completion) {
    console.log('content: ', chunk.choices[0]?.delta?.content || '');
    console.log('chatId: ', chunk.id);
  }
}

结合MateChat【快速开始】示例代码,修改onSubmit函数代码如下:

import OpenAI from 'openai';

const client = ref<OpenAI>();

client.value = new OpenAI({
  apiKey: '', // 模型APIKey
  baseURL: '', // 模型API地址
  dangerouslyAllowBrowser: true,
});

const onSubmit = (evt) => {
  inputValue.value = '';
  startPage.value = false;
  // 用户发送消息
  messages.value.push({
    from: 'user',
    content: evt,
    avatarConfig: { name: 'user' },
  });

  fetchData(evt);
};

const fetchData = async (ques) => {
  // 消息响应气泡
  messages.value.push({
    from: 'model',
    content: '',
    avatarConfig: { name: 'model' },
    id: '',
    loading: true,
  });
  const completion = await client.value!.chat.completions.create({
    model: 'my-model', // 替换为自己的model名称
    messages: [{ role: 'user', content: ques }],
    stream: true, // 为 true 则开启接口的流式返回
  });
  messages.value[messages.value.length - 1].loading = false;
  // 将流式返回拼接到消息内容中
  for await (const chunk of completion) {
    const content = chunk.choices[0]?.delta?.content || '';
    const chatId = chunk.id;
    messages.value[messages.value.length - 1].content += content;
    messages.value[messages.value.length - 1].id = chatId;
  }
};

完成模型API地址与APIKey填充后,即拥有了一个对接大模型的简单应用。


DeepSeek

这里我们以DeepSeek为例,介绍如何在MateChat搭建的应用中接入DeepSeek提供的模型服务。

DeepSeek API 使用与 OpenAI 兼容的 API 格式,详见官方文档:DeepSeek - 首次调用API

baseURL获取:https://api-docs.deepseek.com/zh-cn/
apiKey获取:https://platform.deepseek.com/api\_keys

前往DeepSeek开发平台获取相关的baseURL和apiKey后,可以参考如下方法对【快速开始】中示例代码进行调整:

const onSubmit = (evt) => {
  inputValue.value = '';
  startPage.value = false;
  // 用户发送消息
  messages.value.push({
    from: 'user',
    content: evt,
  });
  setTimeout(() => {
    // 模型返回消息
    messages.value.push({
      from: 'model',
      content: evt,
    });
  }, 200);
};
修改为:

import OpenAI from 'openai';

const client = ref<OpenAI>();

client.value = new OpenAI({
  apiKey: '', // 模型APIKey
  baseURL: '', // 模型API地址
  dangerouslyAllowBrowser: true, // 浏览器环境使用需要开启
});

const onSubmit = (evt) => {
  inputValue.value = '';
  startPage.value = false;
  // 用户发送消息
  messages.value.push({
    from: 'user',
    content: evt,
    avatarConfig: { name: 'user' },
  });

  fetchData(evt);
};

const fetchData = async (ques) => {
  messages.value.push({
    from: 'model',
    content: '',
    avatarConfig: { name: 'model' },
    id: '',
    loading: true,
  });
  const completion = await client.value!.chat.completions.create({
    model: 'deepseek-reasoner', // 根据deepseek模型列表进行替换
    messages: [{ role: 'user', content: ques }],
    stream: true, // 为 true 则开启接口的流式返回
  });
  messages.value[messages.value.length - 1].loading = false;
  for await (const chunk of completion) {
    const content = chunk.choices[0]?.delta?.content || '';
    const chatId = chunk.id;
    messages.value[messages.value.length - 1].content += content;
    messages.value[messages.value.length - 1].id = chatId;
  }
};

完成模型API地址与APIKey填充后,即拥有了一个对接DeepSeek大模型的简单应用。如果你想要参考更完整的页面示例.


其他

当前大部分大模型服务 API 接口都使用与 OpenAI 兼容的 API 格式,但直到目前,还没有标准的协议定义模型接口规范,所以仍会存在协议不兼容的问题。

这里补充介绍如下 fetch + SSE 的接入方案供参考:

Fetch Event Source

Fetch Event Source 是一个用于处理服务器发送事件(Server-Sent Events, SSE)的 JavaScript 库,并具有 Fetch API 中所提供的所有功能。

安装依赖

npm install @microsoft/fetch-event-source

使用 fetchEventSource 调用模型接口

import { fetchEventSource } from '@microsoft/fetch-event-source';

const getAIAnswer = (content, type) => {
  abortController = new AbortController();
  const aiAnswer = {
    from: 'assistant',
    content: '',
    type,
    avatarPosition: 'side-left',
    avatarConfig: { ...aiModelAvatar },
    loading: true,
  };
  messages.value.push(aiAnswer);
  const source = fetchEventSource(apiUrl, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      messages: [
        {
          role: 'user',
          content,
        },
      ],
      apikey: apiKey,
    }),
    signal: abortController.signal,
    onopen: (response) => {},
    onmessage: (msg) => {
      messages.value.at(-1).loading = false;
      if (msg.data === '[DONE]') {
        nextTick(() => {
          conversationRef.value?.scrollTo({
            top: conversationRef.value.scrollHeight,
            behavior: 'smooth',
          });
        });
        return;
      }
      const data = JSON.parse(msg.data);
      const responseContent = data.choices[0].delta.content;
      messages.value.at(-1).content += responseContent;
    },
    onerror: (err) => {
      messages.value.at(-1).loading = false;
      messages.value.at(-1).content = '请求失败';
      throw err;
    },
  });
};

const stop = () => {
  if (abortController) {
    abortController.abort();
    abortController = null;
    // 更新最后一条消息的状态
    if (messages.value.length > 0) {
      messages.value.at(-1).loading = false;
      messages.value.at(-1).content += '已中止对话';
    }
  }
};

使用MateChat的多种方式

当前MateChat主要基于Vue3开发,但我们仍可以通过多种方式将MateChat与您的项目集成。

以下是一些可行方案供参考:

一、在Vue3项目中集成MateChat(主流方式)

适用场景:需要深度定制AI助手功能,并与现有Vue项目无缝融合的场景。

步骤: 参考 快速开始 的使用方式

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');

在这里插入图片描述

二、通过iframe嵌入独立页面

适用场景:需快速为第三方平台添加AI助手,且不希望侵入宿主环境。

步骤:

  • 构建独立MateChat页面: 创建一个包含MateChat组件的独立Vue项目,并打包为静态资源或独立部署。
  • 嵌入iframe:在宿主页面中通过iframe加载matechat应用。

在这里插入图片描述

三、与其他框架集成(如React/Angular)

适用场景:需与现有其他框架的宿主应用集成

方案建议:

  • 封装Web Component: 将MateChat组件打包为自定义元素,供任意框架调用。
  • 通过微前端架构: 使用qiankun、microApp等微前端方案将MateChat作为独立子应用加载。

华为MateChat组件是为AI生成内容(AIGC)场景设计的UI库。MateChat,作为华为专为AIGC场景精心打造的UI库,旨在助力开发者高效构建AI对话应用。实际上,它不仅支撑了华为内部多个应用的对话需求,还融入了CodeArts、InsCode AI IDE等智能化助手的构建之中。MateChat 是由华为 DevUI 团队开发的一款开源前端 AI 组件库,旨在帮助开发者快速构建智能对话应用。

MateChat:https://gitcode.com/DevCloudFE/MateChat
MateChat官网:https://matechat.gitcode.com
DevUI官网:https://devui.design/home

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐