从0到1构建企业级AI应用:MateChat智能UI库全攻略

【免费下载链接】MateChat 前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com 【免费下载链接】MateChat 项目地址: https://gitcode.com/DevCloudFE/MateChat

🔥 为什么选择MateChat?

你是否还在为AI应用开发中遇到的这些问题烦恼?

  • 对话界面开发繁琐,重复造轮子
  • 组件风格不统一,设计体验差
  • 多轮对话状态管理复杂
  • 模型集成门槛高,流式响应难实现
  • 主题定制困难,无法适应企业品牌

本文将带你全面掌握MateChat——这款专为前端智能化场景打造的解决方案UI库,通过5个核心步骤+3个实战案例,让你在1小时内从零构建出媲美ChatGPT的企业级AI应用界面。

读完本文你将获得:

  • 🚀 MateChat组件库的完整使用指南
  • 🧩 快速搭建AI对话界面的实战代码
  • 🎨 企业级主题定制方案
  • 🤖 主流AI模型集成最佳实践
  • 📱 响应式设计与交互优化技巧

📋 目录

  1. MateChat简介
  2. 快速开始
  3. 核心组件详解
  4. 多轮对话实现
  5. 主题定制
  6. AI模型集成
  7. 实战案例
  8. 高级特性
  9. 常见问题

1. MateChat简介

1.1 什么是MateChat?

MateChat是一个面向智能化场景的解决方案UI库,专为AI应用开发设计,提供了一系列开箱即用的组件,帮助开发者快速构建高质量的AI对话界面。

mermaid

1.2 核心特性

特性 描述 优势
面向智能化场景 专为AI对话设计的组件体系 无需从零开发对话界面
开箱即用 简单安装即可使用全部组件 降低开发门槛,提高效率
多场景匹配 支持单轮/多轮对话、上下文管理等 适应不同AI应用需求
多主题适配 内置多套主题,支持自定义 满足企业品牌个性化需求
Markdown支持 完美渲染代码块、表格、公式等 提升AI内容展示效果
流式响应 支持模型流式输出渲染 优化用户等待体验

1.3 谁在使用

  • 华为云CodeArts智能助手:为开发者提供代码生成、解释和优化功能
  • InsCode AI IDE:集成AI能力的在线开发环境

MateChat示例界面

2. 快速开始

2.1 环境准备

首先确保你的开发环境满足以下要求:

环境 版本要求
Node.js ≥ 14.0.0
Vue ≥ 3.2.0
TypeScript ≥ 4.5.0

2.2 安装步骤

步骤1:创建Vue项目(如果没有)
npm create vite@latest my-matechat-app -- --template vue-ts
cd my-matechat-app
步骤2:安装依赖
npm i vue-devui @matechat/core @devui-design/icons
步骤3:引入MateChat

main.ts中引入MateChat及样式:

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

// 引入MateChat组件库
import MateChat from '@matechat/core';

// 引入图标库样式
import '@devui-design/icons/icomoon/devui-icon.css';

// 创建应用并使用MateChat
createApp(App)
  .use(MateChat)
  .mount('#app');

2.3 第一个组件

App.vue中使用Bubble组件创建简单对话界面:

<template>
  <div class="app-container">
    <!-- 用户对话气泡 -->
    <McBubble 
      :content="'你好,我想了解MateChat的使用方法'" 
      :align="'right'"
      :avatarConfig="{ 
        imgSrc: 'https://matechat.gitcode.com/png/demo/userAvatar.svg' 
      }"
    ></McBubble>
    
    <!-- AI对话气泡 -->
    <McBubble 
      :content="'欢迎使用MateChat!我可以帮你快速构建AI应用界面。需要我提供一个示例吗?'" 
      :avatarConfig="{ 
        imgSrc: 'https://matechat.gitcode.com/logo.svg' 
      }"
    ></McBubble>
  </div>
</template>

<style scoped>
.app-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
}
</style>

运行应用:

npm run dev

访问http://localhost:5173,你将看到一个简单的对话界面。

3. 核心组件详解

3.1 布局组件 (Layout)

Layout组件提供完整的AI应用布局结构,包含头部、内容区和输入区:

