新增 AI 結果與資料庫整合

This commit is contained in:
2025-09-23 20:36:53 +08:00
parent ec7d101e96
commit 46db696122
30 changed files with 2352 additions and 54 deletions

View File

@@ -0,0 +1,186 @@
import { EvaluationUploadService, defaultAIEvaluationResult } from '../lib/services/evaluation-upload';
/**
* 使用範例:上傳 AI 評分結果到資料庫
*/
// 範例 1: 使用預設的 AI 評分結果
async function uploadDefaultEvaluation() {
try {
console.log('🚀 開始上傳預設的 AI 評分結果...');
const projectId = 1; // 假設專案 ID 為 1
const analysisDuration = 120; // 分析耗時 2 分鐘
const aiModelVersion = 'gemini-1.5-pro';
const evaluationId = await EvaluationUploadService.uploadEvaluationResult(
projectId,
defaultAIEvaluationResult,
analysisDuration,
aiModelVersion
);
console.log(`✅ 上傳成功Evaluation ID: ${evaluationId}`);
console.log(`📊 評分結果: ${defaultAIEvaluationResult.overallScore}/${defaultAIEvaluationResult.totalPossible} (${defaultAIEvaluationResult.grade})`);
} catch (error) {
console.error('❌ 上傳失敗:', error);
}
}
// 範例 2: 使用自定義的 AI 評分結果
async function uploadCustomEvaluation() {
try {
console.log('🚀 開始上傳自定義的 AI 評分結果...');
const customAIResult = {
projectTitle: "自定義專案",
overallScore: 85.0,
totalPossible: 100,
grade: "A",
performanceStatus: "表現優秀",
recommendedStars: 5,
analysisDate: "2024-10-27",
criteria: [
{
name: "應用實務性",
score: 9,
maxScore: 10,
weight: 30,
weightedScore: 27,
feedback: "專案具有很高的實務價值",
strengths: ["解決了實際問題", "具備良好的可行性"],
improvements: ["可以增加更多案例"]
},
{
name: "創新性",
score: 8,
maxScore: 10,
weight: 15,
weightedScore: 12,
feedback: "展現了良好的創新思維",
strengths: ["技術創新", "應用創新"],
improvements: ["可以探索更多創新點"]
}
],
overview: {
excellentItems: 2,
improvementItems: 0,
overallPerformance: 85
},
detailedAnalysis: {
summary: "整體表現優秀,各項指標都達到高水準",
keyFindings: ["創新性強", "實務價值高"]
},
improvementSuggestions: {
overallSuggestions: "繼續保持現有優勢,可以考慮擴大應用範圍",
maintainStrengths: [
{
title: "創新思維",
description: "保持創新的思維方式"
}
],
keyImprovements: [
{
title: "擴大應用",
description: "考慮將專案應用到更多領域",
suggestions: ["研究其他應用場景", "建立合作夥伴關係"]
}
],
actionPlan: [
{
phase: "短期目標",
description: "完善現有功能"
}
]
}
};
const projectId = 2;
const evaluationId = await EvaluationUploadService.uploadEvaluationResult(
projectId,
customAIResult
);
console.log(`✅ 自定義評分結果上傳成功Evaluation ID: ${evaluationId}`);
} catch (error) {
console.error('❌ 上傳失敗:', error);
}
}
// 範例 3: 更新 criteria_item_id 對應關係
async function updateCriteriaMapping() {
try {
console.log('🔄 更新 criteria_item_id 對應關係...');
// 假設您有新的 criteria_items 表ID 有所不同
const newMapping = {
"應用實務性": 101,
"創新性": 102,
"成效與效益": 103,
"擴散與可複用性": 104,
"簡報與表達": 105
};
EvaluationUploadService.updateCriteriaMapping(newMapping);
// 驗證更新
const currentMapping = EvaluationUploadService.getCriteriaMapping();
console.log('✅ 對應關係已更新:', currentMapping);
} catch (error) {
console.error('❌ 更新失敗:', error);
}
}
// 範例 4: 在 API 路由中使用
export async function handleEvaluationUpload(projectId: number, aiResult: any) {
try {
// 驗證必要欄位
if (!aiResult.projectTitle || !aiResult.overallScore || !aiResult.criteria) {
throw new Error('AI 評分結果缺少必要欄位');
}
// 上傳到資料庫
const evaluationId = await EvaluationUploadService.uploadEvaluationResult(
projectId,
aiResult
);
return {
success: true,
evaluationId,
message: '評分結果上傳成功'
};
} catch (error) {
console.error('處理評分結果上傳時發生錯誤:', error);
return {
success: false,
error: error instanceof Error ? error.message : '未知錯誤'
};
}
}
// 執行範例(如果直接運行此文件)
if (require.main === module) {
async function runExamples() {
console.log('📚 開始執行上傳範例...\n');
// 範例 1: 上傳預設評分結果
await uploadDefaultEvaluation();
console.log('\n' + '='.repeat(50) + '\n');
// 範例 2: 上傳自定義評分結果
await uploadCustomEvaluation();
console.log('\n' + '='.repeat(50) + '\n');
// 範例 3: 更新對應關係
await updateCriteriaMapping();
console.log('\n🎉 所有範例執行完成!');
}
runExamples().catch(console.error);
}