目录

AROS:多 Agent 操作系统级运行时

作品简介

AROS(AgentRuntime-OS)是面向 openEuler 的多 Agent 隔离执行与统一编排引擎。系统采用 C++ Daemon 控制平面 + 多 Agent 独立进程执行平面 的架构,将每个 Agent 映射为受管操作系统进程,并对任务状态、资源边界、上下文、通信端点和生命周期进行统一管理。

AROS主要面向自动化代码审查、智能运维巡检、复杂任务规划等多 Agent 流水线场景,重点解决共享运行时中的故障扩散、资源竞争、静态任务图适应性不足以及上下文持续膨胀等问题。

核心能力

  • 进程级隔离:每个 Agent 运行在独立进程中,单个 Agent 异常不会直接破坏 Daemon 和其他无关 Agent。
  • 多维资源约束:采用 fork → prlimit → execve 启动时序设置 RLIMIT_AS,并结合 cgroups v2 的 memory.maxcpu.maxpids.max 控制资源使用。
  • 动态 DAG 调度:采用 Kahn 算法维护拓扑关系,支持运行时新增节点;通过 JSON Schema、DFS 环路检测和增量 Kahn 更新保证动态图合法性。
  • AgentPool 预热复用:复用已经完成 Python 解释器和业务环境初始化的 Agent 工作进程,降低重复任务的冷启动开销。
  • 上下文管理:以 TaskId + AgentId 建立命名空间,结合 LRU 缓存、SQLite WAL 持久化和 FAISS 检索,实现上下文复用、压缩和隔离。
  • 资源感知调度:通过 /proc 和 cgroups v2 采集系统负载,使用 EWMA 预测资源消耗,并通过 Best-Fit 和优先级老化机制选择 AgentPool 槽位。
  • 异步通信与可观测性:控制平面与执行平面采用 ZeroMQ ROUTER-DEALER 模式通信,并通过 REST API、结构化日志和 trace_id 提供运行状态查询与链路追踪。

运行环境

建议在以下环境中构建和运行:

  • openEuler 或兼容 Linux 环境
  • Linux cgroups v2
  • GCC 11 或兼容版本
  • GNU Make
  • CPython 3.10
  • ZeroMQ 4.x
  • Python pip3
  • curl

使用 cgroups v2 资源控制时,应确保当前用户或 Daemon 进程具有相应 cgroup 创建与配置权限。

目录说明

AROS/
├── daemon/        # C++控制平面、调度器、进程与生命周期管理
├── agent/         # Python Agent业务程序及依赖
├── config/        # Daemon配置和示例DAG文件
├── experiments/   # 自动化实验脚本
└── README.md

编译与运行

以下命令均在项目根目录下执行。

1. 编译 Daemon

cd daemon
make -j"$(nproc)"

编译完成后,默认生成可执行文件:

daemon/build/agent_runtime_daemon

2. 安装 Agent Python 依赖

cd ../agent
pip3 install -r requirements.txt

建议使用 Python 3.10 虚拟环境安装依赖,避免与系统 Python 包冲突。

3. 检查配置文件

返回项目根目录:

cd ..

启动前确认以下文件存在并已按运行环境配置:

config/daemon.conf
config/example_dag.json

其中:

  • daemon.conf:配置监听端口、AgentPool 规模、资源限制和超时参数;
  • example_dag.json:定义示例 Agent 节点、依赖关系、资源需求和执行参数。

4. 启动 Daemon

./daemon/build/agent_runtime_daemon --config config/daemon.conf

Daemon 启动后将初始化调度器、AgentPool、ZeroMQ 通信代理、上下文管理器和 REST 服务。默认 REST API 地址为:

http://localhost:8080

5. 提交 DAG 任务

在另一个终端中进入项目根目录并执行:

curl -X POST http://localhost:8080/api/v1/dag \
  -H "Content-Type: application/json" \
  -d @config/example_dag.json

系统完成格式校验和拓扑解析后,将就绪节点分配至 AgentPool。节点状态包括:

  • DONE:执行成功;
  • FAILED:执行失败;
  • TIMEOUT:执行超时;
  • SKIPPED:因前置节点失败而跳过。

运行状态查询

查询 AgentPool

curl http://localhost:8080/api/v1/pool

用于查看 AgentPool 规模、槽位状态以及空闲、占用或异常工作进程。

查询 Agent 资源状态

curl http://localhost:8080/api/v1/agents

用于查看 Agent 的 PID、运行状态、内存占用、CPU 使用情况及任务关联信息。

查询监控指标

curl http://localhost:8080/api/v1/metrics

用于获取系统运行指标和 Prometheus 格式监控数据。

运行全部实验

bash experiments/run_all.sh

实验脚本用于验证资源限制、AgentPool 加速、并发隔离、REST 响应、进程回收、动态 DAG、上下文管理和资源感知调度等功能。建议在负载相对稳定的独立环境中执行,以减少其他进程对实验结果的影响。

停止系统

前台运行时,可使用 Ctrl+C 结束 Daemon。系统将进入正常退出流程,向受管 Agent 进程发送终止信号并回收子进程状态。

也可以向 Daemon 发送 SIGTERM

kill -TERM <daemon_pid>

常见问题

1. Daemon 编译失败

检查 GCC、GNU Make、ZeroMQ 开发库及项目构建依赖是否已经安装,并确认当前位于 daemon 目录。

2. Python Agent 无法启动

确认使用 Python 3.10,并已安装 agent/requirements.txt 中的依赖。若配置的 RLIMIT_AS 过低,Python 解释器可能在初始化阶段因内存不足而退出;当前实验环境中建议基础 Agent 的内存上限不低于 96 MB,具体数值应根据业务依赖调整。

3. REST API 无法访问

检查:

  • Daemon 是否正常运行;
  • daemon.conf 中的 REST 端口是否为 8080;
  • 8080端口是否已被其他程序占用;
  • 防火墙或运行环境是否限制本机端口访问。

4. cgroups v2 配置失败

检查系统是否启用 cgroups v2,并确认 Daemon 对目标 cgroup 路径具有写权限。若当前环境不允许配置cgroup,需要调整运行权限或资源控制配置。

5. DAG 提交失败

检查 config/example_dag.json 是否符合系统要求,重点确认:

  • 节点标识唯一;
  • 前置依赖节点存在;
  • 依赖关系未形成环路;
  • Agent 类型、资源需求和输入参数字段完整。
关于
204.5 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号