<template>
  <McLayout class="ai-app-layout">
    <!-- 头部组件 -->
    <McHeader 
      :title="'企业AI助手'" 
      :logoImg="'https://matechat.gitcode.com/logo.svg'"
    >
      <template #operationArea>
        <div class="header-operations">
          <i class="icon-settings"></i>
          <i class="icon-user"></i>
        </div>
      </template>
    </McHeader>
    
    <!-- 内容区域 -->
    <McLayoutContent class="chat-content">
      <!-- 对话内容将在这里展示 -->
    </McLayoutContent>
    
    <!-- 输入区域 -->
    <McLayoutSender>
      <!-- 输入框将在这里 -->
    </McLayoutSender>
  </McLayout>
</template>

<style scoped>
.ai-app-layout {
  height: 100vh;
  flex-direction: column;
}
.chat-content {
  flex: 1;
  overflow-y: auto;
  padding: 20px;
}
</style>

3.2 对话气泡 (Bubble)

Bubble组件用于展示对话内容,支持不同对齐方式、加载状态和自定义样式:

<template>
  <!-- 基本用法 -->
  <McBubble 
    :content="message.content"
    :align="message.from === 'user' ? 'right' : 'left'"
    :avatarConfig="message.from === 'user' ? userAvatar : aiAvatar"
    :loading="message.loading"
  ></McBubble>
</template>

<script setup>
const userAvatar = {
  imgSrc: 'https://matechat.gitcode.com/png/demo/userAvatar.svg'
}

const aiAvatar = {
  imgSrc: 'https://matechat.gitcode.com/logo.svg'
}

const message = {
  from: 'ai',
  content: '这是一条AI回复消息',
  loading: false
}
</script>
支持Markdown渲染

Bubble组件内置Markdown支持,可以直接渲染富文本内容:

<McBubble 
  :content="`
# 这是标题

## 这是二级标题

**加粗文本** 和 *斜体文本*

\`\`\`javascript
function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [];
  const right = [];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}
\`\`\`

- 列表项1
- 列表项2
- 列表项3
  `"
></McBubble>

3.3 输入组件 (Input)

Input组件提供AI对话专用输入框,支持发送、清空、字数统计等功能:

<template>
  <McInput 
    v-model="inputValue"
    :maxLength="2000"
    placeholder="请输入您的问题..."
    @submit="handleSubmit"
  >
    <template #extra>
      <div class="input-extra">
        <span class="word-count">{{ inputValue.length }}/2000</span>
        <Button 
          icon="send" 
          @click="handleSubmit"
          :disabled="!inputValue.trim()"
        >发送</Button>
      </div>
    </template>
  </McInput>
</template>

<script setup>
import { ref } from 'vue';
import { Button } from 'vue-devui/button';
import 'vue-devui/button/style.css';

const inputValue = ref('');

const handleSubmit = () => {
  if (inputValue.value.trim()) {
    // 处理发送逻辑
    console.log('发送消息:', inputValue.value);
    inputValue.value = '';
  }
};
</script>

<style scoped>
.input-extra {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 8px 0;
}

.word-count {
  color: #666;
  font-size: 12px;
}
</style>

3.4 提示词组件 (Prompt)

Prompt组件用于展示常用提示词,帮助用户快速发起对话:

<template>
  <div class="prompt-container">
    <h3>推荐问题</h3>
    <McPrompt 
      :list="promptList"
      :direction="'horizontal'"
      @itemClick="handlePromptClick"
    ></McPrompt>
  </div>
</template>

<script setup>
const promptList = [
  {
    value: 'quickSort',
    label: '帮我写一个快速排序',
    iconConfig: { name: 'icon-info-o', color: '#5e7ce0' },
    desc: '使用JavaScript实现'
  },
  {
    value: 'markdown',
    label: '如何使用Markdown',
    iconConfig: { name: 'icon-edit', color: '#3ac295' },
    desc: '基础语法指南'
  },
  {
    value: 'vue3',
    label: 'Vue3组合式API',
    iconConfig: { name: 'icon-vue', color: '#42b883' },
    desc: '使用教程'
  }
];

const handlePromptClick = (item) => {
  console.log('选择了提示词:', item);
  // 可以将提示词填入输入框
};
</script>

4. 多轮对话实现

4.1 对话状态管理

使用Vue3的组合式API管理对话状态:

<template>
  <McLayout class="chat-app">
    <McLayoutContent class="chat-messages">
      <template v-for="(msg, index) in messages" :key="index">
        <McBubble 
          :content="msg.content"
          :align="msg.from === 'user' ? 'right' : 'left'"
          :avatarConfig="msg.from === 'user' ? userAvatar : aiAvatar"
          :loading="msg.loading"
        ></McBubble>
      </template>
    </McLayoutContent>
    
    <McLayoutSender>
      <McInput 
        v-model="inputValue"
        @submit="sendMessage"
      ></McInput>
    </McLayoutSender>
  </McLayout>
