多 Agent 协作运行时——脚手架 + 运行时观察台(spec v6 真协作 / 多 LLM provider / GSAP 仪表盘)
Project description
multi_agent
多 Agent 协作系统。架构按 spec v5(v4 留作初心档案)。
当前状态
主线 plan §1-§5 + ABC 完整 Harness 体系 + Planner Agent(自然语言 → DAG)+ v6 真协作(多轮 transcript + 节点级接力)+ 蜡笔小新风 UI(GSAP + rough.js + dagre)全部交付,268 测试全过(~25s)。
-
阶段 1(单 Agent + 记忆库):✅
storage/transcript_store.pySQLite 对话原文(async /asyncio.to_thread)storage/memory_store.pyChroma per-user collection +bge-small-zh-v1.5/ 512 维 + status / cross_task 过滤worker/sandbox.pySandboxBackend抽象 +LocalBackendworker/agent.pyLLMClient协议 +Agent类- 召回基线 P@5 = 1.00 / MRR = 0.90(45 query × 20 docs)
-
阶段 2(状态库 + 回写原子性 + 崩溃恢复):✅
storage/state_store.pytasks + dag_nodes(字段一次到位)+ WALworker/writeback.pyv2 spec §6.2 三步顺序worker/heartbeat.py30s 心跳orchestrator/recovery.pyspec §6.3 三类扫描 + 幂等orchestrator/scheduler.py串行拓扑调度
-
阶段 3(双 Agent + 精确接力):✅
orchestrator/context_packer.py早期版(task.title + 接力原文 +input_memory_ids精确产出)- 对比实验(
recall-drift):id 取 100%;语义召回 top-1 仅 29%(7 query 5 飘);top-3 = 86%。验证 spec §3.3 「P0 级」判断
-
阶段 4a(DAG 编排 + 失败模型 + 并发):✅
orchestrator/dag_loader.pyJSON 加载 + 校验 + 实例化orchestrator/failure_handler.py三 policy + 重试(耗尽前清 pending)- scheduler 重写为
asyncio.Semaphore(MAX_CONCURRENT_WORKERS=5)并发;fail_fast 取消信号 + 5s 超时改 destroy - memory_store 加 collection 缓存 + Lock 修并发 chroma 竞态
-
阶段 4b(E2B 沙箱后端可插拔):✅
worker/sandbox_e2b.pyE2BBackend,6 个方法对齐 e2b 官方AsyncSandboxworker/sandbox.py加make_sandbox()工厂;SANDBOX_BACKEND=local|e2b切换;业务代码零改动
-
阶段 4c(context_packer 完整版 + token budget):✅
- 四个来源齐全(新增语义补充检索)
- spec §8.2 query 构造:
title + sub_task + 上游摘要(≤50字),≤ 200 token 阶梯截断 - spec §8.2 token budget ≤ 2K,超出按 distance 从大到小裁;底线保 task.title + sub_task
- spec §8.3
memory_level排序:task_conclusion 优先 - 实测 spec §5.4 6 节点 DAG 每节点 context 137-200 token,远低 2K
-
阶段 5(运行时仪表盘):✅
dag_nodes扩model_name/tools列;DAG JSON 节点可声明orchestrator/api.pyFastAPI 只读 API(走state_store不直连 sqlite3)dashboard/index.htmlCytoscape.js + dagre 自动布局;1.5s 轮询;节点详情卡片
-
ABC 完整 Agent Harness 体系:✅
- A 段(commit
8f262a6):AgentHarness {model, provider, system_prompt, tools, skills, mcp_servers}schema 一次到位;5 家 provider 切换(anthropic / openai / deepseek / openrouter / ollama);dashboard 展示完整 harness - B 段(commit
f18565a):5 个内置 tool(read_file / write_file / exec_command / run_code / web_search)走 SandboxBackend;Anthropic + OpenAI 双家 tool_use loop(max_turns 保护、tool_result 回填、错误记录) - C 段(commit
0adb887):SkillLoader加载 markdown 指令包(项目skills/+ 用户~/.claude/skills/双查找);MCPClientstdio JSON-RPC 2.0;MCP tools 自动 prefix 合入 ToolRegistry;单 server 失败容忍
- A 段(commit
-
Planner Agent(spec v5 §9.7):✅
orchestrator/planner.py:把自然语言目标转成合规 DAG JSON- system prompt 注入 schema + 可用 providers/tools/skills;输出严格 parse_dag 校验;不合规把错误回灌重试 ≤2 次
- 默认走
deepseek-chat(DAG 设计不需要 opus,便宜大碗) - CLI
plan-task --goal "...":plan → 写 data/planned_.json → 直接 run-task 一条龙 - 配套修了 4 个真实跑端到端发现的 bug(详见 spec v5 §14.3 后段)
运行
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env # 按需填 ANTHROPIC_API_KEY / DEEPSEEK_API_KEY / E2B_API_KEY ...
# `python -m orchestrator.main` 启动时会自动加载 .env(已 export 的优先级更高)
# === mock 模式(不打外网;CI / 自测)===
python -m orchestrator.main demo-phase1 --mock --reset
python -m orchestrator.main demo-phase2 --mock --reset
python -m orchestrator.main demo-phase3 --mock --reset
python -m orchestrator.main demo-phase4a --mock --reset
python -m orchestrator.main demo-phase4a --mock --reset --fail-b # 演示 fail_skip
python -m orchestrator.main run-task --dag dags/research_report.json \
--title "选型决策任务" --mock --reset
python -m orchestrator.main run-task --dag dags/research_report.json \
--title "..." --handoff-conv conv_abc --handoff-range 1,5 --mock
# === Planner Agent:自然语言 → DAG 一条龙(spec v5 §9.7)===
python -m orchestrator.main plan-task --goal "调研 3 个国内开源 RAG 框架并选型" \
--reset # 真实模式调 LLM 生成 DAG
python -m orchestrator.main plan-task --goal "随便什么" --mock --reset
# mock 模式用 fixture DAG(不调 LLM)
# === 真实 LLM 模式 ===
export ANTHROPIC_API_KEY=... # 或换 LLM_PROVIDER=deepseek + DEEPSEEK_API_KEY
python -m orchestrator.main demo-phase4a --reset
# === 切换沙箱后端 ===
export SANDBOX_BACKEND=e2b
export E2B_API_KEY=... # 从 https://e2b.dev/dashboard 拿
python -m orchestrator.main demo-phase4a --reset # 业务代码零改动
# === 仪表盘(先跑 run-task 落数据,再起服务)===
python -m orchestrator.main run-task --dag dags/research_report.json \
--title "演示任务" --mock --reset
python -m orchestrator.main dashboard-serve # http://127.0.0.1:8000
# === 评估 ===
python -m orchestrator.main recall-baseline # 1.11 基线(query 直搜)
python -m orchestrator.main recall-baseline-v2 # 4c.5 packer 路径
python -m orchestrator.main recall-drift # 3.6 id 取 vs 语义召回
# === 测试 ===
pytest -v
文档
multi-agent-architecture-spec-v6.md— 当前架构实施手册(推荐先读,含 v6 真协作)multi-agent-architecture-spec-v5.md— ABC 段实施手册(v6 之前的最后稳定版)multi-agent-architecture-spec-v4.md— 初心档案(不再更新)project-development-plan-v1.md— 6 阶段开发计划runtime-dashboard-prototype-v2.html— 阶段 5 之前的原型(已被真实 dashboard 替代)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multi_agent_tool-0.6.0.tar.gz.
File metadata
- Download URL: multi_agent_tool-0.6.0.tar.gz
- Upload date:
- Size: 117.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a92f4125e86c516469fd0f0b6e849ec3c9bc67d95ba1069f3c907f93aff18e13
|
|
| MD5 |
2db8e71ab131c0cb5edc1b40bcd4b815
|
|
| BLAKE2b-256 |
133e497ad10a3c3bfdc2722c40995c09850c33dd76cd87d7e489639ab06fdfa5
|
File details
Details for the file multi_agent_tool-0.6.0-py3-none-any.whl.
File metadata
- Download URL: multi_agent_tool-0.6.0-py3-none-any.whl
- Upload date:
- Size: 109.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86db1d8cc59b99cfa43ae6f9df705e027e9b15f28f6d7b2d3534cfd06ff1bc0a
|
|
| MD5 |
e50e6f588ea9ad30fcb5b4cb42e16e51
|
|
| BLAKE2b-256 |
02a22fc5774ea3e8f7e1fbf826ba7210635d8f91c62450cc0019f7047f36cec9
|