288 lines
12 KiB
JavaScript
288 lines
12 KiB
JavaScript
"use strict";
|
||
/**
|
||
* HR管理员 - 任务拆解引擎
|
||
* 将高级任务递归分解为原子任务
|
||
*/
|
||
var _a;
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.HRManager = exports.ATOMIC_TASK_TYPES = exports.AtomicTaskType = void 0;
|
||
var AtomicTaskType;
|
||
(function (AtomicTaskType) {
|
||
AtomicTaskType["FILL_TEMPLATE"] = "fill_template";
|
||
AtomicTaskType["SUMMARIZE"] = "summarize";
|
||
AtomicTaskType["FORMAT_CONVERT"] = "format_convert";
|
||
AtomicTaskType["EVALUATE"] = "evaluate";
|
||
AtomicTaskType["RISK_IDENTIFY"] = "risk_identify";
|
||
AtomicTaskType["PRIORITIZE"] = "prioritize";
|
||
AtomicTaskType["GENERATE_NOTIFICATION"] = "generate_notification";
|
||
AtomicTaskType["AGGREGATE_REPORT"] = "aggregate_report";
|
||
AtomicTaskType["STATUS_UPDATE"] = "status_update";
|
||
AtomicTaskType["EXTRACT"] = "extract";
|
||
})(AtomicTaskType || (exports.AtomicTaskType = AtomicTaskType = {}));
|
||
/**
|
||
* 原子任务类型库
|
||
*/
|
||
exports.ATOMIC_TASK_TYPES = (_a = {},
|
||
_a[AtomicTaskType.FILL_TEMPLATE] = {
|
||
type: AtomicTaskType.FILL_TEMPLATE,
|
||
category: 'document',
|
||
description: '给定模板+数据 → 输出填充后文档',
|
||
estimatedTokens: 3000,
|
||
inputSchema: { template: 'string', data: 'object' },
|
||
outputSchema: { document: 'string' },
|
||
},
|
||
_a[AtomicTaskType.SUMMARIZE] = {
|
||
type: AtomicTaskType.SUMMARIZE,
|
||
category: 'document',
|
||
description: '给定长文 → 输出摘要',
|
||
estimatedTokens: 2000,
|
||
inputSchema: { content: 'string', maxLength: 'number' },
|
||
outputSchema: { summary: 'string' },
|
||
},
|
||
_a[AtomicTaskType.FORMAT_CONVERT] = {
|
||
type: AtomicTaskType.FORMAT_CONVERT,
|
||
category: 'document',
|
||
description: '给定内容 → 按目标格式输出',
|
||
estimatedTokens: 2000,
|
||
inputSchema: { content: 'string', targetFormat: 'string' },
|
||
outputSchema: { formatted: 'string' },
|
||
},
|
||
_a[AtomicTaskType.EVALUATE] = {
|
||
type: AtomicTaskType.EVALUATE,
|
||
category: 'analysis',
|
||
description: '给定标准+对象 → 输出评分+理由',
|
||
estimatedTokens: 1500,
|
||
inputSchema: { criteria: 'array', target: 'object' },
|
||
outputSchema: { score: 'number', reasoning: 'string' },
|
||
},
|
||
_a[AtomicTaskType.RISK_IDENTIFY] = {
|
||
type: AtomicTaskType.RISK_IDENTIFY,
|
||
category: 'analysis',
|
||
description: '给定范围 → 输出风险列表',
|
||
estimatedTokens: 1500,
|
||
inputSchema: { scope: 'string', context: 'object' },
|
||
outputSchema: { risks: 'array' },
|
||
},
|
||
_a[AtomicTaskType.PRIORITIZE] = {
|
||
type: AtomicTaskType.PRIORITIZE,
|
||
category: 'analysis',
|
||
description: '给定列表+标准 → 输出排序结果',
|
||
estimatedTokens: 1200,
|
||
inputSchema: { items: 'array', criteria: 'array' },
|
||
outputSchema: { sorted: 'array' },
|
||
},
|
||
_a[AtomicTaskType.GENERATE_NOTIFICATION] = {
|
||
type: AtomicTaskType.GENERATE_NOTIFICATION,
|
||
category: 'coordination',
|
||
description: '给定事件 → 输出消息内容',
|
||
estimatedTokens: 1000,
|
||
inputSchema: { event: 'string', recipients: 'array' },
|
||
outputSchema: { message: 'string' },
|
||
},
|
||
_a[AtomicTaskType.AGGREGATE_REPORT] = {
|
||
type: AtomicTaskType.AGGREGATE_REPORT,
|
||
category: 'coordination',
|
||
description: '给定多条数据 → 输出汇总',
|
||
estimatedTokens: 1500,
|
||
inputSchema: { data: 'array', reportType: 'string' },
|
||
outputSchema: { report: 'string' },
|
||
},
|
||
_a[AtomicTaskType.STATUS_UPDATE] = {
|
||
type: AtomicTaskType.STATUS_UPDATE,
|
||
category: 'data',
|
||
description: '给定条件 → 查询并更新',
|
||
estimatedTokens: 1000,
|
||
inputSchema: { query: 'object', updates: 'object' },
|
||
outputSchema: { updated: 'boolean', record: 'object' },
|
||
},
|
||
_a[AtomicTaskType.EXTRACT] = {
|
||
type: AtomicTaskType.EXTRACT,
|
||
category: 'data',
|
||
description: '给定源 → 提取指定字段',
|
||
estimatedTokens: 1000,
|
||
inputSchema: { source: 'string', fields: 'array' },
|
||
outputSchema: { extracted: 'object' },
|
||
},
|
||
_a);
|
||
/**
|
||
* 原子任务判定标准
|
||
*/
|
||
function isAtomic(task) {
|
||
var _a;
|
||
return (Object.keys(task.input).length > 0 && // 输入确定
|
||
task.outputFormat !== undefined && // 输出确定
|
||
!((_a = task.dependencies) === null || _a === void 0 ? void 0 : _a.length) && // 无外部依赖
|
||
task.estimatedTokens <= 6000 // 时间可控
|
||
);
|
||
}
|
||
/**
|
||
* HR管理员核心:递归任务分解
|
||
*/
|
||
var HRManager = /** @class */ (function () {
|
||
function HRManager() {
|
||
this.taskIdCounter = 0;
|
||
}
|
||
/**
|
||
* 将高级任务分解为原子任务列表
|
||
*/
|
||
HRManager.prototype.decompose = function (highLevelTask, context) {
|
||
var _a;
|
||
var tasks = this._matchPatterns(highLevelTask, context);
|
||
// Recursive check: decompose non-atomic tasks further
|
||
var result = [];
|
||
for (var _i = 0, tasks_1 = tasks; _i < tasks_1.length; _i++) {
|
||
var task = tasks_1[_i];
|
||
if (isAtomic(task) || !((_a = task.children) === null || _a === void 0 ? void 0 : _a.length)) {
|
||
result.push(task);
|
||
}
|
||
else {
|
||
// Decompose children further
|
||
for (var _b = 0, _c = task.children || []; _b < _c.length; _b++) {
|
||
var child = _c[_b];
|
||
if (isAtomic(child)) {
|
||
result.push(child);
|
||
}
|
||
else {
|
||
result.push.apply(result, this.decompose(child.title, child.input));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return result;
|
||
};
|
||
/**
|
||
* 为原子任务选择最佳模型
|
||
*/
|
||
HRManager.prototype.selectModel = function (taskType) {
|
||
var _a;
|
||
var modelMap = (_a = {},
|
||
_a[AtomicTaskType.FILL_TEMPLATE] = 'claude-3-haiku',
|
||
_a[AtomicTaskType.SUMMARIZE] = 'gpt-4o-mini',
|
||
_a[AtomicTaskType.FORMAT_CONVERT] = 'gpt-4o-mini',
|
||
_a[AtomicTaskType.EVALUATE] = 'gpt-4-turbo',
|
||
_a[AtomicTaskType.RISK_IDENTIFY] = 'claude-3-sonnet',
|
||
_a[AtomicTaskType.PRIORITIZE] = 'gpt-4o-mini',
|
||
_a[AtomicTaskType.GENERATE_NOTIFICATION] = 'gpt-4o-mini',
|
||
_a[AtomicTaskType.AGGREGATE_REPORT] = 'claude-3-sonnet',
|
||
_a[AtomicTaskType.STATUS_UPDATE] = 'gpt-4o-mini',
|
||
_a[AtomicTaskType.EXTRACT] = 'gpt-4o-mini',
|
||
_a);
|
||
return modelMap[taskType] || 'gpt-4o-mini';
|
||
};
|
||
HRManager.prototype._generateId = function () {
|
||
return "task-".concat(++this.taskIdCounter, "-").concat(Date.now());
|
||
};
|
||
/**
|
||
* Pattern matching for known PM phases
|
||
*/
|
||
HRManager.prototype._matchPatterns = function (task, context) {
|
||
var lower = task.toLowerCase();
|
||
// Project Charter
|
||
if (lower.includes('章程') || lower.includes('charter')) {
|
||
return [
|
||
{
|
||
id: this._generateId(),
|
||
title: '生成项目章程',
|
||
description: '根据项目信息填充章程模板',
|
||
atomicType: AtomicTaskType.FILL_TEMPLATE,
|
||
input: { template: 'project_charter', data: context || {} },
|
||
outputFormat: { document: 'string' },
|
||
estimatedTokens: 3000,
|
||
priority: 'must',
|
||
},
|
||
{
|
||
id: this._generateId(),
|
||
title: '分析干系人',
|
||
description: '根据项目背景识别关键干系人',
|
||
atomicType: AtomicTaskType.RISK_IDENTIFY,
|
||
input: { scope: 'stakeholders', context: context || {} },
|
||
outputFormat: { stakeholders: 'array' },
|
||
estimatedTokens: 1500,
|
||
priority: 'must',
|
||
dependencies: [],
|
||
},
|
||
];
|
||
}
|
||
// Risk Management
|
||
if (lower.includes('风险') || lower.includes('risk')) {
|
||
return [
|
||
{
|
||
id: this._generateId(),
|
||
title: '识别项目风险',
|
||
description: '从技术/资源/范围/外部四个维度识别风险',
|
||
atomicType: AtomicTaskType.RISK_IDENTIFY,
|
||
input: { scope: 'project_risks', context: context || {} },
|
||
outputFormat: { risks: 'array' },
|
||
estimatedTokens: 2000,
|
||
priority: 'must',
|
||
},
|
||
{
|
||
id: this._generateId(),
|
||
title: '生成风险应对策略',
|
||
description: '为高优先级风险制定规避/转移/减轻/接受策略',
|
||
atomicType: AtomicTaskType.EVALUATE,
|
||
input: { criteria: ['probability', 'impact', 'strategy'], target: {} },
|
||
outputFormat: { mitigations: 'array' },
|
||
estimatedTokens: 1500,
|
||
priority: 'must',
|
||
},
|
||
];
|
||
}
|
||
// Schedule / Progress
|
||
if (lower.includes('进度') || lower.includes('schedule') || lower.includes('排期')) {
|
||
return [
|
||
{
|
||
id: this._generateId(),
|
||
title: '分析任务依赖关系',
|
||
description: '确定任务间的先后顺序和关键路径',
|
||
atomicType: AtomicTaskType.PRIORITIZE,
|
||
input: { items: (context === null || context === void 0 ? void 0 : context.tasks) || [], criteria: ['dependency', 'priority'] },
|
||
outputFormat: { sorted: 'array', criticalPath: 'array' },
|
||
estimatedTokens: 2000,
|
||
priority: 'must',
|
||
},
|
||
{
|
||
id: this._generateId(),
|
||
title: '生成进度计划',
|
||
description: '基于依赖关系和估算生成甘特图数据',
|
||
atomicType: AtomicTaskType.FILL_TEMPLATE,
|
||
input: { template: 'schedule', data: context || {} },
|
||
outputFormat: { schedule: 'object' },
|
||
estimatedTokens: 3000,
|
||
priority: 'must',
|
||
},
|
||
];
|
||
}
|
||
// Weekly Report
|
||
if (lower.includes('周报') || lower.includes('报告') || lower.includes('report')) {
|
||
return [
|
||
{
|
||
id: this._generateId(),
|
||
title: '汇总项目进度数据',
|
||
description: '收集任务完成情况、Bug数据、风险状态',
|
||
atomicType: AtomicTaskType.AGGREGATE_REPORT,
|
||
input: { data: (context === null || context === void 0 ? void 0 : context.tasks) || [], reportType: 'weekly' },
|
||
outputFormat: { report: 'string' },
|
||
estimatedTokens: 1500,
|
||
priority: 'should',
|
||
},
|
||
];
|
||
}
|
||
// Default: treat as document generation
|
||
return [
|
||
{
|
||
id: this._generateId(),
|
||
title: task,
|
||
description: "\u5904\u7406\u4EFB\u52A1\uFF1A".concat(task),
|
||
atomicType: AtomicTaskType.FILL_TEMPLATE,
|
||
input: { request: task, context: context || {} },
|
||
outputFormat: { result: 'string' },
|
||
estimatedTokens: 2000,
|
||
priority: 'should',
|
||
},
|
||
];
|
||
};
|
||
return HRManager;
|
||
}());
|
||
exports.HRManager = HRManager;
|