Chapter 5:循环执行模式(LoopAgent)5.1 模式原理什么是循环执行?LoopAgent 允许 Agent 反复执行,直到满足终止条件。这对于需要迭代优化、多轮评审、或动态调整的任务至关重要。与一次性执行的 Agent 不同,LoopAgent 引入了"评估-执行-再评估"的循环机制。┌─────────────────────────────────────────────────────────────┐ │ LoopAgent │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ │ │ Execute │ ──► │ Evaluate │ ──► │ Continue? │ │ │ │ 执行 │ │ 评估 │ │ 继续判断 │ │ │ └─────────┘ └─────────┘ └──────┬──────┘ │ │ ▲ │ │ │ │ ┌─────────┐ │ Yes │ │ └───────────┤ Result │◄────────┘ │ │ │ 输出 │ │ │ └─────────┘ │ │ │ No │ │ ▼ │ │ ┌───────────┐ │ │ │ Output │ │ │ │ 结束 │ │ │ └───────────┘ │ └─────────────────────────────────────────────────────────────┘核心特征特征说明迭代性反复执行直到满足条件自评性内置评估机制判断是否继续可控性必须有明确的终止条件优化性适合迭代改进类任务Loop vs 其他模式维度SequentialParallelRoutingLoop执行次数1次1次1次多次决策静态静态半动态动态结果直接输出聚合输出选择输出迭代优化适用场景固定流程独立任务分类分发优化迭代5.2 终止条件设计终止条件类型类型说明示例最大迭代防止无限循环maxIterations = 5质量阈值达到质量标准score 0.9收敛检测输出趋于稳定delta 0.01超时限制时间限制timeout = 30s混合条件多种条件组合质量 OR 超时终止条件实现publicinterfaceLoopTerminationCondition{booleanshouldContinue(LoopStatestate);StringgetReason();// 终止原因}publicclassLoopState{privateintiteration;// 当前迭代次数privateAssistantMessagelastResult;// 上次输出privatedoublequalityScore;// 质量评分privateDurationelapsedTime;// 已耗时privateListStringhistory;// 历史记录}// 示例:质量阈值 + 最大迭代组合publicclassCompositeTerminationimplementsLoopTerminationCondition{privatefinaldoubleminQuality;privatefinalintmaxIterations;privatefinalDurationtimeout;@OverridepublicbooleanshouldContinue(LoopStatestate){// 条件一:达到质量阈值if(state.getQualityScore()=minQuality){returnfalse;// 终止:质量达标}// 条件二:达到最大迭代if(state.getIteration()=maxIterations){returnfalse;// 终止:迭代上限}// 条件三:超时if(state.getElapsedTime().compareTo(timeout)0){returnfalse;// 终止:时间到}returntrue;// 继续}}5.3 快速入门示例基础配置@ConfigurationpublicclassLoopAgentConfig{@BeanpublicLoopAgentcodeOptimizationLoop(ChatModelchatModel){// 核心执行 AgentReactAgentcodeAgent=ReactAgent.builder().name("code_optimizer").description("Optimize code for better performance").chatModel(chatModel).systemPrompt(""" You are a code optimization specialist. Improve the provided code for: 1. Performance 2. Readability 3. Best practices Output the optimized code with explanation. """).tools(List.of(codeAnalysisTool())).build();// 评估 Agent - 判断是否继续ReactAgentevaluatorAgent=ReactAgent.builder().name("quality_evaluator").description("Evaluate optimization quality").chatModel(chatModel).systemPrompt(""" Evaluate the code optimization quality. Score from 1-10 based on: - Performance improvement - Code clarity - Best practice adherence Output format: SCORE: [number] REASON: [explanation] """).build();returnLoopAgent.builder().name("code_optimization_loop").executorAgent(codeAgent).evaluatorAgent(evaluatorAgent).maxIterations(5).minQualityScore(8.0).timeout(Duration.ofMinutes(2)).build();}}调用示例@ServicepublicclassCodeOptimizationService{@AutowiredprivateLoopAgentcodeOptimizationLoop;publicStringoptimizeCode(String