LlamaIndexのワークフロー設計をJavaで実装するためのイベント駆動型アプローチ

LlamaIndexのワークフロー処理をJavaで再実装する際の主要コンポーネントを解説する。イベント駆動型のアーキテクチャを採用し、以下のクラス群を実装する。

基本イベントクラス 抽象基底クラスとしてのイベント管理を実装。キーの衝突を避けるためクラス名をプレフィックスに付与。

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public abstract class EventBase {
    private String eventIdentifier;
    private String eventType;
    private Map<String, Object> payload = new HashMap<>();

    public EventBase(Map<String, Object> data) {
        this.payload.putAll(data);
    }

    public Object get(String key) {
        String qualifiedKey = getClass().getSimpleName() + "." + key;
        if (payload.containsKey(qualifiedKey)) {
            return payload.get(qualifiedKey);
        }
        throw new IllegalArgumentException("Invalid key: " + qualifiedKey);
    }

    public void set(String key, Object value) {
        String qualifiedKey = getClass().getSimpleName() + "." + key;
        payload.put(qualifiedKey, value);
    }
}

ワークフロー制御イベント 開始/終了イベントの実装。イベントタイプを定数で管理。

@Data
public class WorkflowStart extends EventBase {
    public static final String START_TYPE = "workflow.start";
    
    public WorkflowStart(Map<String, Object> data) {
        super(data);
        this.eventType = START_TYPE;
    }
}

@Data
public class WorkflowEnd extends EventBase {
    public static final String END_TYPE = "workflow.end";
    private String outcome;

    public WorkflowEnd(String result) {
        this.outcome = result;
        this.eventType = END_TYPE;
    }
}

ステップ処理の定義 メソッドに適用する注釈。イベントタイプとワーカー数を指定。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface WorkflowStep {
    Class<? extends EventBase>[] eventTypes() default {};
    int workerCount() default 5;
}

ワークフロー実行エンジン メイン処理ロジックを担うクラス。タイムアウト設定とデバッグログをサポート。

@Slf4j
@Data
public abstract class WorkflowEngine {
    private int maxExecutionTime = 30;
    private boolean debugMode = false;
    private boolean validationEnabled = true;

    public String execute(String inputJson) throws IOException {
        // 実行処理のメインロジック
        return "success";
    }
}

コンテキスト管理 ワークフロー全体で共有する状態を管理。イベントキューとグローバル状態を保持。

@Slf4j
@Data
public class WorkflowContext {
    private boolean stepMode;
    private boolean isExecuting;
    private EventBase currentEvent;
    private Map<String, BlockingQueue<EventBase>> eventQueue = new ConcurrentHashMap<>();
    private Map<String, Object> sharedState = new ConcurrentHashMap<>();
    private String finalResult;

    public WorkflowContext(boolean stepMode) {
        this.stepMode = stepMode;
        this.isExecuting = false;
        this.currentEvent = null;
    }
}

ハンドラクラス ワークフローの実行を制御するハンドラ。

@Slf4j
@Data
public class WorkflowProcessor {
    private WorkflowContext context;
    
    public void process(int timeout) {
        // タイムアウト処理とイベント処理のメインロジック
    }
}

タグ: LlamaIndex Java event-driven Workflow context-management

6月27日 22:14 投稿