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

103 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;