修正远程指南删除后的README板端链接
面向多智能体持续执行的操作系统级用户态运行时,统一管理任务、模型请求、上下文、工具、通信与系统资源。
AgentOS Runtime 面向长期、并发和事件驱动的多智能体应用,在应用与模型、工具、消息中间件及操作系统资源之间建立统一执行控制层。系统以分层执行对象承载运行过程,通过事件驱动 Dynamic DAG、OS-PARS 调度、异构资源租约、版本化共享状态与局部故障恢复,支持复杂任务的持续协作。
项目基于 openEuler 开发与验证,以 Mini Smart City 城市应急处置作为综合应用场景,扩展医疗报告理解、分诊与车辆派遣,并完成 主机 Runtime + Ascend 310B4 推理侧车的真实 NPU 调用链路。模型负责受限观察下的语义决策,规则执行器与受保护工具负责确定性控制,决策经过解析、业务约束校验和授权后转化为动作。
OS-PARS 全称为 OS-aware Priority And Resource Scheduler,即操作系统感知的优先级与资源协同调度算法。Agent Kernel 是运行于现有操作系统之上的用户态执行控制层。
各行对应独立实验负载。完整协议、对照与分析见 技术文档。
从项目根目录执行。首次使用建议先启动本地基础演示,再按需要接入 SUMO、Redis 或真实模型服务。
src/frontend/
npm ci
# Linux / openEuler AGENTBUS_BACKEND=memory python -m uvicorn app:app --app-dir src/backend --host 127.0.0.1 --port 8008
# Windows PowerShell $env:AGENTBUS_BACKEND = "memory" python -m uvicorn app:app --app-dir src/backend --host 127.0.0.1 --port 8008
cd src/frontend npm run dev
运行界面示例:左侧为 Runtime 主控台,右侧为三维城市视图。
src/backend/runtime_mock/agents/
src/backend/runtime_mock/core/agent_spec.py
src/backend/runtime_mock/core/kernel/
src/backend/runtime_mock/core/kernel/resource_manager.py
src/backend/runtime_mock/llm/
src/backend/runtime_mock/agents/prompt_optimization.py
src/backend/runtime_mock/core/context/
src/backend/runtime_mock/core/bus/
src/backend/runtime_mock/core/media/
src/backend/runtime_mock/core/kernel/fault_manager.py
src/backend/runtime_mock/core/kernel/observability.py
src/backend/city_bridge/
src/backend/app.py
应用层提出任务与能力请求,运行时负责调度和服务准入,底层提供实际模型、消息、存储与系统资源。
城市运行时包含 16 个执行角色:EmergencyDispatch、Ambulance、PublicAdvisory 和 OperatorBriefing 使用模型 Harness,其余 12 个执行确定性规则。医疗扩展另注册 MedicalTriage 与 MedicalVehicle;CameraCaptureService 是独立证据采集服务。PublicAdvisory 与 OperatorBriefing 生成待审核草稿。不同模式下的模型调用范围由配置决定,注册角色数不等于真实模型请求数。
典型流程:外部事件 → 动态任务图 → OS-PARS 调度与资源准入 → 受控模型/工具调用 → Context 提交与消息发布 → 结果观测或异常恢复。
采用 主机负责执行控制,板端负责常驻推理的部署方式。主机运行 Dynamic DAG、OS-PARS、Resource Manager、Context Store、AgentBus 和模型输出校验;Ascend 310B4 通过轻量 HTTP Sidecar 提供推理服务,复用常驻的 ACL 引擎与 .om 模型。
.om
flowchart TD A[Agent Task 与受限观察] --> B[主机 Runtime] B --> C[Prompt Projection 与序列预算] C --> D[LLMCoreManager 请求准入] D --> E[板端 HTTP Sidecar] E --> F[AscendCL 与常驻 OM 模型] F --> G[输出 usage 与设备计时] G --> H[主机解析与业务约束校验] H --> I[授权动作与状态提交] H --> J[受控回退]
板端承担模型加载、ACL 执行和设备计时,返回模型输出及 Token 用量;主机管理请求优先级、执行租约和结果采纳。逻辑取消撤销旧输出的提交资格,在途租约保留至后端结束确认,使任务状态与设备执行状态保持清晰关联。
smollm2_360m_origin_seq512.om
provider=ascend
CITYAGENT_LLM_MAX_CONCURRENCY=1
OMP_NUM_THREADS=1
常驻 seq512 模型实测 NPU 内存使用约 2185—2227 MB,设备总容量 3513 MB。模型加载耗时约 9.163 s;常驻服务可连续处理请求,减少重复加载。14 个标准 Profile 均完成真实 NPU 推理,其中 Police Profile 直接通过解析与校验,其余 13 个进入受控回退;另有 3 场景共 42 次真实请求,记录模型哈希、usage 与设备计时。
export CITYAGENT_LLM_PROVIDER=ascend export CITYAGENT_LLM_MODEL=SmolLM2-360M-Instruct-seq512 export CITYAGENT_LLM_BASE_URL=http://192.168.137.2:8000/v1 export CITYAGENT_LLM_MAX_CONCURRENCY=1
将地址替换为实际板卡地址。Windows PowerShell 使用下文对应的 $env: 配置。随后启动主机后端,在实时运行入口启用 LLM;指挥中心的角色模型配置位于 src/backend/configs/command_agents.yaml。
$env:
src/backend/configs/command_agents.yaml
医疗 LoRA 360M 的配对实验使用 CUDA 后端;板端标准 Profile 使用原始 360M OM。两种部署分别验证领域决策与资源受限推理接入。
项目根目录/ ├── README.md ├── src/ │ ├── backend/ FastAPI、Runtime、CityAPI 与 SUMO 适配 │ ├── frontend/ Vite、Three.js 与同源网关 │ ├── experiment/ 机制实验实现与配置 │ ├── benchmark/ 最终状态及医疗决策评测实现 │ ├── board/ Ascend 侧车与 KV 验证工具 │ ├── scripts/ 部署、构建、实验与验收工具 │ └── Dockerfile / Compose 配置 openEuler 构建与部署 ├── docs/ │ ├── 项目说明书.pdf │ ├── 项目创新说明.pdf │ ├── 成员分工及主要贡献说明.pdf │ ├── 人工智能及第三方工具使用说明.pdf │ ├── guides/ 必要的部署与模型接入说明 │ └── images/ README 配图 ├── tests/ │ ├── backend/cases/ 后端、Runtime 与 SUMO 测试 │ ├── experiment/cases/ 机制实验与指标契约测试 │ ├── benchmark/ 决策与最终状态评分测试 │ ├── frontend/ 前端几何与模型测试 │ ├── baselines/ 已有基线与决策结果材料 │ └── results/ 本次验证结果与新增结果 ├── demo/ 可运行入口与复现说明 ├── presentation/ │ ├── 决赛现场演示PPT.pptx │ └── 决赛演示视频.mp4 └── 作品原创承诺书.pdf
runtime_mock/ 是历史目录名,包含当前运行时实现,覆盖任务调度、资源管理、上下文、通信与故障恢复。结果通常写入 src/backend/results/ 或 src/experiment/results*/;模型权重、前端依赖及构建产物不作为源码提交。
runtime_mock/
src/backend/results/
src/experiment/results*/
正式机制实验使用 Python 3.11.6。openEuler 容器提供运行用户空间,底层资源控制由宿主内核执行。浏览器需支持 WebSocket 与 WebGL,三维视图需要可用图形加速。
src/backend/requirements.txt
python -m pip install httpx
src/frontend/package.json
package-lock.json
sumo
netconvert
PATH
SUMO_HOME
REDIS_URL
首次安装与容器构建需访问相应镜像、Python 和 npm 软件源。基础演示可独立启动;SUMO、Redis、CUDA 与 Ascend 根据所选运行方式准备。
以下命令从项目根目录执行,除非代码块明确切换目录。推荐使用虚拟环境。
Windows PowerShell:
python -m venv src/.venv .\src\.venv\Scripts\Activate.ps1 python -m pip install --upgrade pip python -m pip install -r src/backend/requirements.txt python -m pip install httpx
Linux / openEuler:
python3 -m venv src/.venv source src/.venv/bin/activate python -m pip install --upgrade pip python -m pip install -r src/backend/requirements.txt python -m pip install httpx
若系统未提供 Python、pip 或 venv,先通过系统包管理器安装;从源码构建 Python 扩展还需要编译工具和 Python 开发头文件。
cd src/frontend npm ci cd ../..
npm ci 按锁文件安装。PowerShell 若阻止 npm.ps1,将命令中的 npm 换为 npm.cmd。
npm.ps1
npm
npm.cmd
sumo --version netconvert --version
命令中心基础演示不强制要求 SUMO,实时城市仿真与 SUMO 集成测试需要以上工具。跨进程通信可使用已有 Redis 服务,或安装 Docker 后执行:
docker run -d --name agentos-dev-redis -p 127.0.0.1:6379:6379 redis:7-alpine
src/.env.example 是配置参考。**本地 Python/Vite 启动不会自动加载src/.env**,请在启动后端的终端设置环境变量;Compose 可读取src/.env 并替换其已声明变量。
src/.env.example
src/.env
后端以 Python 源码运行,完成虚拟环境与 requirements.txt 安装即可启动;入口为 src/backend/app.py,启动命令见 运行方法。
requirements.txt
cd src/frontend npm run build cd ../..
产物位于 src/frontend/dist/,包含 command.html、twin.html、index.html、experiments.html、agentbus.html 和 evidence.html。后端为 Python 源码服务,无需单独编译。
src/frontend/dist/
command.html
twin.html
index.html
experiments.html
agentbus.html
evidence.html
项目已包含 src/backend/city_bridge/sumo_assets/maps/city.net.xml。修改节点、道路或连接定义后执行:
src/backend/city_bridge/sumo_assets/maps/city.net.xml
python src/backend/scripts/build_net.py
脚本调用 netconvert 更新路网与信号文件,一般首次演示无需重新生成。
docker compose -f src/docker-compose.openeuler.yml -f src/docker-compose.ports-override.yml build
src/Dockerfile.openEuler 先在 Node.js 20 阶段构建前端,再安装 Python 依赖并生成 openEuler 运行镜像;Redis 镜像在启动时拉取。
src/Dockerfile.openEuler
Ascend 模型采用工作站导出与 ATC 编译、板端加载执行的流程。准备与设备匹配的 CANN 工具链、模型和 tokenizer,按 Ascend 接入指南与 Sidecar 说明生成并部署 .om。标准 seq512 模型与 KV 复用/裁剪模型使用各自的输入输出接口和配置。
终端 A:激活 Python 虚拟环境,启动后端。 首次演示可显式使用 memory 后端,无需 Redis。
PowerShell:
$env:AGENTBUS_BACKEND = "memory" python -m uvicorn app:app --app-dir src/backend --host 127.0.0.1 --port 8008
Linux:
AGENTBUS_BACKEND=memory python -m uvicorn app:app --app-dir src/backend --host 127.0.0.1 --port 8008
终端 B:启动前端。
打开 应急指挥中心。Vite 将 /api 与 /ws 代理到 127.0.0.1:8008。实时城市运行可在 Runtime 主控台选择 mock 模式启动;指挥中心无密钥时可用本地回退完成基础处置演示。
/api
/ws
127.0.0.1:8008
http://127.0.0.1:5173/command.html
http://127.0.0.1:5173/twin.html
http://127.0.0.1:5173/index.html
http://127.0.0.1:5173/experiments.html
http://127.0.0.1:5173/agentbus.html
http://127.0.0.1:5173/evidence.html
http://127.0.0.1:8008/docs
Ctrl+C 停止开发服务。不要用 python -m http.server 直接托管前端源码替代 Vite,Three.js 模块需要构建或开发服务器解析。
Ctrl+C
python -m http.server
保持后端运行,在已激活 Python 环境的另一个终端,从根目录执行:
python -m uvicorn proxy_server:app --app-dir src/frontend --host 127.0.0.1 --port 5173
同源网关读取 src/frontend/dist/,将 /api 和 /ws 转发到后端。先完成前端构建,并停止占用 5173 的 Vite 服务。后端地址变化时配置 BACKEND_ORIGIN 与 BACKEND_WS_ORIGIN。
BACKEND_ORIGIN
BACKEND_WS_ORIGIN
docker compose -f src/docker-compose.openeuler.yml -f src/docker-compose.ports-override.yml up -d --build docker compose -f src/docker-compose.openeuler.yml -f src/docker-compose.ports-override.yml ps docker compose -f src/docker-compose.openeuler.yml -f src/docker-compose.ports-override.yml logs -f city-runtime
同时启动 Redis、后端和构建后的同源前端。启动脚本等待接口就绪并进行五事故链路自检,首次启动需等待。基础 Compose 文件没有宿主端口映射,必须同时加载端口映射文件。 默认前端 5173、后端 8008、Redis 6379;冲突时设置 FRONTEND_PORT、BACKEND_PORT、REDIS_PORT。
FRONTEND_PORT
BACKEND_PORT
REDIS_PORT
访问 http://服务器地址:5173/command.html。映射文件也发布 Redis 6379,远程部署需通过防火墙限制该端口;浏览器只需访问前端入口。停止服务并保留证据数据卷:
http://服务器地址:5173/command.html
docker compose -f src/docker-compose.openeuler.yml -f src/docker-compose.ports-override.yml down
跨进程通信要求后端启动前设置以下变量,且 Redis 可连接。
$env:AGENTBUS_BACKEND = "redis" $env:AGENTBUS_REQUIRE_REDIS = "1" $env:REDIS_URL = "redis://127.0.0.1:6379/0"
export AGENTBUS_BACKEND=redis export AGENTBUS_REQUIRE_REDIS=1 export REDIS_URL=redis://127.0.0.1:6379/0
通过 /api/agentbus/status 确认 connected=true、transport=redis_streams。允许降级时 Redis 不可用会显示 local_fallback,此时仅进程内通信。
/api/agentbus/status
connected=true
transport=redis_streams
local_fallback
真实模型需先准备服务与凭据。实时运行的模型切换和指挥中心 src/backend/configs/command_agents.yaml 是不同入口,应分别检查配置。Ascend 接入示例:
$env:CITYAGENT_LLM_PROVIDER = "ascend" $env:CITYAGENT_LLM_MODEL = "SmolLM2-360M-Instruct-seq512" $env:CITYAGENT_LLM_BASE_URL = "http://192.168.137.2:8000/v1" $env:CITYAGENT_LLM_MAX_CONCURRENCY = "1"
替换为实际板卡地址,重启后端并在实时运行入口启用 LLM。Linux 使用同名变量配合 export。板端模型、ACL、侧车启动及验收见 Ascend 接入指南 和 侧车说明。远端 API 密钥通过环境变量传入,例如 DEEPSEEK_API_KEY。
export
DEEPSEEK_API_KEY
完整 SUMO Runtime 演示:
python src/backend/scripts/run_demo.py --group runtime --seed 1 --out src/backend/results/demo/runtime
要求 SUMO 可用,输出任务、事件和指标记录。--gui 可启用图形界面;无图形环境时保持默认无界面模式。
--gui
无需真实模型的机制调试示例:
python src/experiment/run.py context --incidents 3 --repeats 1 --seeds 1 --no-experiment-llm-api --no-charts --results src/experiment/results_context_debug
正式 all 入口覆盖 os、sched、ablation、resource、fault、acl、llm_core、evidence、context、comm、ckpt,默认包含真实模型闭环。在专用 Linux/cgroup 环境准备好后运行:
all
os
sched
ablation
resource
fault
acl
llm_core
evidence
context
comm
ckpt
cp src/.env.experiments.api.example src/.env.experiments.api # 编辑 src/.env.experiments.api,填写实际 Provider、模型与密钥 sudo bash src/scripts/run_openeuler_cgroup_experiments.sh
默认结果目录为 src/experiment/results_all_api_openeuler_cgroup/,包括 all_summary.json、分实验 JSON/CSV、事件与请求记录。正式脚本使用 privileged、host PID/cgroup 和可写 cgroup 挂载,仅用于专用实验主机或 VM。输出包含分实验指标与真实请求记录。
src/experiment/results_all_api_openeuler_cgroup/
all_summary.json
从根目录执行,先激活 Python 环境并安装测试补充依赖。以下测试无需真实模型密钥;部分使用本地模拟 HTTP 服务,SUMO 集成测试需要仿真工具。
核心快速验证:
python -m pytest tests/backend/cases/test_kernel.py tests/backend/cases/test_agent_os_runtime.py tests/backend/cases/test_multimodal_evidence.py tests/experiment/cases/test_unified_resource_claim.py -q
分模块完整测试:
python -m pytest tests/backend/cases -q python -m pytest tests/experiment/cases -q python -m pytest tests/benchmark -q
覆盖 API 合约、Harness 校验、抢占、子进程撤销、Context、证据、SUMO 对接和实验指标契约。真实跨进程链路使用下文 Redis 测试入口验证。
cd src/frontend npm test npm run build cd ../..
覆盖几何、车辆模型与控制台编码等逻辑,构建验证页面入口和模块依赖。浏览器链路与板端请求通过各自运行入口验证。
curl http://127.0.0.1:8008/api/health curl http://127.0.0.1:5173/api/command-center/options python src/scripts/command_demo_smoke.py --base http://127.0.0.1:8008 --timeout 190
PowerShell 可用 curl.exe 避免旧版本命令别名差异。五事故脚本检查处置、抢占与恢复、事件及三维时间线。强制 Redis 验证:
curl.exe
python src/backend/scripts/run_redis_agentbus_smoke.py
运行前设置 AGENTBUS_BACKEND=redis、AGENTBUS_REQUIRE_REDIS=1 和实际 REDIS_URL。
AGENTBUS_BACKEND=redis
AGENTBUS_REQUIRE_REDIS=1
python src/benchmark/run_benchmark.py python src/benchmark/run_benchmark.py --case hidden_congestion_reroute python src/benchmark/run_benchmark.py --case mass_casualty_bed_allocation
输出 final_state、score、passed,按改道、交通控制、分诊、床位分配和交接等状态评分。上述两个样本用于快速验证流程状态;真实模型决策评测见 Benchmark 文档 的独立决策与医疗入口。
final_state
score
passed
先完成 板端接入步骤,保持 Sidecar 与主机后端运行,再按板端指南执行标准 Profile 和多场景请求。检查服务返回、模型哈希、Token 用量、NPU 计时、parser/validator 结果,以及主机任务的授权动作和完成状态。板端 HTTP 协议测试与真实 NPU 请求分别记录。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
AgentOS Runtime
面向多智能体持续执行的操作系统级用户态运行时,统一管理任务、模型请求、上下文、工具、通信与系统资源。
项目简介
AgentOS Runtime 面向长期、并发和事件驱动的多智能体应用,在应用与模型、工具、消息中间件及操作系统资源之间建立统一执行控制层。系统以分层执行对象承载运行过程,通过事件驱动 Dynamic DAG、OS-PARS 调度、异构资源租约、版本化共享状态与局部故障恢复,支持复杂任务的持续协作。
项目基于 openEuler 开发与验证,以 Mini Smart City 城市应急处置作为综合应用场景,扩展医疗报告理解、分诊与车辆派遣,并完成 主机 Runtime + Ascend 310B4 推理侧车的真实 NPU 调用链路。模型负责受限观察下的语义决策,规则执行器与受保护工具负责确定性控制,决策经过解析、业务约束校验和授权后转化为动作。
OS-PARS 全称为 OS-aware Priority And Resource Scheduler,即操作系统感知的优先级与资源协同调度算法。Agent Kernel 是运行于现有操作系统之上的用户态执行控制层。
核心特点
主要验证结果
各行对应独立实验负载。完整协议、对照与分析见 技术文档。
目录
快速开始
从项目根目录执行。首次使用建议先启动本地基础演示,再按需要接入 SUMO、Redis 或真实模型服务。
src/frontend/执行npm ci。应用场景
运行界面示例:左侧为 Runtime 主控台,右侧为三维城市视图。
主要功能与系统架构
src/backend/runtime_mock/agents/、src/backend/runtime_mock/core/agent_spec.pysrc/backend/runtime_mock/core/kernel/src/backend/runtime_mock/core/kernel/resource_manager.pysrc/backend/runtime_mock/llm/、src/backend/runtime_mock/agents/prompt_optimization.pysrc/backend/runtime_mock/core/context/src/backend/runtime_mock/core/bus/src/backend/runtime_mock/core/media/src/backend/runtime_mock/core/kernel/fault_manager.py、src/backend/runtime_mock/core/kernel/observability.pysrc/backend/city_bridge/、src/backend/app.py、src/frontend/应用层提出任务与能力请求,运行时负责调度和服务准入,底层提供实际模型、消息、存储与系统资源。
城市运行时包含 16 个执行角色:EmergencyDispatch、Ambulance、PublicAdvisory 和 OperatorBriefing 使用模型 Harness,其余 12 个执行确定性规则。医疗扩展另注册 MedicalTriage 与 MedicalVehicle;CameraCaptureService 是独立证据采集服务。PublicAdvisory 与 OperatorBriefing 生成待审核草稿。不同模式下的模型调用范围由配置决定,注册角色数不等于真实模型请求数。
典型流程:外部事件 → 动态任务图 → OS-PARS 调度与资源准入 → 受控模型/工具调用 → Context 提交与消息发布 → 结果观测或异常恢复。
Ascend 310B4 板端部署
主机与板端分工
采用 主机负责执行控制,板端负责常驻推理的部署方式。主机运行 Dynamic DAG、OS-PARS、Resource Manager、Context Store、AgentBus 和模型输出校验;Ascend 310B4 通过轻量 HTTP Sidecar 提供推理服务,复用常驻的 ACL 引擎与
.om模型。flowchart TD A[Agent Task 与受限观察] --> B[主机 Runtime] B --> C[Prompt Projection 与序列预算] C --> D[LLMCoreManager 请求准入] D --> E[板端 HTTP Sidecar] E --> F[AscendCL 与常驻 OM 模型] F --> G[输出 usage 与设备计时] G --> H[主机解析与业务约束校验] H --> I[授权动作与状态提交] H --> J[受控回退]板端承担模型加载、ACL 执行和设备计时,返回模型输出及 Token 用量;主机管理请求优先级、执行租约和结果采纳。逻辑取消撤销旧输出的提交资格,在途租约保留至后端结束确认,使任务状态与设备执行状态保持清晰关联。
部署环境与模型
smollm2_360m_origin_seq512.om,原始 SmolLM2-360M-Instructprovider=ascend接入CITYAGENT_LLM_MAX_CONCURRENCY=1OMP_NUM_THREADS=1常驻 seq512 模型实测 NPU 内存使用约 2185—2227 MB,设备总容量 3513 MB。模型加载耗时约 9.163 s;常驻服务可连续处理请求,减少重复加载。14 个标准 Profile 均完成真实 NPU 推理,其中 Police Profile 直接通过解析与校验,其余 13 个进入受控回退;另有 3 场景共 42 次真实请求,记录模型哈希、usage 与设备计时。
接入步骤
.om、对应 tokenizer 与配置部署到板端。将地址替换为实际板卡地址。Windows PowerShell 使用下文对应的
$env:配置。随后启动主机后端,在实时运行入口启用 LLM;指挥中心的角色模型配置位于src/backend/configs/command_agents.yaml。板端资源优化
医疗 LoRA 360M 的配对实验使用 CUDA 后端;板端标准 Profile 使用原始 360M OM。两种部署分别验证领域决策与资源受限推理接入。
项目结构
runtime_mock/是历史目录名,包含当前运行时实现,覆盖任务调度、资源管理、上下文、通信与故障恢复。结果通常写入src/backend/results/或src/experiment/results*/;模型权重、前端依赖及构建产物不作为源码提交。系统环境
正式机制实验使用 Python 3.11.6。openEuler 容器提供运行用户空间,底层资源控制由宿主内核执行。浏览器需支持 WebSocket 与 WebGL,三维视图需要可用图形加速。
依赖要求
src/backend/requirements.txtpython -m pip install httpxsrc/frontend/package.json、package-lock.json;使用npm cisumo、netconvert可从PATH调用;按系统安装方式配置SUMO_HOME与 TraCIREDIS_URL.om、对应 tokenizer/config 与 CANN/ACL 环境首次安装与容器构建需访问相应镜像、Python 和 npm 软件源。基础演示可独立启动;SUMO、Redis、CUDA 与 Ascend 根据所选运行方式准备。
安装方法
以下命令从项目根目录执行,除非代码块明确切换目录。推荐使用虚拟环境。
1. 创建 Python 环境
Windows PowerShell:
Linux / openEuler:
若系统未提供 Python、pip 或 venv,先通过系统包管理器安装;从源码构建 Python 扩展还需要编译工具和 Python 开发头文件。
2. 安装前端依赖
npm ci按锁文件安装。PowerShell 若阻止npm.ps1,将命令中的npm换为npm.cmd。3. 检查可选服务与仿真工具
命令中心基础演示不强制要求 SUMO,实时城市仿真与 SUMO 集成测试需要以上工具。跨进程通信可使用已有 Redis 服务,或安装 Docker 后执行:
src/.env.example是配置参考。**本地 Python/Vite 启动不会自动加载src/.env**,请在启动后端的终端设置环境变量;Compose 可读取src/.env并替换其已声明变量。构建方法
后端准备
后端以 Python 源码运行,完成虚拟环境与
requirements.txt安装即可启动;入口为src/backend/app.py,启动命令见 运行方法。前端构建
产物位于
src/frontend/dist/,包含command.html、twin.html、index.html、experiments.html、agentbus.html和evidence.html。后端为 Python 源码服务,无需单独编译。SUMO 路网构建
项目已包含
src/backend/city_bridge/sumo_assets/maps/city.net.xml。修改节点、道路或连接定义后执行:脚本调用
netconvert更新路网与信号文件,一般首次演示无需重新生成。openEuler 镜像构建
src/Dockerfile.openEuler先在 Node.js 20 阶段构建前端,再安装 Python 依赖并生成 openEuler 运行镜像;Redis 镜像在启动时拉取。板端模型构建
Ascend 模型采用工作站导出与 ATC 编译、板端加载执行的流程。准备与设备匹配的 CANN 工具链、模型和 tokenizer,按 Ascend 接入指南与 Sidecar 说明生成并部署
.om。标准 seq512 模型与 KV 复用/裁剪模型使用各自的输入输出接口和配置。运行方法
方式一 本地开发
终端 A:激活 Python 虚拟环境,启动后端。 首次演示可显式使用 memory 后端,无需 Redis。
PowerShell:
Linux:
终端 B:启动前端。
打开 应急指挥中心。Vite 将
/api与/ws代理到127.0.0.1:8008。实时城市运行可在 Runtime 主控台选择 mock 模式启动;指挥中心无密钥时可用本地回退完成基础处置演示。http://127.0.0.1:5173/command.htmlhttp://127.0.0.1:5173/twin.htmlhttp://127.0.0.1:5173/index.htmlhttp://127.0.0.1:5173/experiments.htmlhttp://127.0.0.1:5173/agentbus.htmlhttp://127.0.0.1:5173/evidence.htmlhttp://127.0.0.1:8008/docsCtrl+C停止开发服务。不要用python -m http.server直接托管前端源码替代 Vite,Three.js 模块需要构建或开发服务器解析。方式二 运行构建后的前端
保持后端运行,在已激活 Python 环境的另一个终端,从根目录执行:
同源网关读取
src/frontend/dist/,将/api和/ws转发到后端。先完成前端构建,并停止占用 5173 的 Vite 服务。后端地址变化时配置BACKEND_ORIGIN与BACKEND_WS_ORIGIN。方式三 openEuler 容器部署
同时启动 Redis、后端和构建后的同源前端。启动脚本等待接口就绪并进行五事故链路自检,首次启动需等待。基础 Compose 文件没有宿主端口映射,必须同时加载端口映射文件。 默认前端 5173、后端 8008、Redis 6379;冲突时设置
FRONTEND_PORT、BACKEND_PORT、REDIS_PORT。访问
http://服务器地址:5173/command.html。映射文件也发布 Redis 6379,远程部署需通过防火墙限制该端口;浏览器只需访问前端入口。停止服务并保留证据数据卷:Redis 与真实模型配置
跨进程通信要求后端启动前设置以下变量,且 Redis 可连接。
PowerShell:
Linux:
通过
/api/agentbus/status确认connected=true、transport=redis_streams。允许降级时 Redis 不可用会显示local_fallback,此时仅进程内通信。真实模型需先准备服务与凭据。实时运行的模型切换和指挥中心
src/backend/configs/command_agents.yaml是不同入口,应分别检查配置。Ascend 接入示例:替换为实际板卡地址,重启后端并在实时运行入口启用 LLM。Linux 使用同名变量配合
export。板端模型、ACL、侧车启动及验收见 Ascend 接入指南 和 侧车说明。远端 API 密钥通过环境变量传入,例如DEEPSEEK_API_KEY。命令行仿真与实验
完整 SUMO Runtime 演示:
要求 SUMO 可用,输出任务、事件和指标记录。
--gui可启用图形界面;无图形环境时保持默认无界面模式。无需真实模型的机制调试示例:
正式
all入口覆盖os、sched、ablation、resource、fault、acl、llm_core、evidence、context、comm、ckpt,默认包含真实模型闭环。在专用 Linux/cgroup 环境准备好后运行:默认结果目录为
src/experiment/results_all_api_openeuler_cgroup/,包括all_summary.json、分实验 JSON/CSV、事件与请求记录。正式脚本使用 privileged、host PID/cgroup 和可写 cgroup 挂载,仅用于专用实验主机或 VM。输出包含分实验指标与真实请求记录。测试方法
npm ci从根目录执行,先激活 Python 环境并安装测试补充依赖。以下测试无需真实模型密钥;部分使用本地模拟 HTTP 服务,SUMO 集成测试需要仿真工具。
Python 测试
核心快速验证:
分模块完整测试:
覆盖 API 合约、Harness 校验、抢占、子进程撤销、Context、证据、SUMO 对接和实验指标契约。真实跨进程链路使用下文 Redis 测试入口验证。
前端测试与构建检查
覆盖几何、车辆模型与控制台编码等逻辑,构建验证页面入口和模块依赖。浏览器链路与板端请求通过各自运行入口验证。
启动后的接口与链路测试
PowerShell 可用
curl.exe避免旧版本命令别名差异。五事故脚本检查处置、抢占与恢复、事件及三维时间线。强制 Redis 验证:运行前设置
AGENTBUS_BACKEND=redis、AGENTBUS_REQUIRE_REDIS=1和实际REDIS_URL。最终状态 Benchmark
输出
final_state、score、passed,按改道、交通控制、分诊、床位分配和交接等状态评分。上述两个样本用于快速验证流程状态;真实模型决策评测见 Benchmark 文档 的独立决策与医疗入口。Ascend 真实推理测试
先完成 板端接入步骤,保持 Sidecar 与主机后端运行,再按板端指南执行标准 Profile 和多场景请求。检查服务返回、模型哈希、Token 用量、NPU 计时、parser/validator 结果,以及主机任务的授权动作和完成状态。板端 HTTP 协议测试与真实 NPU 请求分别记录。
已知限制
技术资料