UNPKG

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
"use strict"; 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;