diff --git a/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/node/SqlGenerateNode.java b/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/node/SqlGenerateNode.java index c7ea468..4b885bd 100644 --- a/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/node/SqlGenerateNode.java +++ b/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/node/SqlGenerateNode.java @@ -76,7 +76,8 @@ public Map apply(OverAllState state) throws Exception { // Get necessary input parameters Plan plan = PlanProcessUtil.getPlan(state); - ExecutionStep executionStep = PlanProcessUtil.getCurrentExecutionStep(state); + ExecutionStep executionStep = PlanProcessUtil.getCurrentExecutionStep(plan, + PlanProcessUtil.getCurrentStepNumber(state)); ExecutionStep.ToolParameters toolParameters = executionStep.getToolParameters(); // Execute business logic first - determine what needs to be regenerated @@ -219,11 +220,11 @@ public Flux get() { roundRef.get()) .collect(StringBuilder::new, StringBuilder::append) .map(StringBuilder::toString) - .flatMapMany(sql -> Flux.just(nl2SqlService.sqlTrim(sql)).expand(newSql -> { + .flatMapMany(sql -> Flux.just(nl2SqlService.sqlTrim(sql)).expandDeep(newSql -> { if (checkSqlFunc.apply(newSql) || roundRef.getAndIncrement() > MAX_OPTIMIZATION_ROUNDS) { String bestSql = bestSqlRef.get(); bestSqlConsumer.accept(bestSql); - return Flux.just(bestSql); + return Flux.empty(); } else { return this.get(); @@ -243,7 +244,7 @@ public Flux get() { if (checkSqlFunc.apply(newSql) || roundRef.getAndIncrement() > MAX_OPTIMIZATION_ROUNDS) { String bestSql = bestSqlRef.get(); bestSqlConsumer.accept(bestSql); - return Flux.just(bestSql); + return Flux.empty(); } else { return reGenerateSupplier.get(); diff --git a/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/util/PlanProcessUtil.java b/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/util/PlanProcessUtil.java index cec1acc..287ffed 100644 --- a/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/util/PlanProcessUtil.java +++ b/spring-ai-alibaba-data-agent-chat/src/main/java/com/alibaba/cloud/ai/dataagent/util/PlanProcessUtil.java @@ -60,7 +60,18 @@ private PlanProcessUtil() { public static ExecutionStep getCurrentExecutionStep(OverAllState state) { Plan plan = getPlan(state); int currentStep = getCurrentStepNumber(state); + return getCurrentExecutionStep(plan, currentStep); + } + /** + * Get the current execution step from the plan + * @param plan the plan object + * @param currentStep current step + * @return the current execution step + * @throws IllegalStateException if plan output is empty, plan parsing fails, or step + * index is out of range + */ + public static ExecutionStep getCurrentExecutionStep(Plan plan, Integer currentStep) { List executionPlan = plan.getExecutionPlan(); if (executionPlan == null || executionPlan.isEmpty()) { throw new IllegalStateException("执行计划为空");