前言

最近這幾年,個人投資者對智能化、個性化的投資顧問服務需求日益增長。傳統的投資顧問服務存在門檻高、成本大、效率低等問題,無法滿足普通投資者的需求。同時,人工智能技術的進步為金融服務提供了新的可能性,可以通過智能算法和大數據分析為用户提供便捷、專業的投資建議。

本文將聚焦 DevUI 的 MateChat 前端智能化場景UI庫,結合其在證券智能投顧系統中的實際應用,從功能完整性、開發體驗、性能表現及擴展性等維度,對其進行全面測評。

為什麼選擇 MateChat?

在構建具備 AI 對話能力的智能投顧系統時,開發者面臨兩大核心挑戰:

  • 快速搭建專業、美觀的聊天界面
  • 無縫集成流式 AI 接口(如 DeepSeek、OpenAI)

傳統方案往往需要自行實現消息氣泡、輸入框、滾動定位、加載狀態等基礎功能,開發成本高且易出錯。而 MateChat 作為 DevUI 生態中專為 AI 聊天場景設計的組件庫,恰好解決了上述痛點。

核心優勢概覽:

  • 開箱即用的聊天佈局(McLayout、McHeader、McLayoutSender)
  • 支持用户/模型雙角色消息展示(McBubble)
  • 內置引導提示(McPrompt)與歡迎頁(McIntroduction)
  • 與 Vue 3 + TypeScript 高度兼容
  • 輕量、無冗餘依賴,易於定製

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_API

編輯

技術方案與架構設計

技術棧選擇

技術/框架

版本

用途

來源

Vue.js

3.5.24

前端框架


TypeScript

5.9.3

類型安全的JavaScript超集


Vite

7.2.2 (rolldown-vite)

構建工具


vue-devui

1.6.34

UI組件庫


@matechat/core

1.10.0

聊天功能支持


OpenAI API

-

AI對話功能


DeepSeek API

-

流式響應處理


系統架構

系統採用前端單頁應用(SPA)架構,基於Vue 3的Composition API和TypeScript構建。整體架構清晰,分為以下幾個層次:

  1. 展示層:使用Vue 3的單文件組件(SFC)實現用户界面
  2. 組件層:包含智能諮詢、股票分析、投資組合管理、風險評估等核心功能組件
  3. 數據層:使用Vue的響應式系統管理應用狀態
  4. API交互層:與外部AI服務(OpenAI/DeepSeek)進行通信

項目結構

項目採用典型的Vue 3 + TypeScript + Vite項目結構,核心功能組件位於src/components目錄下:

├── src/
│   ├── components/           # 功能組件
│   │   ├── PortfolioManagement.vue  # 投資組合管理
│   │   ├── RiskAssessment.vue       # 風險評估
│   │   └── StockAnalysisChart.vue   # 股票分析
│   ├── App.vue               # 應用主組件
│   └── main.ts               # 應用入口
├── package.json              # 項目配置和依賴
├── vite.config.ts            # Vite配置
└── tsconfig.json             # TypeScript配置

CLI創建項目

可通過如下命令創建一個應用:

// npm
npm create matechat@latest

// pnpm
pnpm create matechat@latest

這一指令會安裝並執行create-matechat,你將會看到一些創建提示:

Please input the project name: matechat-project
Please select the template: Vue Starter

應用創建完成後通過以下命令安裝依賴並啓動開發:

cd <your-project-name>
npm i
npm run dev

默認情況下,應用內容如下:

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_API_02

編輯

功能模塊與實現細節

智能諮詢模塊

功能概述

智能諮詢模塊是系統的核心功能,基於MateChat實現,通過AI提供專業的投資建議和市場分析。用户可以通過聊天界面與AI進行交互,獲取個性化的投資諮詢服務。

技術實現

  • MateChat集成:系統集成了@matechat/core庫,提供完整的聊天功能支持
  • 聊天界面實現:使用McLayout構建整體佈局,McBubble組件展示聊天消息,McLayoutSender提供佈局組件,使用McInput提供輸入框界面。
  • AI接口集成
  • 使用DeepSeek API處理流式響應,提供實時交互體驗
  • API配置從環境變量讀取,保障安全性
  • 流式響應處理:實現JSON解析、內容累積和錯誤處理,確保用户體驗流暢
  • 對話管理:支持創建新對話,重置聊天曆史
  • 提示詞工程:精心設計的提示詞確保AI回覆符合證券投顧系統的專業性和合規性要求

