Skip to content

[Feature] Add batched array-loop dispatch to LoopAgent #156

Closed

Description

@Aias00

背景

这是上游遗留需求 alibaba/spring-ai-alibaba#4664。上游已有未合并实现 PR #4842,但当前 ARGI 尚未包含该能力。

当前能力缺口

当前 ArrayLoopStrategy#loopDispatch 每轮固定只读取一个元素,并将游标加一:

UserMessage message = new UserMessage(list.get(index).toString());
return Map.of(loopCountKey(), index + 1, ...);

LoopMode 也只有:

LoopMode.array()
LoopMode.array(converter)

没有 batchSize 配置。因此像“20 张图片每轮最多处理 5 张”这类有界分批任务,只能在 Agent 外部手写循环或自定义 strategy,无法直接通过 LoopAgent 表达。

当前代码位置:

  • argi-agent-framework/.../loop/ArrayLoopStrategy.java:37-68
  • argi-agent-framework/.../loop/LoopMode.java:40-45

期望 API

建议提供向后兼容的可选重载:

LoopMode.array(int batchSize)
LoopMode.array(int batchSize, Converter<List<Message>, List<?>> converter)

行为建议:

  • array() 和现有 converter 重载继续保持每轮单元素,避免行为变化;
  • 指定 batchSize 后,每轮发送最多 N 个元素;
  • 批次消息使用合法 JSON 数组,而不是 Java List#toString();
  • 最后一批允许少于 N 个元素;
  • batchSize <= 0 时 fail fast。

验收建议

  • 完整批次:20 个元素、batchSize=5,恰好执行 4 轮;
  • 尾批次:12 个元素、batchSize=5,批次大小为 5/5/2;
  • 默认兼容:array() 仍逐元素执行;
  • 自定义 converter 与 batch 同时可用;
  • 非法 batch size 有稳定异常;
  • 批次 payload 可被 JSON 解析。

上游 PR #4842 已包含相同方向的 API、实现与测试,可以作为移植参考,但需要适配当前 io.github.agentic.ai 包名与 ARGI 代码现状。

Activity

  1. added
    kind/feature功能:新增能力或改进现有功能
    area/multi-agent多智能体:编排、委派、协作与结果汇聚
    needs-triage待分诊:尚需确认类型、领域或优先级
    on Oct 13, 2026
  2. xiaowu0203 commented on Oct 15, 2026

    @xiaowu0203
    Contributor

    你好,我想认领 #156。计划在当前 ARGI 中增加可选的数组循环批量派发,提供 LoopMode.array(batchSize) 及支持自定义 converter 的重载,保持现有逐元素行为兼容。

    我会参考 Spring AI Alibaba PR #4842,适配当前中立 ChatMessage API,并补充完整批次、尾批次、默认兼容、自定义 converter、非法参数和 JSON payload 的离线测试。请问目前是否已有其他人在推进?如果没有,我按这个范围开始处理。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area/multi-agent多智能体:编排、委派、协作与结果汇聚kind/feature功能:新增能力或改进现有功能needs-triage待分诊:尚需确认类型、领域或优先级

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions