147 lines
3.3 KiB
JavaScript
147 lines
3.3 KiB
JavaScript
/**
|
||
* persona-studio · 进化日志记录器
|
||
*
|
||
* 功能:记录系统每一次自进化事件
|
||
* 事件类型:profile_update / knowledge_extract / pattern_update /
|
||
* model_benchmark / quality_score / system_init
|
||
*/
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const BRAIN_DIR = path.join(__dirname, '..', '..', 'brain');
|
||
const EVOLUTION_LOG_PATH = path.join(BRAIN_DIR, 'evolution-log.json');
|
||
|
||
/**
|
||
* 加载进化日志
|
||
*/
|
||
function loadEvolutionLog() {
|
||
try {
|
||
return JSON.parse(fs.readFileSync(EVOLUTION_LOG_PATH, 'utf-8'));
|
||
} catch {
|
||
return {
|
||
schema_version: '1.0',
|
||
description: '系统进化日志',
|
||
last_updated: null,
|
||
total_events: 0,
|
||
events: []
|
||
};
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 保存进化日志
|
||
*/
|
||
function saveEvolutionLog(log) {
|
||
log.last_updated = new Date().toISOString();
|
||
log.total_events = log.events.length;
|
||
fs.writeFileSync(EVOLUTION_LOG_PATH, JSON.stringify(log, null, 2), 'utf-8');
|
||
}
|
||
|
||
/**
|
||
* 记录进化事件
|
||
* @param {string} type - 事件类型
|
||
* @param {string} description - 事件描述
|
||
* @param {object} metadata - 事件元数据
|
||
*/
|
||
function logEvent(type, description, metadata) {
|
||
const log = loadEvolutionLog();
|
||
|
||
const event = {
|
||
id: 'EVT-' + Date.now(),
|
||
type: type,
|
||
description: description,
|
||
metadata: metadata || {},
|
||
timestamp: new Date().toISOString()
|
||
};
|
||
|
||
log.events.push(event);
|
||
|
||
// 保留最近 1000 条
|
||
if (log.events.length > 1000) {
|
||
log.events = log.events.slice(-1000);
|
||
}
|
||
|
||
saveEvolutionLog(log);
|
||
return event;
|
||
}
|
||
|
||
/**
|
||
* 记录画像更新事件
|
||
*/
|
||
function logProfileUpdate(devId, fieldsUpdated) {
|
||
return logEvent('profile_update', '用户画像更新: ' + devId, {
|
||
dev_id: devId,
|
||
fields_updated: fieldsUpdated || []
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 记录知识提取事件
|
||
*/
|
||
function logKnowledgeExtract(devId, entriesCount, projectName) {
|
||
return logEvent('knowledge_extract', '知识提取: ' + entriesCount + ' 条新知识', {
|
||
dev_id: devId,
|
||
entries_count: entriesCount,
|
||
project: projectName || null
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 记录模式更新事件
|
||
*/
|
||
function logPatternUpdate(patternNames, devId) {
|
||
return logEvent('pattern_update', '模式识别: ' + (patternNames || []).join(', '), {
|
||
dev_id: devId,
|
||
patterns: patternNames || []
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 记录质量评分事件
|
||
*/
|
||
function logQualityScore(devId, projectName, score) {
|
||
return logEvent('quality_score', '质量评分: ' + projectName + ' = ' + score, {
|
||
dev_id: devId,
|
||
project: projectName,
|
||
score: score
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 记录模型评测事件
|
||
*/
|
||
function logModelBenchmark(modelsCount, routingChanges) {
|
||
return logEvent('model_benchmark', '模型评测完成: ' + modelsCount + ' 个模型', {
|
||
models_count: modelsCount,
|
||
routing_changes: routingChanges || []
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 获取最近事件
|
||
* @param {number} limit - 数量限制
|
||
* @param {string} type - 可选,按类型过滤
|
||
* @returns {Array} 事件列表
|
||
*/
|
||
function getRecentEvents(limit, type) {
|
||
const log = loadEvolutionLog();
|
||
let events = log.events;
|
||
|
||
if (type) {
|
||
events = events.filter(function (e) { return e.type === type; });
|
||
}
|
||
|
||
return events.slice(-(limit || 20)).reverse();
|
||
}
|
||
|
||
module.exports = {
|
||
logEvent,
|
||
logProfileUpdate,
|
||
logKnowledgeExtract,
|
||
logPatternUpdate,
|
||
logQualityScore,
|
||
logModelBenchmark,
|
||
getRecentEvents,
|
||
loadEvolutionLog
|
||
};
|