核心代碼實現

1. MateChat集成配置

首先在項目入口文件main.ts中集成MateChat:

import { createApp } from 'vue';
import App from './App.vue';
import MateChat from '@matechat/core';
import DevUI from 'vue-devui';
import 'vue-devui/style.css';
import '@devui-design/icons/icomoon/devui-icon.css';
createApp(App).use(MateChat).use(DevUI).mount('#app');

2. 聊天界面組件實現

在App.vue中實現聊天界面佈局和交互組件:

<template>
  <McLayout class="container">
    <McHeader :title="'證券智能投顧'" :logoImg="''">
      <template #operationArea>
        <div class="operations">
          <i class="icon-helping"></i>
        </div>
      </template>
    </McHeader>
    
    <!-- 導航菜單 -->
    <div class="navigation-tabs">
      <div 
        class="tab-item" 
        :class="{ active: currentTab === 'chat' }"
        @click="switchTab('chat')"
      >
        <i class="icon-chat-line"></i>
        <span>智能諮詢</span>
      </div>
      <!-- 其他導航標籤 -->
    </div>
    
    <!-- 內容區域 -->
    <McLayoutContent class="content-container">
      <!-- 聊天界面 -->
      <template v-if="currentTab === 'chat'">
        <div v-if="startPage" style="display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 20px;">
          <McIntroduction
            :logoImg="''"
            :title="'證券智能投顧'"
            :subTitle="'您好,歡迎使用證券智能投顧服務'"
            :description="description"
          ></McIntroduction>
          <McPrompt
            :list="introPrompt.list"
            :direction="introPrompt.direction"
            class="intro-prompt"
            @itemClick="onSubmit($event.label)"
          ></McPrompt>
        </div>
        <div v-else>
          <template v-for="(msg, idx) in messages" :key="idx">
            <McBubble
              v-if="msg.from === 'user'"
              :content="msg.content"
              :align="'right'"
              :avatarConfig="{ imgSrc: 'https://via.placeholder.com/40x40?text=User' }"
            >
            </McBubble>
            <McBubble v-else :content="msg.content" :avatarConfig="{ imgSrc: 'https://via.placeholder.com/40x40?text=Advisor' }" :loading="msg.loading"> </McBubble>
          </template>
        </div>
      </template>
    </McLayoutContent>
    
    <!-- 聊天輸入區域 -->
    <div v-if="currentTab === 'chat'" class="chat-input-area">
      <McLayoutSender>
        <McInput :value="inputValue" :maxLength="2000" @change="(e: string) => (inputValue = e)" @submit="onSubmit">
          <!-- 輸入框附加內容 -->
        </McInput>
      </McLayoutSender>
    </div>
  </McLayout>
</template>

3. 消息發送與處理邏輯

const onSubmit = (evt: Event) => {
  evt.preventDefault();
  if (!inputValue.value.trim()) return;
  
  const userMessage = inputValue.value.trim();
  inputValue.value = '';
  startPage.value = false;
  messages.value.push({
    from: 'user',
    content: userMessage,
    avatarConfig: { name: 'user' },
  });
  
  fetchData(userMessage);
};

// 創建新對話
const newConversation = () => {
  startPage.value = true;
  messages.value = [];
}

4. DeepSeek API集成與流式響應處理