</template>

<script setup>
import { ref } from 'vue';

// 对话消息列表
const messages = ref([
  {
    from: 'ai',
    content: '您好!我是您的AI助手,有什么可以帮助您的吗?',
    loading: false
  }
]);

// 输入框内容
const inputValue = ref('');

// 头像配置
const userAvatar = {
  imgSrc: 'https://matechat.gitcode.com/png/demo/userAvatar.svg'
};

const aiAvatar = {
  imgSrc: 'https://matechat.gitcode.com/logo.svg'
};

// 发送消息
const sendMessage = () => {
  if (!inputValue.value.trim()) return;
  
  // 添加用户消息
  messages.value.push({
    from: 'user',
    content: inputValue.value,
    loading: false
  });
  
  // 清空输入框
  inputValue.value = '';
  
  // 添加AI回复(模拟)
  messages.value.push({
    from: 'ai',
    content: '',
    loading: true
  });
  
  // 模拟AI响应延迟
  setTimeout(() => {
    // 更新最后一条消息(AI回复)
    messages.value[messages.value.length - 1] = {
      from: 'ai',
      content: '感谢您的提问!这是一条模拟的AI回复。在实际应用中,这里会显示真实的AI模型返回结果。',
      loading: false
    };
  }, 1500);
};
</script>

<style scoped>
.chat-app {
  height: 100vh;
  flex-direction: column;
}

.chat-messages {
  flex: 1;
  overflow-y: auto;
  padding: 20px;
}
</style>

4.2 流式响应处理

实现AI模型流式响应展示,提升用户体验:

<script setup>
// 在前面代码基础上修改sendMessage方法
const sendMessage = async () => {
  if (!inputValue.value.trim()) return;
  
  // 添加用户消息
  messages.value.push({
    from: 'user',
    content: inputValue.value,
    loading: false
  });
  
  // 清空输入框
  inputValue.value = '';
  
  // 添加AI回复(加载中)
  const aiMessageIndex = messages.value.length;
  messages.value.push({
    from: 'ai',
    content: '',
    loading: true
  });
  
  try {
    // 模拟流式响应
    const responseText = "这是一条模拟的流式响应消息。在实际应用中,这里会接收来自AI模型的流式数据,并逐段显示。";
    let currentContent = '';
    let index = 0;
    
    // 模拟流式接收
    const interval = setInterval(() => {
      if (index < responseText.length) {
        currentContent += responseText.charAt(index);
        index++;
        // 更新AI消息内容
        messages.value[aiMessageIndex] = {
          from: 'ai',
          content: currentContent,
          loading: false
        };
      } else {
        clearInterval(interval);
      }
    }, 20);
    
  } catch (error) {
    messages.value[aiMessageIndex] = {
      from: 'ai',
      content: '抱歉,获取响应时出错,请稍后重试。',
      loading: false
    };
    console.error('流式响应错误:', error);
  }
};
</script>

5. 主题定制

5.1 使用内置主题

MateChat提供多种内置主题,可直接切换:

<template>
  <div class="theme-switcher">
    <Button @click="switchTheme('default')">默认主题</Button>
    <Button @click="switchTheme('dark')">深色主题</Button>
    <Button @click="switchTheme('pink')">粉色主题</Button>
  </div>
</template>

<script setup>
import { ref, provide } from 'vue';
import { Button } from 'vue-devui/button';

// 当前主题
const currentTheme = ref('default');

// 切换主题
const switchTheme = (theme) => {
  currentTheme.value = theme;
  
  // 提供主题给子组件
  provide('theme', currentTheme.value);
  
  // 更新全局样式类
  document.documentElement.setAttribute('data-theme', theme);
};

// 初始化主题
switchTheme('default');
</script>

<style>
/* 深色主题变量覆盖 */
[data-theme="dark"] {
  --mc-background-color: #1e1e1e;
  --mc-text-color: #f5f5f5;
  --mc-bubble-user-bg: #3a3a3a;
  --mc-bubble-ai-bg: #2d2d2d;
}

/* 粉色主题变量覆盖 */
[data-theme="pink"] {
  --mc-primary-color: #ff69b4;
  --mc-bubble-user-bg: #ffe4e1;
  --mc-bubble-ai-bg: #fff0f5;
}
</style>

