打造未來:AI 虛擬人平台全棧解決方案深度解析
在快速發展的 AI 領域,高效整合與快速部署已成為專案成功的關鍵。AI Virtual Human Platform
正是為了解決這些痛點而生,它提供了一套開箱即用的全棧專案骨架,讓開發者能夠專注於核心業務邏輯,而非繁瑣的基礎設施設定。本文將帶您深入了解這個平台的設計哲學、技術架構及其帶來的巨大價值。
您可以透過以下 GitHub 連結檢閱本專案的原始碼:https://github.com/BpsEason/ai-virtual-human-platform.git
專案核心理念:模組化與自動化
此專案的核心理念是「模組化」與「自動化」。透過將系統拆分為多個獨立的微服務,我們確保了每個組件都能獨立開發、部署與擴展。同時,藉由自動化腳本和 CI/CD 流程,我們將開發、測試到生產環境部署的整個過程自動化,極大提升了開發效率與專案品質。這不僅適用於快速原型開發,也完全滿足企業級專案對可維護性和擴充性的需求。
技術架構深度剖析
AI Virtual Human Platform
的技術棧涵蓋前後端、微服務與 DevOps 等多個層面,形成一個緊密協作的生態系統。
後端與前端:
後端採用高性能的 PHP 8.2 與 Laravel 11,並透過 Laravel Octane (Swoole) 實現極致效能。
前端則選用現代化的 Vue 3、Vite 與 Pinia,提供流暢的使用者體驗。
兩者之間透過 JWT 認證確保 API 通訊安全。
微服務驅動:這是專案的靈魂所在。系統將核心 AI 功能拆分為兩個獨立的微服務:
向量化服務 (Vectorization Service):由 Python FastAPI 驅動,利用 SentenceTransformer 模型將輸入文件內容轉換成向量。這些向量隨後被儲存至 Pinecone 向量資料庫,為後續的檢索增強生成(RAG)功能奠定基礎。
對話服務 (Chat Service):由 Node.js 搭配 gRPC 和 LangChain JS 實現。它負責處理用戶的對話請求,並能利用向量資料庫中的知識進行智慧回覆。
DevOps 與自動化流程:所有服務都已容器化,並提供了
docker-compose.yml
檔案用於本地開發。對於生產環境,我們提供完整的 Kubernetes Helm Chart,實現一鍵部署、版本管理與水平自動擴展。
以下是專案的程式架構圖,展示了各個服務之間的互動關係:
核心程式碼範例與註解
這裡展示了專案中幾個關鍵功能的程式碼片段,並附上詳盡的中文註解,幫助您更好地理解專案的實現邏輯。
1. 後端:用戶認證控制器 (app/Http/Controllers/AuthController.php
)
此控制器負責處理用戶註冊與登入邏輯,並透過 tymon/jwt-auth
擴充套件產生 JWT Token,以確保 API 通訊的安全。
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
class AuthController extends Controller
{
/**
* 處理用戶註冊請求
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function register(Request $request)
{
// 建立新用戶
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
// 使用新建立的用戶資訊生成 JWT Token
$token = JWTAuth::fromUser($user);
// 返回用戶資訊與 Token
return response()->json(compact('user', 'token'));
}
/**
* 處理用戶登入請求
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
// 嘗試使用提供的憑證進行登入,若失敗則返回 401 錯誤
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}
// 登入成功,返回帶有 Token 的響應
return $this->respondWithToken($token);
}
/**
* 返回格式化的 JWT Token 響應
*
* @param string $token
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => JWTAuth::factory()->getTtl() * 60
]);
}
}
2. 微服務:向量化服務 (microservices/vectorization-service/app/main.py
)
此微服務是 AI 功能的核心,負責將文件內容轉換為向量。它使用 FastAPI 建立 API 端點,並呼叫 Pinecone 服務進行資料儲存。
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import os
from pinecone import Pinecone
from sentence_transformers import SentenceTransformer
# 初始化 FastAPI 應用程式
app = FastAPI()
# 定義 API 請求的數據結構
class Document(BaseModel):
document_id: int
content: str
# 創建一個 API 端點來處理文件向量化
@app.post("/vectorize")
async def vectorize_document(doc: Document):
try:
# 使用 SentenceTransformer 模型將文件內容轉為向量表示
model = SentenceTransformer('all-MiniLM-L6-v2')
vector = model.encode(doc.content).tolist()
# 使用環境變數初始化 Pinecone 客戶端
api_key = os.environ.get('PINECONE_API_KEY')
environment = os.environ.get('PINECONE_ENVIRONMENT')
if not api_key or not environment:
raise HTTPException(status_code=500, detail="Missing Pinecone API key or environment variable.")
# 取得 Pinecone 索引
index = Pinecone(api_key=api_key, environment=environment).Index('my-index')
# 將向量資料上傳至 Pinecone,包含文件 ID 和元數據
index.upsert(vectors=[
{'id': str(doc.document_id), 'values': vector, 'metadata': {'content': doc.content}}
])
return {"message": "已成功上傳至 Pinecone"}
except Exception as e:
# 處理異常並返回 500 錯誤
raise HTTPException(status_code=500, detail=str(e))
3. 前端:認證狀態管理 (resources/js/stores/auth.js
)
這是一個 Pinia Store,用於管理前端的用戶認證狀態。它將 JWT Token 儲存在瀏覽器的 localStorage
中,實現狀態持久化。
import { defineStore } from 'pinia';
// 定義 Pinia 狀態管理 store,用於管理用戶認證狀態
export const useAuthStore = defineStore('auth', {
// 狀態:從 localStorage 獲取或初始化 JWT Token
state: () => ({
token: localStorage.getItem('token') || null,
}),
// 計算屬性:檢查用戶是否已認證
getters: {
isAuthenticated: (state) => !!state.token,
},
// 操作:設定或清除認證 Token
actions: {
setToken(token) {
this.token = token;
localStorage.setItem('token', token); // 儲存 Token 至 localStorage
},
clearToken() {
this.token = null;
localStorage.removeItem('token'); // 清除 Token
},
},
});
總結來說,AI Virtual Human Platform
透過這些核心組件的協作,為 AI 虛擬人應用提供了堅實且可擴展的技術基礎。從前後端、微服務到自動化部署,每個環節都經過精心設計,旨在讓您能夠快速進入開發階段,專注於核心業務邏輯的實現。
沒有留言:
張貼留言