const fetchData = async (ques: string) => {
  messages.value.push({
    from: 'model',
    content: '',
    avatarConfig: { name: 'model' },
    id: '',
    loading: true,
  });
  try {
    // 使用fetch API直接調用DeepSeek API,避免OpenAI SDK版本兼容性問題
    const response = await fetch(import.meta.env.VITE_DEEPSEEK_BASE_URL + '/chat/completions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${import.meta.env.VITE_DEEPSEEK_API_KEY}`
      },
      body: JSON.stringify({
        model: 'deepseek-reasoner',
        messages: [
          {
            role: 'system',
            content: '你是一名專業的證券智能投顧,負責為投資者提供股票分析、投資組合管理、市場趨勢分析、風險評估等證券投資諮詢服務。請使用專業、客觀的語言回答客户問題,提供有價值的投資參考信息。請務必在回答中包含風險提示:"投資有風險,入市需謹慎"。如果遇到不確定的問題或超出能力範圍的問題,請明確告知用户並建議其諮詢專業的證券顧問。'
          },
          { role: 'user', content: ques }
        ],
        stream: true
      })
    });

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    messages.value[messages.value.length - 1].loading = false;

    // 處理流式響應
    const reader = response.body?.getReader();
    if (!reader) {
      throw new Error('No response body');
    }

    const decoder = new TextDecoder('utf-8');
    let accumulatedContent = '';
    let chatId = '';

    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.substring(6);
          if (data === '[DONE]') {
            break;
          }
          try {
            const json = JSON.parse(data);
            if (json.id) {
              chatId = json.id;
              messages.value[messages.value.length - 1].id = chatId;
            }
            if (json.choices && json.choices.length > 0) {
              const delta = json.choices[0].delta;
              if (delta && delta.content) {
                accumulatedContent += delta.content;
                messages.value[messages.value.length - 1].content = accumulatedContent;
              }
            }
          } catch (e) {
            console.error('解析流式數據錯誤:', e);
          }
        }
      }
    }
  } catch (error) {
    console.error('DeepSeek API調用錯誤:', error);
    messages.value[messages.value.length - 1].content = '抱歉,模型調用失敗,請稍後重試。';
    messages.value[messages.value.length - 1].loading = false;
  }
};

5. 提示詞配置與預設問題

// 系統介紹描述
const description = [
  '證券智能投顧可以為您提供股票分析、投資組合管理、市場趨勢分析、風險評估等證券投資諮詢服務。',
  '作為智能投顧,我們將竭誠為您提供專業、高效的投資建議,但請注意投資有風險,入市需謹慎。',
];

// 引導提示詞
const introPrompt = {
  direction: 'horizontal',
  list: [
    {
      value: 'stockAnalysis',
      label: '股票分析方法',
      iconConfig: { name: 'icon-info-o', color: '#5e7ce0' },
      desc: '如何分析股票基本面和技術面',
    },
    {
      value: 'portfolioManagement',
      label: '投資組合管理',
      iconConfig: { name: 'icon-star', color: 'rgb(255, 215, 0)' },
      desc: '如何構建和優化投資組合',
    },
    {
      value: 'riskAssessment',
      label: '風險評估方法',
      iconConfig: { name: 'icon-priority', color: '#3ac295' },
      desc: '投資風險評估和管理策略',
    },
  ],
};

通過以上代碼實現,可以看到MateChat在智能諮詢模塊中起到了核心作用,提供了完整的聊天界面和交互體驗,同時DeepSeek API的流式響應處理實現了實時的AI對話效果。系統設計充分考慮了用户體驗、安全性和功能完整性,確保了智能投顧服務的專業性和可用性。

股票分析模塊

功能概述

股票分析模塊提供股票搜索、數據展示和趨勢分析功能,幫助用户快速瞭解股票行情和市場走勢。

技術實現

  • 股票搜索功能:實現模糊搜索和結果展示,支持代碼和名稱搜索
  • 數據可視化:使用簡化的柱狀圖展示歷史價格走勢
  • 智能分析功能:提供趨勢分析、股票對比和相關新聞功能入口
  • 模擬數據生成:實現歷史數據生成算法,確保數據的真實性和可用性

核心數據結構

interface StockData {
  name: string;
  code: string;
  currentPrice: number;
  openPrice: number;
  highPrice: number;
  lowPrice: number;
  change: number;
  changePercent: number;
  volume: number;
  historyData: { date: string; open: number; close: number; high: number; low: number; volume: number }[];
}

投資組合管理模塊

功能概述

投資組合管理模塊幫助用户記錄和管理個人投資組合,包括持倉管理、資產配置分析和收益計算功能。

