一個完全模擬 ChatGPT 風格的 AI 流式回應效果的專案,使用 Server-Sent Events (SSE) 技術實現即時串流通訊。
- 🎯 真實的 ChatGPT 體驗 - 完全模擬 AI 打字效果的流式回應
- ⚡ 智能延遲控制 - 根據標點符號調整回應速度,更加自然
- 🔄 即時進度顯示 - 顯示回應生成進度和停止控制
- 📱 響應式設計 - 完美支援桌面和移動設備
- 🎨 現代化 UI - ChatGPT 風格的美觀介面
- 🛑 中斷控制 - 可隨時停止 AI 回應生成
- 💡 智能建議 - 預設問題快速開始對話
- Node.js + Express - 後端服務器
- Server-Sent Events (SSE) - 即時串流技術
- 智能片段化 - 將完整回應拆分成自然的字符流
- 動態延遲 - 模擬真實的 AI 思考和回應時間
- React 18 + TypeScript - 現代化前端框架
- EventSource API - SSE 客戶端連接
- Webpack 5 - 模組打包和開發服務器
- CSS3 動畫 - 流暢的視覺效果
npm install
npm run start
這將同時啟動:
- 🔗 後端服務器:
http://localhost:5000
- 🌐 前端應用:
http://localhost:3000
# 只啟動後端
npm run server
# 只啟動前端
npm run client
# 建構生產版本
npm run build
GET /ai-stream?prompt=你的問題
SSE 事件格式:
// 開始事件
event: start
data: {"message": "開始生成回應...", "totalLength": 120}
// 串流數據
data: {"content": "你好!很高興見到你", "progress": 25, "isLast": false}
// 結束事件
event: end
data: {"message": "回應完成", "fullText": "完整回應內容"}
// 錯誤事件
event: error
data: {"error": "錯誤描述", "details": "詳細錯誤資訊"}
GET /api/suggestions
{
"suggestions": [
"你好",
"今天天氣如何",
"什麼是人工智能",
"介紹一下自己",
"如何學習程式設計",
"什麼是 React"
]
}
GET /api/health
{
"status": "healthy",
"timestamp": "2024/12/30 下午8:45:30",
"version": "1.0.0"
}
function createFragments(text) {
const fragments = [];
for (let i = 1; i <= text.length; i++) {
fragments.push(text.substring(0, i));
}
return fragments;
}
let delay = 50; // 基礎延遲
// 根據標點符號調整延遲
if (fragment.endsWith('。') || fragment.endsWith('!')) {
delay = 200; // 句號和驚嘆號後較長停頓
} else if (fragment.endsWith(',')) {
delay = 100; // 逗號後中等停頓
}
// 隨機化延遲,模擬真實打字
delay += Math.random() * 50;
const eventSource = new EventSource(`/ai-stream?prompt=${prompt}`);
// 處理串流數據
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
updateMessage(data.content, data.progress);
};
// 處理結束事件
eventSource.addEventListener('end', (event) => {
const data = JSON.parse(event.data);
finalizeMessage(data.fullText);
eventSource.close();
});
- 展示預設問題建議
- 點擊即可快速開始對話
- 用戶輸入問題後,AI 開始"思考"
- 逐字顯示回應,模擬真實打字效果
- 顯示生成進度和停止按鈕
- 中斷生成:隨時停止 AI 回應
- 清空對話:重新開始對話
- 自動滾動:始終顯示最新訊息
專案內建了多種情境的 AI 回應:
- 🖐️ 問候語:「你好」
- 🌤️ 天氣查詢:「今天天氣如何」
- 🧠 技術解釋:「什麼是人工智能」、「什麼是 React」
- 👤 自我介紹:「介紹一下自己」
- 📚 學習建議:「如何學習程式設計」
- 🔧 預設回應:處理未匹配的問題
- 桌面版:雙欄佈局,最佳體驗
- 平板版:自適應調整,保持易用性
- 手機版:單欄佈局,專門優化
- 漸層背景:專業的視覺效果
- 打字動畫:閃爍的游標效果
- 進度指示:即時顯示生成進度
- 平滑動畫:所有互動都有流暢過渡
- 暗色主題:自動適應系統偏好
ai-stream-simulator/
├── public/ # 靜態檔案
├── server/ # 後端服務器
│ └── index.js # Express 服務器 + SSE 實現
├── src/ # 前端源碼
│ ├── App.tsx # 主應用組件
│ ├── index.tsx # 應用入口點
│ └── styles.css # 樣式檔案
├── package.json # 專案配置
├── webpack.config.js # Webpack 配置
└── tsconfig.json # TypeScript 配置
- 修改 AI 回應:編輯
server/index.js
中的aiResponses
物件 - 調整延遲時間:修改
createFragments
函數中的延遲邏輯 - 更改樣式:編輯
src/styles.css
檔案 - 端口配置:修改
package.json
中的啟動腳本
npm run build
- Vercel/Netlify:前端靜態部署
- Heroku:全棧部署
- Docker:容器化部署
- VPS:自定義服務器部署
-
SSE 連接失敗
- 檢查後端服務器是否運行
- 確認端口號正確(預設 5000)
- 檢查 CORS 設定
-
串流中斷
- 檢查網絡連接穩定性
- 查看瀏覽器控制台錯誤
- 確認 EventSource 支援
-
打字效果異常
- 檢查延遲設定
- 確認片段化邏輯
- 查看 CSS 動畫是否正常
這個專案是學習以下技術的絕佳實例:
- Server-Sent Events (SSE) 實戰應用
- React Hooks 進階使用
- TypeScript 類型安全開發
- 即時通訊 技術實現
- 用戶體驗 設計思考
歡迎提交 Issue 和 Pull Request!
此專案採用 ISC 授權條款。
享受與 AI 的對話體驗! 🤖✨