目录

AgentOS Runtime

AgentOS 是面向多 Agent 复杂任务的统一执行时。它把 Task 组织为 DAG,把 Agent 运行在隔离进程中,并统一处理资源准入、上下文、进程通信、故障恢复和本地模型调度。

核心机制

机制 实现
任务调度 DAG 依赖、动态任务、优先级、关键路径和资源感知派发
进程隔离 每个 Runtime Agent 使用独立常驻进程,主进程负责控制面
内核调度 openEuler 上对 Agent 进程应用 nice 和 CPU affinity
ContextPool 共享上下文分页、去重、压缩和页表隔离;页表内容直接进入模型 prompt
模型侧资源感知调度 实时读取 llama.cpp /slots 的容量、空闲状态和提示词负载;按可用 slot 准入模型任务,无空闲 slot 时延迟派发
KV Cache 管理 Runtime 首次推理后调用 llama.cpp slot save/restore,将同一场景前缀复制到空闲 slot;后续请求使用 id_slotcache_prompt
通信 常驻进程使用 JSONL 桥接,Runtime 内部使用 PubSub 统一事件语义
容错 进程隔离、监督重试、看门狗、熔断和生命周期审计
flowchart LR
    DAG["Task DAG
依赖与优先级"] --> ADMIT["Runtime 统一准入
进程资源 + GPU slot 容量"] ADMIT --> PROC["Agent 隔离进程"] PROC --> CTX["ContextPool
共享与私有页表"] PROC --> MODEL["llama.cpp GPU 模型服务
slot 状态与 KV save/restore"] PROC --> KERNEL["openEuler 内核
nice / CPU affinity"] MODEL --> RESULT["运行结果
wall time / token / 验收状态"]

llama.cpp 负责模型推理和 GPU 执行;AgentOS 负责模型侧资源感知调度。Runtime 持续读取 slot 总数、空闲状态和 n_prompt_tokens,为模型任务分配并保留可用 slot;容量不足时延迟派发,避免多个 Agent 无限制地同时争抢 GPU 推理资源。

安装

python -m pip install -e .

要求 Python 3.10+。开发可使用 Windows;比赛验证环境为 openEuler 24.03 LTS SP3。

本地模型

推荐 Qwen2.5-1.5B-Instruct GGUF Q4_K_M,服务端使用 llama.cpp,默认 2 slots。

winget install --id ggml.llamacpp --exact
start_qwen_local.bat

另开终端检查并运行普通场景:

python -m agentos.cli inference-doctor
python -m agentos.cli run auto-programming --real-llm

真实 Benchmark

快速演示执行一个完整复杂场景和 4 Agent 执行池:

python -m agentos.cli benchmark-quick

正式实验执行四个场景,每场景重复 5 轮,每个请求固定生成 128 token:

python -m agentos.cli benchmark

扩展实验依次测量 4 Agent 和 7 Agent:

python -m agentos.cli benchmark --scale

openEuler 最终实验覆盖 4 个场景、4/7 Agent、每场景 5 轮,共执行 120 次 profile、2,040 个 Task 和 1,380 次真实模型调用。全部验收通过,结果如下:

指标 4 Agent 7 Agent 40 组配对平均
Runtime 相对 Workflow wall time 降低 39.566% 40.184% 39.875%
Runtime 相对 Graph wall time 降低 32.974% 33.717% 33.345%
Runtime 相对 Graph 实际预填 token 降低 64.921% 64.317% 64.619%
Runtime 相对 Graph 模型预填耗时降低 61.352% 60.773% 61.062%

三组通过同一 RuntimeLoop + ScenarioCoordinator 执行真实 YAML DAG,使用相同模型、任务、工具、temperature、seed 和固定解码长度。缓存与上下文策略是被测功能,因此按 profile 开关:

Profile 唯一调度差异
Serial Workflow 单核串行,使用标准 OpenAI 兼容模型请求
Graph-only 按真实 DAG 就绪并发,使用标准 OpenAI 兼容模型请求
AgentOS Runtime 增加模型侧资源感知调度、依赖上下文压缩、id_slotcache_prompt 和 KV save/restore

任务按 YAML 的 agent 字段进入对应角色队列,依赖完成后才可执行;声明的工具在隔离进程内真实运行,产物必须存在且非空。4 Agent 实验保留完整 DAG,把 7 个逻辑角色确定性合并到 4 个执行角色;7 Agent 实验使用原始角色映射。每轮轮换三组顺序,每组前清空 llama.cpp slots。实验不使用模拟 sleep、人工 penalty、预设结果或样本筛选。

完整方法、逐场景结果、波动分析和局限见 最终 Benchmark 报告。原始数据位于:

项目文档/final-competition-benchmark/agents-4/summary.json
项目文档/final-competition-benchmark/agents-7/summary.json

本机快速验证使用 software-engineering 完整 CRUD DAG、4 Agent 和固定 160-token 解码;运行结果由 benchmark-quick 直接写入 output/quick-benchmark。正式结果使用上述 openEuler 全部轮次,不删除异常样本。

openEuler 虚拟机验证

推荐架构:AgentOS Runtime 在 openEuler 虚拟机中运行;Qwen/llama.cpp 在同一物理机的 Windows 宿主机使用 GPU 运行;虚拟机通过 NAT 网络访问宿主机模型服务。

export AGENTOS_MODEL_SERVER_URL=http://192.168.56.1:11435
bash scripts/verify_openeuler_vm.sh

脚本安装依赖、构建 Rust 扩展、执行 Python/Rust 测试、普通场景功能验收和 4/7 Agent 正式实验。

本次正式结果中所有 worker 的 nice 与 CPU affinity 均成功应用,进程事件未记录内核控制错误。

测试

python -m pytest -q
cargo test --workspace --release

测试数量以当前命令输出为准,不在文档中写死。

关于
176.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

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