技術實現

  • 投資組合概覽:展示總市值、日收益等關鍵指標
  • 持倉明細管理:支持添加、編輯、刪除和搜索持倉
  • 資產配置分析:可視化展示不同資產類別的配置比例
  • 盈虧計算:自動計算各持倉和整體組合的盈虧情況
  • 數據持久化:模擬數據存儲和導出功能

核心功能實現

// 更新投資組合彙總數據
const updatePortfolioSummary = () => {
  const totalValue = portfolio.value.holdings.reduce((sum, stock) => sum + stock.marketValue, 0);
  const previousValue = totalValue - portfolio.value.totalChange;
  
  portfolio.value.totalValue = Number(totalValue.toFixed(2));
  portfolio.value.totalChange = Number((totalValue - previousValue * 0.97).toFixed(2));
  portfolio.value.totalChangePercent = Number((portfolio.value.totalChange / previousValue * 100).toFixed(2));
};

// 保存持倉
const saveHolding = () => {
  // 驗證表單
  // 計算市場價值和盈虧
  // 更新或添加持倉
  // 更新彙總數據
};

風險評估模塊

功能概述

風險評估模塊通過問卷調查形式評估用户的風險承受能力,根據評分結果提供相應的投資建議和資產配置策略。

技術實現

  • 問卷設計:包含年齡段、投資經驗、風險承受能力、投資目標和投資期限5個維度的問題
  • 評分機制:採用1-5分的評分標準,根據總分劃分風險等級
  • 風險等級:將用户分為保守型、穩健型、平衡型、成長型和進取型5個等級
  • 個性化建議:根據風險等級提供針對性的投資策略和資產配置建議
  • 風險提示:包含合規的風險提示信息

核心評分邏輯

// 風險等級計算
const riskLevelText = computed(() => {
  if (totalScore.value <= 5) return '保守型';
  if (totalScore.value <= 10) return '穩健型';
  if (totalScore.value <= 15) return '平衡型';
  if (totalScore.value <= 20) return '成長型';
  return '進取型';
});

// 投資建議生成
const riskRecommendations = computed(() => {
  switch (riskLevelText.value) {
    case '保守型':
      return [
        '建議配置70%以上的低風險產品,如國債、貨幣基金等',
        '少量配置藍籌股和高評級債券',
        '避免投資高風險的股票和衍生品',
        '定期定額投資,分散風險'
      ];
    // 其他風險等級的建議...
  }
});

落地效果與性能表現

功能實現效果

  • 智能諮詢功能:成功集成OpenAI和DeepSeek API,實現了流暢的AI對話體驗,能夠提供專業的投資建議

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_json_03

編輯

  • 股票分析功能:實現了股票搜索、數據展示和可視化分析功能,用户可以快速瞭解股票行情

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_ico_04

編輯

  • 投資組合管理:提供了完整的持倉管理和資產配置分析功能,滿足用户日常投資管理需求

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_API_05

編輯

  • 風險評估系統:通過多維度問卷評估用户風險偏好,提供個性化的投資建議

DevUI MateChat UI 組件深度測評:構建智能投顧對話體驗的利器_ico_06

編輯

性能測試結果

  • 開發環境運行
  • 開發服務器啓動時間:約218毫秒
  • 訪問地址:http://localhost:5173/
  • 瀏覽器兼容性:在主流瀏覽器中運行正常,無明顯錯誤
  • 構建性能
  • 類型檢查:Vue-tsc類型檢查通過,無TypeScript錯誤
  • 生產構建:構建過程中存在問題,需要進一步優化

總結

DevUI MateChat 是一款面向 AI 對話場景高度優化的前端組件庫。它在保持輕量的同時,提供了專業、完整且易於集成的聊天界面解決方案,特別適合以下場景:

  • 智能客服 / 智能投顧 / 教育助手等 AI 應用
  • 需要快速原型驗證的 MVP 項目
  • 追求開發效率與一致 UX 的中後台產品

儘管在富交互和國際化方面仍有提升空間,但其當前版本已能顯著降低 AI 應用的前端開發門檻。對於正在構建下一代人機對話界面的團隊而言,MateChat 無疑是一個值得優先考慮的技術選型

完整項目已上傳GitCodehttps://gitcode.com/weixin_50843918/DevUI3

歡迎大家體驗