5.2 自定义主题

基于CSS变量自定义企业主题:

/* 自定义主题变量 */
:root {
  /* 主色调 */
  --mc-primary-color: #0066cc;
  --mc-primary-light-color: #e6f7ff;
  
  /* 背景色 */
  --mc-background-color: #f5f7fa;
  
  /* 文本颜色 */
  --mc-text-color: #333333;
  --mc-text-secondary-color: #666666;
  
  /* 气泡样式 */
  --mc-bubble-user-bg: #e6f7ff;
  --mc-bubble-user-color: #333333;
  --mc-bubble-ai-bg: #ffffff;
  --mc-bubble-ai-color: #333333;
  --mc-bubble-radius: 12px;
  
  /* 边框样式 */
  --mc-border-color: #d9d9d9;
  --mc-border-radius: 8px;
}

6. AI模型集成

6.1 集成OpenAI

// src/utils/openai.js
import OpenAI from 'openai';

// 创建OpenAI客户端
const client = new OpenAI({
  apiKey: import.meta.env.VITE_OPENAI_API_KEY, // 从环境变量获取API密钥
  baseURL: import.meta.env.VITE_OPENAI_BASE_URL || 'https://api.openai.com/v1',
  dangerouslyAllowBrowser: true // 允许在浏览器中使用(生产环境建议通过后端代理)
});

/**
 * 调用OpenAI API生成响应
 * @param {string} prompt 用户输入
 * @param {function} onChunk 流式响应回调函数
 * @returns {Promise<void>}
 */
export async function getOpenAIResponse(prompt, onChunk) {
  try {
    const completion = await client.chat.completions.create({
      model: 'gpt-3.5-turbo',
      messages: [
        { role: 'system', content: '你是一个 helpful 的AI助手。' },
        { role: 'user', content: prompt }
      ],
      stream: true // 启用流式响应
    });

    // 处理流式响应
    for await (const chunk of completion) {
      const content = chunk.choices[0]?.delta?.content || '';
      if (content && onChunk) {
        onChunk(content); // 调用回调函数传递内容块
      }
    }

  } catch (error) {
    console.error('OpenAI API调用错误:', error);
    throw error;
  }
}

在组件中使用:

<script setup>
import { getOpenAIResponse } from '@/utils/openai';

// 修改sendMessage方法集成OpenAI
const sendMessage = async () => {
  if (!inputValue.value.trim()) return;
  
  // 添加用户消息
  messages.value.push({
    from: 'user',
    content: inputValue.value,
    loading: false
  });
  
  // 清空输入框
  inputValue.value = '';
  
  // 添加AI回复(加载中)
  const aiMessageIndex = messages.value.length;
  messages.value.push({
    from: 'ai',
    content: '',
    loading: true
  });
  
  try {
    // 调用OpenAI API
    await getOpenAIResponse(inputValue.value, (chunk) => {
      // 更新AI消息内容
      messages.value[aiMessageIndex] = {
        from: 'ai',
        content: messages.value[aiMessageIndex].content + chunk,
        loading: false
      };
    });
    
  } catch (error) {
    messages.value[aiMessageIndex] = {
      from: 'ai',
      content: '抱歉,获取响应时出错,请稍后重试。',
      loading: false
    };
  }
};
</script>

6.2 模型选择与配置

MateChat支持多种AI模型集成,可通过配置文件统一管理:

// src/config/models.js
export const MODEL_CONFIGS = {
  openai: {
    name: 'OpenAI GPT-3.5',
    apiKey: import.meta.env.VITE_OPENAI_API_KEY,
    baseURL: import.meta.env.VITE_OPENAI_BASE_URL,
    model: 'gpt-3.5-turbo'
  },
  pangus: {
    name: '盘古大模型',
    apiKey: import.meta.env.VITE_PANGUS_API_KEY,
    baseURL: import.meta.env.VITE_PANGUS_BASE_URL,
    model: 'pangus-7b-chat'
  },
  deepseek: {
    name: 'DeepSeek',
    apiKey: import.meta.env.VITE_DEEPSEEK_API_KEY,
    baseURL: import.meta.env.VITE_DEEPSEEK_BASE_URL,
    model: 'deepseek-chat'
  }
};

// 模型选择器组件
export const ModelSelector = {
  props: ['models', 'selectedModel', 'onModelChange'],
  template: `
    <select 
      :value="selectedModel" 
      @change="onModelChange($event.target.value)"
    >
      <option v-for="model in models" :value="model.id">
        {{ model.name }}
      </option>
    </select>
  `
};

