zhizhi/exe-engine/src/controller/agent-controller.js

103 lines
2.8 KiB
JavaScript
Raw Normal View History

// exe-engine/src/controller/agent-controller.js
// EXE-Engine · Agent 调度器
// 将 Agent 执行链中的 AI 调用从 Copilot 切换到自研引擎
// PRJ-EXE-001 · Phase 0基础版P2 实现双轨切换)
// 版权:国作登字-2026-A-00037559
'use strict';
/**
* Agent 调度器
*
* 本体论锚定调度器 = 笔的手指
* 不同的笔尖Agent需要不同的墨水模型
* 调度器负责为每个笔尖分配最合适的墨水
*
* 职责
* - 维护 Agent 模型 的映射表
* - 支持 Agent 级别的模型偏好配置
* - 执行链断点续接P2 实现
*/
class AgentController {
constructor() {
// Agent → 模型偏好映射
this._agentPreferences = new Map();
// 默认 Agent 偏好
this._defaultPreference = {
model: 'auto',
priority: 'balanced',
maxTokens: 4096,
mode: 'pool' // byok | pool | hybrid
};
}
/**
* 注册 Agent 的模型偏好
*
* @param {string} agentId Agent ID ( AG-ZY-01)
* @param {object} preference 偏好配置
* @param {string} [preference.model] 首选模型
* @param {string} [preference.priority] 优先策略
* @param {number} [preference.maxTokens] 最大 token
* @param {string} [preference.mode] 接入模式
*/
registerAgent(agentId, preference = {}) {
this._agentPreferences.set(agentId, {
...this._defaultPreference,
...preference
});
}
/**
* 获取 Agent 的模型偏好
* @param {string} agentId
* @returns {object}
*/
getPreference(agentId) {
return this._agentPreferences.get(agentId) || { ...this._defaultPreference };
}
/**
* Agent 请求转换为 EXE 标准请求
*
* @param {string} agentId Agent ID
* @param {object} agentRequest Agent 原始请求
* @param {string} agentRequest.prompt
* @param {string} [agentRequest.taskType]
* @param {object} [agentRequest.context]
* @returns {object} EXE 标准请求
*/
buildExeRequest(agentId, agentRequest) {
const pref = this.getPreference(agentId);
return {
agentId,
taskType: agentRequest.taskType || 'agent_instruction',
prompt: agentRequest.prompt,
systemPrompt: agentRequest.systemPrompt || null,
context: agentRequest.context || {},
preferences: {
model: agentRequest.model || pref.model,
priority: agentRequest.priority || pref.priority,
maxTokens: agentRequest.maxTokens || pref.maxTokens
},
resourcePool: pref.mode === 'byok' ? null : 'default'
};
}
/**
* 获取所有已注册 Agent 状态
* @returns {object[]}
*/
getRegisteredAgents() {
const agents = [];
for (const [agentId, pref] of this._agentPreferences) {
agents.push({ agentId, ...pref });
}
return agents;
}
}
module.exports = AgentController;