用 Go 从零实现的 Agent 执行引擎: DAG 状态机 + 事件溯源持久化 + 双路径工具沙箱 + MCP 协议 + 上下文管理。
定位: 以工程深度自证 — 崩溃恢复、幂等、安全边界,每个声称都有实测数据和可复现的测试。
Agent 执行引擎 (orbit-agent)
├── internal/core DAG 引擎: 事件溯源/调度/重放/HITL/动态追加/幂等/重试补偿
├── internal/store 事件存储: Memory(测试) + Redis Stream
├── internal/sandbox 双路径沙箱: wazero(WASM,12.7ms 稳态) + 容器(cgroup+seccomp)
├── internal/mcp MCP 自实现: JSON-RPC 2.0 + stdio/Streamable HTTP + client/server
├── internal/memory Context 管理: 分层预算+摘要降级(tiktoken-go) + Qdrant 语义记忆
├── internal/llm DeepSeek client
├── internal/agent OJ 自动解题 demo: Planner/Executor/CodeVerifier
├── cmd/agentd CLI: run/recover/resume/inspect
├── cmd/mcpd MCP server 入口
├── cmd/agentdemo OJ 解题 demo 入口
└── benchmarks/ WASM vs 容器冷启动、重放吞吐、token 节省率
- 持久化执行: 节点执行事件溯源至 Redis Stream,进程崩溃后重放日志重建状态并从断点继续,副作用以幂等键去重
- 动态 DAG: 运行中追加节点 = 写事件;ReAct 循环建模为动态追加观察/思考/行动节点
- Human-in-the-loop: 节点挂起 → 状态持久化 → CLI approve / webhook 恢复,重复审批幂等
- 运行时中止: 工作流级
ABORT_REQUESTED事件 + 投影推导节点级 ABORTED;graceful(在途执行跑完)、补偿照常触发、幂等 ——cmd/agentopsd提供 HTTP 控制面(register/append/resume/abort/status) - 双路径沙箱: WASM 纯计算工具(wazero,无 syscall 面,编译缓存预热后 12.7ms/次);Python/Bash 走 cgroup+namespace+seccomp 容器沙箱(native 档 50-200ms)
- MCP 自实现: JSON-RPC 2.0 + stdio/Streamable HTTP,与官方 SDK 双向互操作测试
- OJ 自动解题 demo: Planner 拆解 → Executor 写码 → 沙箱运行 → Verifier 比对,失败反馈后 ReAct 重试 = 动态追加 DAG 节点,崩溃后 Recover 可续解
go build ./...
go test ./... -race
# 运行示例工作流
go run ./cmd/agentd run --workflow demo/diamond
# 观察 HITL 挂起 → 审批
go run ./cmd/agentd resume <wf-id> <node-id> approve
# 模拟崩溃后恢复
go run ./cmd/agentd recover <wf-id>
# OJ 自动解题 demo(真实 DeepSeek API)
export DEEPSEEK_API_KEY=sk-...
go run ./cmd/agentdemo # 全 5 道题
go run ./cmd/agentdemo --id p1 # 单题- 设计文档 — 架构、事件模型、调度/重放协议、安全边界、Context 分层预算、Abort、benchmark 实测
本仓库的引擎能力作为"手"被消费: 见同级目录 agentops/ ——
Python 智能面(告警接收 → LangGraph 规划 → HITL 审批 → 报告)经
cmd/agentopsd 控制面(register/append/resume/abort/status)+ MCP +
Redis Stream 三接口驱动本引擎。共享契约在 agentops docs/interface.md。
| 指标 | 数据 |
|---|---|
| 重放 RTO(300 事件 / 3000 事件) | 83µs / 935µs |
| 调度吞吐(1000 节点串联 DAG) | ~3000 nodes/s |
| WASM 稳态执行(缓存命中,无 syscall 面) | 12.7ms/次 |
| 容器沙箱(本机 plain 档 / native 档典型) | 13.2ms / 50-200ms |
| Context 剪枝 token 节省率(60 轮 × 12KB) | 98.7% |