flux-agent
Version:
FluxAgent - 一个可灵活插拔的AI Agent系统框架,基于TypeScript开发,支持流式执行、事件系统、插件系统、知识库管理等功能 (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (
122 lines (121 loc) • 4.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ToolOrchestrator = void 0;
const Phases_1 = require("../Phases");
const types_1 = require("./types");
const Agent_1 = require("../Agent");
const State_1 = require("../State");
/**
* 工具协调器
* 负责处理工具调用和相关逻辑
*/
class ToolOrchestrator {
constructor(agent // 暂时使用any,后续会优化类型
) {
this.agent = agent;
}
/**
* 处理工具调用
*/
async handleTools(llmResult, session) {
Agent_1.AgentLogger.log('处理工具调用', llmResult.enhancedResponse.toolCalls?.map(toolCall => toolCall.name));
if (!llmResult.hasToolCalls()) {
// 没有工具调用,返回内容响应
if (llmResult.hasContent()) {
return types_1.ToolResultBuilder.success(llmResult.enhancedResponse.content || undefined);
}
return types_1.ToolResultBuilder.success();
}
const toolCall = llmResult.enhancedResponse.toolCalls[0];
// 处理每个工具调用
Agent_1.AgentLogger.log(`LLM调用工具: ${toolCall.name}`, {
arguments: toolCall.arguments,
phase: llmResult.phase
});
const toolResult = await this.executeSingleTool(toolCall, session);
if (toolResult.type === 'pause') {
this.agent.changeAgentState(State_1.AgentState.IDLE);
}
if (toolResult.type === 'stop' && this.agent.streamExecutionEngine.getStopped()) {
this.agent.changeAgentState(State_1.AgentState.IDLE);
}
return toolResult;
}
/**
* 执行单个工具调用
*/
async executeSingleTool(toolCall, session) {
try {
// 使用ToolManager执行工具调用
const toolResult = await this.agent.toolManager.executeToolCall(toolCall.id, toolCall.name, toolCall.arguments, this.agent.context, session.getCurrentPhase());
// 处理系统工具
const systemToolResult = await this.handleSystemTools(toolCall, session, toolResult);
return systemToolResult;
}
catch (error) {
Agent_1.AgentLogger.log(`工具调用失败: ${toolCall.name}`, { error: error.message });
return types_1.ToolResultBuilder.error(error);
}
}
/**
* 处理系统工具的特殊逻辑
*/
async handleSystemTools(toolCall, session, toolResult) {
const currentPhase = session.getCurrentPhase();
switch (toolCall.name) {
case 'EndPhaseTool':
return this.handleEndPhaseTool(toolCall, session, currentPhase);
default:
// 其他工具调用,返回成功
return toolResult;
}
}
/**
* 处理阶段结束工具
*/
handleEndPhaseTool(toolCall, session, currentPhase) {
const reason = toolCall.arguments.reason || '阶段完成';
// 移动到下一个阶段
const nextPhase = this.agent.phases.getNextPhase();
if (nextPhase) {
Agent_1.AgentLogger.log(`阶段切换: ${currentPhase} -> ${nextPhase}`);
return types_1.ToolResultBuilder.phaseEnd(currentPhase, nextPhase, reason);
}
else {
// 没有下一个阶段了,结束运行
this.agent.changeAgentState(State_1.AgentState.STOP);
Agent_1.AgentLogger.log('没有下一个阶段,Agent停止');
return types_1.ToolResultBuilder.phaseEnd(currentPhase, undefined, reason);
}
}
/**
* 处理特殊阶段的响应逻辑
*/
async handleSpecialPhaseLogic(llmResult) {
const phase = llmResult.phase;
// 处理CONFIRM阶段的特殊逻辑,当没有任何 toolCall 时,其实就是在等待用户输入
if (phase === Phases_1.PhaseType.CONFIRM && !llmResult.hasToolCalls()) {
await this.agent.setWaitingForUserInput(true);
}
// 如果是 PLAN 阶段,直接进入下一阶段
if (phase === Phases_1.PhaseType.PLAN) {
return {
type: 'complete',
response: {
content: '任务规划已完成,进入下一个阶段'
}
};
}
// 处理SUMMARY阶段的特殊逻辑,保证任务执行完之后用户可以继续提问
if (phase === Phases_1.PhaseType.SUMMARY) {
await this.agent.setWaitingForUserInput(true);
return {
type: 'complete',
response: {
content: '任务已完成,可以继续向我提问哈~'
}
};
}
}
}
exports.ToolOrchestrator = ToolOrchestrator;