新增 AI 結果與資料庫整合
This commit is contained in:
186
examples/evaluation-upload-example.ts
Normal file
186
examples/evaluation-upload-example.ts
Normal 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);
|
||||
}
|
Reference in New Issue
Block a user