7. 实战案例

7.1 智能代码助手

构建一个代码生成与解释的AI助手:

<template>
  <McLayout class="code-assistant">
    <McHeader :title="'智能代码助手'"></McHeader>
    
    <McLayoutContent class="code-content">
      <!-- 代码提示词 -->
      <McPrompt 
        :list="codePrompts"
        :direction="'horizontal'"
        @itemClick="handlePromptClick"
      ></McPrompt>
      
      <!-- 对话区域 -->
      <template v-for="(msg, index) in messages" :key="index">
        <McBubble 
          :content="msg.content"
          :align="msg.from === 'user' ? 'right' : 'left'"
          :avatarConfig="msg.from === 'user' ? userAvatar : aiAvatar"
        ></McBubble>
      </template>
    </McLayoutContent>
    
    <McLayoutSender>
      <McInput 
        v-model="inputValue"
        placeholder="请输入您的代码需求..."
        @submit="sendMessage"
      ></McInput>
    </McLayoutSender>
  </McLayout>
</template>

<script setup>
import { ref } from 'vue';

// 代码相关提示词
const codePrompts = [
  {
    value: 'quickSort',
    label: '快速排序实现',
    desc: 'JavaScript版本'
  },
  {
    value: 'debounce',
    label: '防抖函数',
    desc: 'ES6实现'
  },
  {
    value: 'vueComponent',
    label: 'Vue组件封装',
    desc: '最佳实践'
  },
  {
    value: 'reactHook',
    label: '自定义React Hook',
    desc: '示例教程'
  }
];

// 其他逻辑与前面类似,省略...
</script>

7.2 文档问答系统

构建一个基于知识库的文档问答系统:

<template>
  <McLayout class="doc-qa-system">
    <McLayoutContent class="doc-qa-content">
      <div class="doc-sidebar">
        <h3>知识库文档</h3>
        <ul>
          <li v-for="doc in documents" :key="doc.id" @click="selectDocument(doc)">
            {{ doc.title }}
          </li>
        </ul>
      </div>
      
      <div class="chat-area">
        <template v-for="(msg, index) in messages" :key="index">
          <McBubble 
            :content="msg.content"
            :align="msg.from === 'user' ? 'right' : 'left'"
          ></McBubble>
        </template>
      </div>
    </McLayoutContent>
    
    <McLayoutSender>
      <McInput 
        v-model="inputValue"
        placeholder="请输入您的问题..."
        @submit="sendMessage"
      ></McInput>
    </McLayoutSender>
  </McLayout>
</template>

<script setup>
import { ref } from 'vue';

// 文档列表
const documents = [
  { id: 1, title: 'MateChat组件文档' },
  { id: 2, title: 'API接口文档' },
  { id: 3, title: '部署指南' },
  { id: 4, title: '常见问题' }
];

// 当前选中文档
const selectedDocument = ref(null);

// 选择文档
const selectDocument = (doc) => {
  selectedDocument.value = doc;
  // 加载文档内容并添加到对话历史
  addDocumentToContext(doc);
};

// 其他逻辑与前面类似,省略...
</script>

<style scoped>
.doc-qa-content {
  display: flex;
}

.doc-sidebar {
  width: 250px;
  border-right: 1px solid #eee;
  padding: 20px;
}

.chat-area {
  flex: 1;
  padding: 20px;
}
</style>

8. 高级特性

8.1 @提及功能

实现@提及功能,支持在对话中引用用户或实体:

<template>
  <McMention 
    v-model="inputValue"
    :data="mentionList"
    trigger="@"
    @select="handleMentionSelect"
  ></McMention>
</template>

<script setup>
import { ref } from 'vue';

const inputValue = ref('');

// 可提及列表
const mentionList = [
  { id: 1, name: '张三', avatar: 'https://example.com/avatar/1.jpg' },
  { id: 2, name: '李四', avatar: 'https://example.com/avatar/2.jpg' },
  { id: 3, name: '王五', avatar: 'https://example.com/avatar/3.jpg' }
];

// 选择提及项
const handleMentionSelect = (item) => {
  console.log('选择了提及项:', item);
  // 处理提及逻辑
};
</script>

8.2 对话历史管理

实现对话历史的保存、加载和删除:

