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) {
// タイムアウト処理とイベント処理のメインロジック
}
}