Dify需将API返回的483条商品数据按每块30条切分为17个子任务处理:先用代码节点提取data.items数组并分块,再通过循环节点逐批执行,确保末块含3条且无空切片。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让Dify调用一个外部API,该API一次性返回大量结构化数据(比如500条商品信息),但Dify工作流单次执行无法承载全部处理逻辑——直接遍历会超时、内存溢出或触发平台限流。必须把这批数据切分成多个独立子任务并行或串行调度。
确认API响应结构与分块依据
打开Postman或curl调用目标API,观察返回体是否为数组(如[{"id":1,"name":"A"},{"id":2,"name":"B"}])。如果不是数组,而是嵌套在data.items或result.list等字段下,需先定位真实数据数组路径。
记录数组长度,例如response.length === 483。这是后续切割的总基数,不可跳过这步——若误将包装对象当数据源,后续所有切片都会为空。
确定分块粒度:单任务处理30条较稳妥;超过50条在Dify中易触发超时。这个数值要写死在后续代码里,不能动态计算。
在Dify工作流中接入“分割数组”节点
进入Dify知识库→工作流编辑页,拖入「代码」节点(非HTTP请求节点),语言选Python。
在代码框中粘贴以下逻辑:
# 输入变量名必须是 api_response(Dify自动注入上一节点输出)
# 每块30条,硬编码,不读环境变量
chunk_size = 30
data_list = api_response.get("data", []).get("items", []) if isinstance(api_response, dict) else api_response
# 强制转为list,避免tuple或generator导致切片失败
if not isinstance(data_list, list): data_list = list(data_list)
# 切片生成子列表,每项是长度≤30的子数组
chunks = [data_list[i:i + chunk_size] for i in range(0, len(data_list), chunk_size)]
# 输出必须是字典,且键为 chunks,值为列表
return {"chunks": chunks}
【chunks必须作为顶层键名返回,否则后续循环节点无法识别】
配置“循环执行”节点驱动多任务
在分割节点后连接「循环」节点,设置循环源为{{分割节点名称.chunks}}(节点名按你实际命名填写,如“切分数组”)。
循环体内放入你要批量执行的逻辑:比如对每个子数组调用LLM提取关键词、写入数据库、发通知等。
注意循环体内的变量作用域:当前迭代项固定名为item,所以处理时用{{item}}即可访问当前30条数据组成的列表。
若循环内需调用HTTP节点发送子数组,请确保请求体使用{{item}}而非{{分割节点名称.chunks}}——后者是全部切片,前者才是当前批次。
验证分块数量与末尾完整性
第一步:在分割节点后加一个「调试」节点,输出{{分割节点名称.chunks | length}},确认结果为17(483 ÷ 30 向上取整)。
第二步:在循环节点内放一个「代码」节点,内容为return {"count": len(item)},运行后检查每条日志输出的count值——前16次应为30,最后一次应为3(483 − 16×30 = 3)。
第三步:任选一个循环迭代,在其末尾添加「条件分支」节点,判断{{item | length}} == 1,满足时抛出告警日志。这能捕获因API返回空数组导致的异常单条切片,避免静默失败。


