<template>
  <div class="history-manager">
    <Button @click="showHistoryDialog = true">历史对话</Button>
    
    <Dialog v-model:visible="showHistoryDialog" title="对话历史">
      <List>
        <List-item 
          v-for="history in conversationHistory" 
          :key="history.id"
          @click="loadHistory(history.id)"
        >
          <div class="history-item">
            <div class="history-title">{{ history.title }}</div>
            <div class="history-date">{{ formatDate(history.date) }}</div>
            <Button 
              icon="delete" 
              size="sm" 
              @click.stop="deleteHistory(history.id)"
            ></Button>
          </div>
        </List-item>
      </List>
    </Dialog>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import { Dialog } from 'vue-devui/dialog';
import { List, ListItem } from 'vue-devui/list';

// 对话历史
const conversationHistory = ref([]);
const showHistoryDialog = ref(false);

// 加载历史对话
const loadHistory = (id) => {
  // 从本地存储加载对话历史
  const history = JSON.parse(localStorage.getItem(`chat_history_${id}`));
  if (history) {
    // 更新当前对话
    messages.value = history.messages;
    showHistoryDialog.value = false;
  }
};

// 保存对话历史
const saveHistory = () => {
  const historyId = Date.now();
  const history = {
    id: historyId,
    title: messages.value[messages.value.length - 1]?.content || '新对话',
    date: new Date(),
    messages: [...messages.value]
  };
  
  // 保存到本地存储
  localStorage.setItem(`chat_history_${historyId}`, JSON.stringify(history));
  
  // 更新历史列表
  conversationHistory.value.unshift(history);
};

// 其他方法省略...

// 初始化加载历史
onMounted(() => {
  // 从本地存储加载历史列表
  const keys = Object.keys(localStorage);
  const historyKeys = keys.filter(key => key.startsWith('chat_history_'));
  
  conversationHistory.value = historyKeys.map(key => {
    const history = JSON.parse(localStorage.getItem(key));
    return history;
  }).sort((a, b) => new Date(b.date) - new Date(a.date));
});
</script>

9. 常见问题

9.1 安装问题

Q: 安装依赖时出现冲突怎么办?

A: 尝试使用pnpm安装,它能更好地处理依赖冲突:

npm install -g pnpm
pnpm install

9.2 组件使用问题

Q: 组件样式不生效如何解决?

A: 确保正确引入了组件样式文件:

// 确保在main.ts中引入了必要的样式
import '@devui-design/icons/icomoon/devui-icon.css';
import 'vue-devui/style.css';

9.3 模型集成问题

Q: 如何处理模型API调用超时?

A: 实现超时处理和重试机制:

// 添加超时处理的API调用
const fetchWithTimeout = async (url, options, timeout = 5000) => {
  const controller = new AbortController();
  const id = setTimeout(() => controller.abort(), timeout);
  
  try {
    const response = await fetch(url, {
      ...options,
      signal: controller.signal
    });
    clearTimeout(id);
    return response;
  } catch (error) {
    if (error.name === 'AbortError') {
      throw new Error('请求超时,请稍后重试');
    }
    throw error;
  }
};

🚀 开始使用MateChat

安装

# 克隆仓库
git clone https://gitcode.com/DevCloudFE/MateChat.git

# 进入项目目录
cd MateChat

# 安装依赖
pnpm install

# 运行文档
pnpm run docs:dev

访问 http://localhost:3000 查看文档和示例。

贡献代码

我们欢迎社区贡献!提交PR前请阅读贡献指南:

# 创建分支
git checkout -b feature/your-feature

# 提交更改
git commit -m "feat: add new feature"

# 推送到远程
git push origin feature/your-feature

总结

MateChat作为一款专为AI应用打造的UI库,提供了从基础组件到高级功能的完整解决方案,帮助开发者快速构建高质量的AI对话界面。通过本文介绍的核心组件、多轮对话实现、主题定制和模型集成等内容,你已经具备了构建企业级AI应用的能力。

无论是智能客服、代码助手还是知识库问答系统,MateChat都能满足你的需求。立即开始使用MateChat,让AI应用开发变得简单高效!

附录:资源链接

  • 官方文档:https://matechat.gitcode.com
  • 组件示例:https://matechat.gitcode.com/components
  • GitHub仓库:https://gitcode.com/DevCloudFE/MateChat
  • 问题反馈:https://gitcode.com/DevCloudFE/MateChat/issues

【免费下载链接】MateChat 前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com 【免费下载链接】MateChat 项目地址: https://gitcode.com/DevCloudFE/MateChat

更多推荐