前言
最近這幾年,個人投資者對智能化、個性化的投資顧問服務需求日益增長。傳統的投資顧問服務存在門檻高、成本大、效率低等問題,無法滿足普通投資者的需求。同時,人工智能技術的進步為金融服務提供了新的可能性,可以通過智能算法和大數據分析為用户提供便捷、專業的投資建議。
本文將聚焦 DevUI 的 MateChat 前端智能化場景UI庫,結合其在證券智能投顧系統中的實際應用,從功能完整性、開發體驗、性能表現及擴展性等維度,對其進行全面測評。
為什麼選擇 MateChat?
在構建具備 AI 對話能力的智能投顧系統時,開發者面臨兩大核心挑戰:
- 快速搭建專業、美觀的聊天界面
- 無縫集成流式 AI 接口(如 DeepSeek、OpenAI)
傳統方案往往需要自行實現消息氣泡、輸入框、滾動定位、加載狀態等基礎功能,開發成本高且易出錯。而 MateChat 作為 DevUI 生態中專為 AI 聊天場景設計的組件庫,恰好解決了上述痛點。
核心優勢概覽:
- 開箱即用的聊天佈局(McLayout、McHeader、McLayoutSender)
- 支持用户/模型雙角色消息展示(McBubble)
- 內置引導提示(McPrompt)與歡迎頁(McIntroduction)
- 與 Vue 3 + TypeScript 高度兼容
- 輕量、無冗餘依賴,易於定製
編輯
技術方案與架構設計
技術棧選擇
|
技術/框架 |
版本 |
用途 |
來源 |
|
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構建。整體架構清晰,分為以下幾個層次:
- 展示層:使用Vue 3的單文件組件(SFC)實現用户界面
- 組件層:包含智能諮詢、股票分析、投資組合管理、風險評估等核心功能組件
- 數據層:使用Vue的響應式系統管理應用狀態
- 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
默認情況下,應用內容如下:
編輯
功能模塊與實現細節
智能諮詢模塊
功能概述
智能諮詢模塊是系統的核心功能,基於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對話體驗,能夠提供專業的投資建議
編輯
- 股票分析功能:實現了股票搜索、數據展示和可視化分析功能,用户可以快速瞭解股票行情
編輯
- 投資組合管理:提供了完整的持倉管理和資產配置分析功能,滿足用户日常投資管理需求
編輯
- 風險評估系統:通過多維度問卷評估用户風險偏好,提供個性化的投資建議
編輯
性能測試結果
- 開發環境運行:
- 開發服務器啓動時間:約218毫秒
- 訪問地址:http://localhost:5173/
- 瀏覽器兼容性:在主流瀏覽器中運行正常,無明顯錯誤
- 構建性能:
- 類型檢查:Vue-tsc類型檢查通過,無TypeScript錯誤
- 生產構建:構建過程中存在問題,需要進一步優化
總結
DevUI MateChat 是一款面向 AI 對話場景高度優化的前端組件庫。它在保持輕量的同時,提供了專業、完整且易於集成的聊天界面解決方案,特別適合以下場景:
- 智能客服 / 智能投顧 / 教育助手等 AI 應用
- 需要快速原型驗證的 MVP 項目
- 追求開發效率與一致 UX 的中後台產品
儘管在富交互和國際化方面仍有提升空間,但其當前版本已能顯著降低 AI 應用的前端開發門檻。對於正在構建下一代人機對話界面的團隊而言,MateChat 無疑是一個值得優先考慮的技術選型。
完整項目已上傳GitCodehttps://gitcode.com/weixin_50843918/DevUI3
歡迎大家體驗