Files
connectai/src/agents/AgentWorkflowManager.ts
T

68 lines
2.5 KiB
TypeScript

import { ConfigurableWorkflowAgent } from './factory';
import { DEFAULT_MULTI_AGENT_WORKFLOW, MultiAgentStageConfig } from '../config';
export class AgentWorkflowManager {
/**
* 리팩토링된 고성능 에이전트 엔진을 통해 워크플로우를 실행합니다.
*/
public static async runStrictWorkflow(
prompt: string,
modelName: string,
brainContext: string,
signal: AbortSignal,
onProgress: (step: string, message: string) => void,
workflow: MultiAgentStageConfig[] = DEFAULT_MULTI_AGENT_WORKFLOW
): Promise<string> {
const stages = workflow.length > 0 ? workflow : DEFAULT_MULTI_AGENT_WORKFLOW;
const stageOutputs: string[] = [];
try {
for (const [index, stage] of stages.entries()) {
if (signal.aborted) throw new Error('AbortError');
const agent = new ConfigurableWorkflowAgent(modelName, stage);
const stepName = stage.name || `Stage ${index + 1}`;
onProgress(stepName, `Running ${index + 1}/${stages.length}`);
const stageInput = this.buildStageInput(stage, prompt, stageOutputs);
const result = await agent.execute(stageInput, brainContext, signal);
this.validateResult(result, stepName);
stageOutputs.push(result);
onProgress(stepName, `Completed ${index + 1}/${stages.length}`);
}
return stageOutputs[stageOutputs.length - 1];
} catch (error: any) {
if (error.name === 'AbortError' || error.message.includes('cancelled')) {
throw error;
}
throw new Error(`[Workflow Manager] ${error.message}`);
}
}
private static buildStageInput(stage: MultiAgentStageConfig, originalPrompt: string, stageOutputs: string[]): string {
const previous = stageOutputs[stageOutputs.length - 1] || '';
if (stage.input === 'original') {
return originalPrompt;
}
if (stage.input === 'previous') {
return previous || originalPrompt;
}
return [
'## Original User Request',
originalPrompt,
'',
'## Previous Stage Output',
previous || 'No previous stage output.'
].join('\n');
}
private static validateResult(data: string, step: string) {
if (!data || data.trim().length < 10) {
throw new Error(`${step} agent did not return a usable response.`);
}
}
}