执行摘要
- 一句话:修复 swe-agent 中止时未刷新多个 session-server 实例的问题
- 推荐动作:此 PR 值得精读,因为它修复了一个性能关键路径上的 bug,并展示了如何正确读取 driver 参数中的复数映射。建议补充针对 abort 行为的单元测试,以覆盖多实例和单实例场景。
功能与动机
在 multi-turn agentic 流程中,模型评估和奖励评分在 CPU 侧进行,若 abort 信号未到达所有实例,rollout 会被长时间运行的 CPU 进程阻塞,使 oversampling 失去意义。PR 指出,会话服务器的 instance ID 被错误获取,导致 FLUSH 信号未到达 Harbor。
实现拆解
- 变更入口:修改
examples/swe-agent-harbor-docker/swe_agent_function.py 中的 abort(args) 函数。
- 核心逻辑:将原先仅读取单数属性
session_server_instance_id 的逻辑,改为优先读取复数属性 session_server_instance_ids(字典)的所有值,并加入单数属性作为回退,避免兼容性问题。
- 异步刷新:遍历所有实例 ID,逐个发送
/flush 请求,并保留异常处理逻辑。
- 测试配套:本 PR 无新增或修改测试,但性能数据在 PR 描述中提供,用于验证改进效果。
关键文件:
examples/swe-agent-harbor-docker/swe_agent_function.py(模块 swe-agent;类别 infra;类型 infrastructure): 核心修改文件,修复 abort 函数未能刷新所有 session-server 实例的问题。
关键符号:abort
关键源码片段
examples/swe-agent-harbor-docker/swe_agent_function.py
核心修改文件,修复 abort 函数未能刷新所有 session-server 实例的问题。
# swe_agent_function.py 中 abort 函数的关键修正片段
async def abort(args) -> None:
# ...
agent_server_url = os.getenv("AGENT_SERVER_URL", os.getenv("SWE_AGENT_URL"))
# 从 driver 参数中读取复数实例 ID 映射(set 去重),并保留单数属性作为向后兼容回退
instance_ids = set((getattr(args, "session_server_instance_ids", None) or {}).values())
singular = getattr(args, "session_server_instance_id", None)
if singular:
instance_ids.add(singular)
if not agent_server_url or not instance_ids:
return
headers = None
admin_secret = os.getenv("HARBOR_ADMIN_SECRET")
if admin_secret:
headers = {"Authorization": f"Bearer {admin_secret}"}
# 逐个实例发送 FLUSH 信号,确保所有会话服务器都被刷新
for instance_id in instance_ids:
try:
result = await post(
f"{agent_server_url.rstrip('/')}/flush",
{"session_server_instance_id": instance_id},
max_retries=3,
headers=headers,
)
logger.info(f"Flushed agent server {agent_server_url}: {result}")
except Exception as e:
logger.warning(f"Failed to flush agent server {agent_server_url}: {e}")
评论区精华
无针对代码的讨论评论。审核人 nblintao 表示 LGTM。
风险与影响
-
风险:回归风险:修改了 abort 逻辑,可能影响现有单实例或复数实例的清理流程。由于使用 set 去重,逻辑上安全,但缺少测试覆盖。
性能风险:逐个实例刷新可能增加网络请求次数,但预期影响较小。
兼容性风险:保留单数属性作为回退,确保旧代码兼容,但若 driver 参数结构中 session_server_instance_ids 不存在,仍能正常工作。
-
影响:用户/系统影响:对于使用 swe-agent 多实例 oversampling 的 rollout 场景,此修复显著缩短等待时间,提升训练效率。
团队影响:无 API 变更,部署脚本不变,仅修复内部逻辑。影响范围限定在 swe-agent 相关功能。
-
风险标记:缺少测试覆盖, 核心路径变更
关联脉络
参与讨论