調(diào)用與結(jié)果合并機(jī)制)
第15篇:loop 步驟的循環(huán)調(diào)用與結(jié)果合并機(jī)制工作流引擎的七種步驟類型中,loop是最復(fù)雜也最強(qiáng)大的一個(gè)。它能遍歷一個(gè)列表,對每個(gè)元素調(diào)用不同的 Skill,把所有結(jié)果合并成一個(gè)扁平列表。“查詢預(yù)算小于 200 的項(xiàng)目的全部附件”——這個(gè)需求需要先查所有項(xiàng)目、過濾預(yù)算、再對每個(gè)滿足條件的項(xiàng)目循環(huán)查附件,最后把所有附件合并到一個(gè)列表。沒有 loop 步驟,這類"一對多"的組合查詢就無法實(shí)現(xiàn)。本文深入拆解_exec_loop()的實(shí)現(xiàn):item_key變量注入機(jī)制、merge合并策略的展平邏輯、MAX_LOOP_ITERATIONS性能防護(hù)、循環(huán)內(nèi) Skill 調(diào)用失敗的容忍策略,以及l(fā)oop_context上下文隔離設(shè)計(jì)。一、問題提出:一對多查詢的困境用戶問智能助手:“查詢預(yù)算小于 200 的項(xiàng)目的全部附件。”拆解這個(gè)需求的執(zhí)行步驟:查詢所有項(xiàng)目 → 得到項(xiàng)目列表過濾預(yù)算小于 200 的項(xiàng)目 → 得到篩選后的項(xiàng)目列表對每個(gè)篩選后的項(xiàng)目查詢其附件 → 得到多個(gè)附件列表把所有附件列表合并成一個(gè) → 得到最終的附件列表步驟 1 和 2 可以用call_skill和filter步驟完成。但步驟 3 和 4 面臨