Files
projectAIpopular/实现方案_v2_端云协同编程智能体系统.md
tzt ce0f6170d3 chore: T-P-1 工作区收敛——并行会话成果与历史未入库文件整理入库
- 入库历史遗漏源码/测试:router_system 9 模块(agent/executors/inference/knowledge/
  memory/planner/skills/trace)、tests 11 个测试文件、config/knowledge 领域知识
- 入库根目录方案文档(v2/v3/可行性×2)、references 文献(arxiv 14-18/cnki_open/
  参考文献清单)、research 论文素材(routerarena/paper/中文文献 PDF)
- 前端构建产物刷新(新 hash);webapp 误写文档删除
- gitignore 增补:deepseek-harness、research/_refs、.mimosa/.zcode、网关日志/pid、
  临时调试脚本、tests/e2e/node_modules、AI代理功能开发/prefix
- 基线确认:318 passed
2026-09-05 08:28:25 +08:00

445 lines
28 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案 v2:端云协同编程智能体系统(Agent 交接执行版)
> 编写日期:2026-08-30
> 状态:**当前权威规划**。方向上取代 v1《实现方案_多专业小模型+路由模型.md》与《任务拆解与执行计划.md》的路线;
> v1 的 L0 专家系统内核**不删除**,降级为离线降级模式与可解释基线(见 5.4)。
> 预期读者:负责实现的 AI Agent 或开发者。本文自包含。实现前必读:第 3 节(不得推翻的设计决策)、第 8 节(工程规约)。
---
## 0. 一页速览
**目标**:把仓库现有的 mock 原型升级为可安装、可演示、可量化的真实系统。
- **大模型(API,默认 DeepSeek)**:只做三件事——开局任务分析(brief)、中途疑难决策(decide)、最终审校(final review)。每次输入压缩到约 1K token 量级。
- **小模型(本地 llama.cpp,捆绑分发)**:默认 Qwen3.5-4B(Q4_K_M),负责实现与自验证。
- **协作媒介**:「交流文本」——一份 schema 约束的结构化 JSON 共享工作区(第 4 节)。两模型互不共享内部状态,只通过它交接(类比前后端通过 API 契约协作)。
- **人工检验**:第三个协作者,复用同一协议,异步队列,不阻塞响应路径。
**一句话流程**
用户 query →(快路径)小模型直答+自验证通过即返回 → 否则大模型写 brief → 小模型逐步实现(代码/文件类任务经受限工具集直接读写工作目录、运行命令与测试,类主流编码 agent 循环)+自验证,失败自修 ≤2 次后写 issue → 大模型按 issue 决策(或兜底代做)→ 循环至满足验收标准 → 大模型终审 → 交付 / 人工检验队列。
**系统能力定位**:编程智能体(Coding Agent)——代码/文件类任务由 Worker 在独立工作目录中以受限工具集(read/write/edit/run)完成,产物即文件;问答类请求走快路径直答(不启用工具)。
**论文题目(已定)**:《基于端云协同的编程智能体系统设计与实现》
Design and Implementation of a Programming Agent System Based on Device-Cloud Collaboration
关键词:端云协同;编程智能体;大小模型协同;工具调用;级联升级
**北极星指标**:在端到端质量不低于纯小模型直答的前提下,大模型 token 消耗相对"全量上下文"方案下降 ≥80%(可实测,见第 9 节 E1)。
**核心经济学原则**:贵的一方(API)少读少写,便宜的一方(本地)多读多干。
---
## 1. 背景与现状
### 1.1 为什么从 v1 转向(决策记录)
1. **领域分类路线确认放弃**。规则分类器在 9 域平衡集上仅 74.4%、68.9% 请求触发升级
(实测见 `research/routerarena/01_results_and_gap_analysis.md`);原计划的"微调分类器"依赖训练数据与训练环境,不符合当前约束。
2. **v1 执行层是模板填充,系统实际不能回答问题**——必须接入真实模型。
3. **用户新约束**:本地运行时的长上下文能力、参数量尽可能少、长上下文下低内存占用、
模型切换间最大 token 节约。由此设计出"交流文本"协议(第 4 节)。
### 1.2 现有资产盘点
| 文件/模块 | 处置 | 说明 |
|---|---|---|
| `router_system/memory.py`WorkingMemory/TaskGraph | **改造** | 黑板思想升级为持久化 workspace;TaskGraph 的依赖处理思路可参考,但 plan 改为简单列表+deps |
| `router_system/experts.py`APIExpert | **复用** | OpenAI 兼容客户端,llama-server 与 DeepSeek 都能接;需补超时、token 计量、messages 参数化 |
| `router_system/fallback.py`APIFallback | **复用** | 大模型兜底直连可用 |
| `router_system/judge.py`RuleJudge 的 facts 核对) | **部分复用** | facts 对照逻辑迁入接地验证(5.1 T5);LLMJudge 退役 |
| `router_system/trace.py`TraceStore | **复用** | 协作轨迹落点,每回合写入 |
| `router_system/cache.py` | **复用** | 快路径结果缓存 |
| `router_system/classifier.py``planner.py``config.yaml``domain_groups` | **退役出主链路** | 保留在 legacy 路由(`POST /chat/legacy`)与既有测试中 |
| `router_system/knowledge.py` + `config/knowledge/*.yaml` | **复用** | facts 表转作验证接地素材(不再用于分类) |
| `gateway/api.py` | **扩展** | 新增 `/runs``/review` 端点;`/chat` 切到新管线 |
| `scripts/eval.py``scripts/serve.py``scripts/demo.py` | **扩展/新增** | 新增 `scripts/setup_runtime.py`(下载运行时与模型)、`scripts/bench_tokens.py`(实验) |
| `research/routerarena/*``research/2026_papers_survey.md` | **保留** | 评测方法学与文献引用来源 |
| v1 测试套件(126 项) | **必须保持全绿** | legacy 路由不回归(见 D10 |
---
## 2. 架构总览
```
用户 query
[快路径] Worker 小模型直答 + 自验证通过? ──是──▶ 直接返回(约 40-50% 请求)
│ 否(或自评不确定)
[Architect·API·一次] 任务分析 → 写 交流文本.briefgoal/constraints/acceptance/plan/tags
┌──────────── 协作循环(护栏内,见 D6)────────────┐
│ [Worker·本地] 读 brief+当前 step 相关上下文 │
│ → 实现(写工件 artifacts/
│ → 自验证(接地优先:跑代码/facts 对照/结构检查) │
│ → 通过:写 progress;失败:自修 ≤2 次 │
│ → 仍失败:写 issue 条目(增量、带锚点) │
│ [Architect·API·按需] 只读 issues+锚点片段渲染 │
│ → 写 decisions / 修订 plan / 兜底代做该 step │
└──────────────────────────────────────────────┘
│ 所有 step done
[Architect·API·一次] 终审(读 archive 摘要+成品关键段)→ done / 打回修正
交付响应 + 入人工检验队列(抽样 / 强制规则:brief.tags 含 safety
```
组件与职责:
| 组件 | 运行位置 | 职责 |
|---|---|---|
| `CollaborativePipeline`(编排) | 本进程 | 快路径判定、循环控制、预算熔断、状态机推进 |
| `ArchitectClient`(大模型) | DeepSeek API | brief / decide / final_review,全部 JSON Schema 约束输出 |
| `WorkerLoop`(小模型) | llama-server 子进程 | 工具化实现(受限工具集操控工作目录)、自验证、自修、写 progress/issue |
| `Workspace`(交流文本) | 磁盘 JSON | 唯一共享状态,schema 校验,锚点寻址,rollup 压缩 |
| `LlamaServerManager`(运维) | 本进程 | 子进程启停、健康检查、崩溃重启、三档硬件模板 |
| `ReviewQueue`(人工检验) | SQLite | 异步队列、审核端点、修正数据留存 |
---
## 3. 关键设计决策(实现时**不得擅自推翻**)
- **D1** llama.cpp 只捆绑上游官方 release 二进制(锁版本,放 `bin/`gitignore),**禁止修改 llama.cpp 源码或自行编译**。
- **D2** 交流文本是**单一 JSON 文档**(`runs/<request_id>/workspace.json`),brief 写入后不可变且恒定位于文档前部(prefix cache 友好);所有写入必须通过 schema 校验。
- **D3** 领域分类器退役出主链路;入口默认**快路径**(小模型先试,省 API 钱),brief 中的 `tags` 仅用于安全标记与验证接地,不做路由。
- **D4** 验证分层优先级:**可执行验证(跑代码/跑测试)> facts 对照 > 结构检查 > 模型自由判断(最后手段)**。
- **D5** 单 llama-server 实例单模型;默认 Qwen3.5-4B Q4_K_M;三档硬件模板(6.2);验证器异构(换载 GLM 等)只作为**可选扩展**,MVP 不做。
- **D6** 预算护栏硬熔断:`rounds_cap`(协作循环回合上限)、`api_token_cap`(API token 上限)任一触顶即退出循环;熔断行为 = Architect 兜底代做(有 key)或本地降级提示(无 key)。
- **D7** Architect 的输入**永不包含工件全文**,只含 meta+issues+decisions+锚点片段,渲染目标 ≤1200 token(`Workspace.render_for_architect`)。
- **D8** Windows 优先;核心包 `router_system/` 保持零第三方依赖(纯标准库);运维层/网关可用 httpx、fastapi、pydantic(均已在 requirements.txt)。
- **D9** 所有 LLM 结构化输出必须 JSON Schema 约束:llama-server 用 `response_format: json_schema`(或 GBNF),DeepSeek 用 `response_format: {"type": "json_object"}` + prompt 内嵌 schema;解析失败重试一次,仍失败走降级路径,禁止带病继续。
- **D10** v1 的 126 项测试保持全绿;legacy 路由(`POST /chat/legacy`)行为不变,保证离线可跑、测试封闭。
- **D11** 新模块的单元测试必须封闭可跑:API 调用用 `httpx.MockTransport` 注入假响应,**不依赖**真实 llama-server 或 API key。
- **D12** Worker 工具调用必须受限:工具集固定为 list/read/write/edit/run 五种;作用域仅限 `runs/<id>/` 工作目录内;每 step 工具调用次数上限(默认 20);run 类命令强制超时并回收子进程;所有调用(含参数摘要与退出码)入 trace。Windows 沙箱以"目录限制+超时+进程回收"为准,不承诺禁网(作为 limitation 写明)。
---
## 4. 交流文本协议规范
### 4.1 存储布局
```
runs/<request_id>/
├── workspace.json # 交流文本本体(唯一共享状态)
└── artifacts/ # Worker 工作目录:工具调用的作用域(实现产物即文件)
├── s1_main.py
└── s2_tests.py
```
锚点寻址:`a://s2_tests.py#L12-18`,目标即工作目录内文件(Worker 用工具写入、Architect 按锚点取片段,编排层每个 issue 最多附带 30 行)。
### 4.2 Workspace JSON Schema
实现为 `router_system/workspace.py` 内嵌常量 `WORKSPACE_SCHEMA`(draft-07),要点如下(字段长度上限同时是 rollup 依据):
```jsonc
{
"version": "1.0",
"request_id": "hex12",
"query": "用户原始需求(写入后不可变)",
"meta": {
"status": "draft|in_progress|reviewing|escalated|done|failed",
"round": 0,
"budget": {"api_input_tokens": 0, "api_output_tokens": 0,
"api_token_cap": 8000, "rounds_cap": 6}
},
"brief": { // Architect 写一次后锁定
"goal": "≤500字",
"constraints": ["≤8条"],
"tags": ["code|math|legal|medical|finance|life|education|general|safety"],
"acceptance": [{"id": "a1", "check": "验收标准描述", "machine_checkable": true}],
"plan": [{"id": "s1", "task": "≤300字", "deps": ["s0"], "done_criteria": "可观察判据"}] // ≤5 步
},
"progress": [ {"step": "s1", "status": "done|failed|blocked",
"summary": "≤200字", "artifact": "a://s1_main.py"} ],
"issues": [ {"id": "i1", "step": "s2", "anchor": "a://s2_main.py#L12-18",
"observed": "≤300字", "expected": "≤300字",
"tried": "已尝试的修复,≤300字", "ask": "请求架构师裁决的问题"} ],
"decisions": [ {"ref": "i1", "reply": "≤600字",
"patch_plan": [{"id": "s2", "task": "修订后的任务"}]} ],
"archive": [ "s1: 快排实现20行,测试3/3通过(详情 artifacts/s1_main.py" ] // 每条 ≤160字
}
```
### 4.3 状态机
```
draft ──write brief──▶ in_progress ──所有 step done──▶ reviewing ──pass──▶ done
│ ▲ └──fail──▶ in_progress(修正回合+1
issue 上报│ │decision 下发 / 兜底代做
▼ │
(回合数/budget 未触顶)
│ 触顶 rounds_cap 或 api_token_cap
escalated ──Architect 兜底代做──▶ reviewing
任何终态 ──▶ 入 ReviewQueue(抽样率或 safety 强制)
```
### 4.4 双方渲染规则(token 节约的核心实现)
- `render_for_architect(ws)`metaquery(截断 200 字)+**全部 issues**+最近 3 条 decisions+最近回合的 progress 摘要+每个 issue 的锚点片段(≤30 行)。**目标 ≤1200 token,超限先截断最旧 decisions。**
- `render_for_worker(ws, step_id)`brief 全文+该 step 定义+依赖 step 的 archive 摘要行+该 step 现有工件全文(若存在)+验收标准。**目标 ≤8K token**(小模型长上下文"中间迷失"的补偿:重要信息前置、总量受控)。
### 4.5 rollup 压缩规则
- step 标记 done 后,Worker 顺手生成 ≤60 字摘要进 `archive`,工件本体只在 artifacts/ 落盘。
- workspace.json 主体超过 4K token 时,编排层强制压缩:将已 done 的 progress 条目折叠为 archive 行、截断已解决的 issues(保留 id 与结论行)。
- 归档**只减不删**:压缩前的原文不保留(可控成本换取协议简单),如需审计走 TraceStore。
### 4.6 校验与容错
- 所有写入(brief/progress/issues/decisions)先过 schema;失败 → 将原始输出与错误一并回喂该模型重写一次 → 仍失败由编排层做保守修复(截断超长字段、丢弃多余条目)并记录 trace 告警。
---
## 5. 组件设计与文件规划
### 5.1 新增模块(每个含中文 docstring、工厂函数、独立单测)
| 文件 | 职责与关键接口 | 对应任务 |
|---|---|---|
| `runtime/__init__.py` | 运维层包 | T2 |
| `runtime/hw_profile.py` | `detect() -> {"tier": "gpu12|gpu8|cpu", "ngl": int, "ctx": int, "kv_quant": str}`;探测 nvidia-smi/vulkaninfo/内存,失败回退 cpu 档 | T2 |
| `runtime/llama_server.py` | `LlamaServerManager`: `start()/stop()/ensure_alive()/endpoint()`;子进程管理、/health 轮询、指数退避重启、日志落 `runs/llama_server.log` | T2 |
| `router_system/workspace.py` | `Workspace`: `new/apply_brief/add_progress/add_issue/add_decision/rollup/render_for_architect/render_for_worker/validate/save`;内嵌 `WORKSPACE_SCHEMA` | T4 |
| `router_system/architect.py` | `ArchitectClient`: `brief(query)/decide(ws)/final_review(ws) -> dict`httpx 调 DeepSeekJSON 约束输出,token 计量回写 meta.budget | T3 |
| `router_system/worker.py` | `WorkerLoop`: `run_step(ws, step) -> StepOutcome`;受限工具循环(list/read/write/edit/runD12 约束)实现→验证→自修≤2→issue;验证器按 D4 分层:code 域沙箱执行(run 工具跑测试,tempdir、超时)、facts 对照(复用 KnowledgeBase.facts)、结构检查 | T5 |
| `router_system/pipeline.py` | `CollaborativePipeline`: `run(query) -> RouterResult`;快路径→循环→熔断→兜底→终审→入审核队列;对接 TraceStore 与 Stats | T6 |
| `router_system/review.py` | `ReviewQueue`: SQLite`data/review.sqlite3`);`enqueue/get/list/submit(verdict, correction)` | T8 |
| `scripts/setup_runtime.py` | 下载 llama-server releaseGitHub,提供镜像说明)与默认 GGUFhf-mirror.com,断点续传、文件大小校验)到 `bin/``models/`(均 gitignore | T11 |
| `scripts/bench_tokens.py` | E1 实验脚本(第 9 节) | T12 |
### 5.2 config/config.yaml v2(新增段,v1 段保留供 legacy 路由)
```yaml
runtime:
llama_server:
binary: bin/llama-server.exe # 捆绑上游 release,不改源码(D1)
model: models/qwen3.5-4b-q4_k_m.gguf
port: 8901
hw_profile: auto # auto | gpu12 | gpu8 | cpu
extra_args: ["-fa", "-ctk", "q8_0", "-ctv", "q8_0", "--cache-reuse", "256"]
tiers: # 三档硬件模板(保守默认,可手动覆盖)
gpu12: {ngl: 99, ctx: 32768}
gpu8: {ngl: 14, ctx: 16384}
cpu: {ngl: 0, ctx: 8192}
architect: # 大模型(API
model: deepseek-chat
base_url: https://api.deepseek.com/v1
api_key_env: DEEPSEEK_API_KEY
temperature: 0.2
timeout_s: 60
worker: # 小模型(本地)
backend: llama_server
temperature: 0.3
max_fix_attempts: 2
per_step_timeout_s: 300
pipeline:
fast_path: true
rounds_cap: 6
api_token_cap: 8000
breach_policy: architect_do # architect_do | local_only
review:
queue_db: data/review.sqlite3
sample_rate: 0.10 # 随机抽样送审
force_tags: [safety] # brief.tags 命中即强制送审
```
### 5.3 网关 API 变更(gateway/api.py
| 端点 | 变更 |
|---|---|
| `POST /chat` | 切到 `CollaborativePipeline`;响应增加 `request_id``rounds_used``api_tokens``fast_path` 字段 |
| `POST /chat/legacy` | **新增**,原 v1 L0 行为原样保留(离线降级 + 测试封闭) |
| `GET /runs/{request_id}/workspace` | **新增**,返回交流文本(脱敏可选) |
| `GET /runs/{request_id}/artifacts/{name}` | **新增**,下载工件 |
| `GET /review/queue``POST /review/{id}` | **新增**,人工检验(verdict: approve/edit/reject correction 文本) |
| `GET /metrics` | 扩展:api tokens 累计、fast_path 命中率、回合数分布、熔断次数 |
### 5.4 退役/降级清单
- `classifier.py``planner.py``experts.py` 的 MockExpert/HFExpert、v1 `router.py`:整体归入 **legacy 路由**,由 `build_router()` 构造,仅 `POST /chat/legacy` 与既有测试使用;`domain_groups` 配置保留不动。
- `judge.py``LLMJudge` 类:标记 deprecated,不再被 v2 引用。
- 知识库 facts`KnowledgeBase.facts(domain)` 保留,作为 Worker 接地验证素材;domain 来源改为 `brief.tags`
---
## 6. 模型与运行时
### 6.1 选型结论(2026-08 时点;调研依据见 `research/2026_papers_survey.md` 与对话期检索记录)
| 角色 | 首选 | 备选 | 关键理由 |
|---|---|---|---|
| 本地 Worker(默认) | **Qwen3.5-4B Q4_K_M**(权重约 2.5GB262K 上下文) | Qwen3.5-2B(低配)/ Qwen3.5-9B(高配) | IFEval 89.8(结构化输出可靠性=协议生命线);官方端侧定位;GGUF 生态现成 |
| Architect | deepseek-chatAPI | 任意 OpenAI 兼容 | 便宜、支持 json_object、有上下文缓存计费优惠 |
已知注意项:Qwen3.5 小模型**加 few-shot 示例反而掉分**(社区实测 0.8B 零样本 67% → 单示例 33%),所有 prompt 写清晰零样本指令,禁止堆示例。
### 6.2 llama-server 启动模板(三档硬件)
```
# gpu12(≥12GB 显存)
llama-server -m models/qwen3.5-4b-q4_k_m.gguf --port 8901 -ngl 99 -c 32768 -fa -ctk q8_0 -ctv q8_0 --cache-reuse 256
# gpu8(≈8GB 显存):-ngl 14 -c 16384
# cpu(无独显,≥16GB 内存):-ngl 0 -c 8192(提示用户速度受限)
```
原则:`-c` 按需设定(不要拉满 262K,KV 预留会吃光内存);KV 量化验证任务不用 q4(精度影响裁判);`--cache-reuse` 配合"brief 恒定在前"的文档结构提高前缀命中率。
### 6.3 Architect API 约定
- 统一走 OpenAI 兼容 `/chat/completions``response_format: {"type": "json_object"}`prompt 内嵌 schema 的紧凑描述。
- 每次调用记录 usage 到 `meta.budget` 与 Stats;触达 `api_token_cap` 前预留 500 token 余量,不足则直接熔断。
- DeepSeek 上下文缓存:brief 稳定前缀设计可命中 cache(价格更低),E1 实验单独统计 `prompt_cache_hit_tokens`
### 6.4 模型/运行时下载(scripts/setup_runtime.py
- GGUF:优先 `https://hf-mirror.com/...`(可用 env `HF_MIRROR` 覆盖),HTTP Range 断点续传,校验文件大小(±1MB)。
- llama-serverGitHub releases 拉 Windows Vulkan 版 zip(免 CUDA 工具链,N/A 卡通用);解压 `llama-server.exe``bin/`;网络失败时打印手动下载指引后优雅退出。
- 完成后打印三档硬件检测结果与所选档位。
---
## 7. 任务分解(供 Agent 按序执行)
> 依赖链:T1 → T2 → (T3, T4) → T5 → T6 → (T7, T8, T9) → T10 → (T11, T12) → T13 → T14
> 每个任务一个 commit`feat(v2): Tn 描述`),交付必须含测试。完成即在《任务拆解与执行计划.md》追加登记。
### 阶段 A:真实链路
- **T1 环境与基线确认**(0.5 天)
确认 126 测试全绿;手动起一次 llama-server 跑通一次补全;DeepSeek API 冒烟(无 key 则记录跳过)。
验收:README 追加"开发环境备忘";发现的环境问题记录到本文件 11 节。
- **T2 运维层:hw_profile + llama_server 进程管理**3 天)
实现 5.1 两个模块;三档模板;健康检查/退避重启/优雅停止(Windows 进程语义注意)。
验收:单测(MockTransport + 假二进制脚本)覆盖启停/崩溃重启/健康检查;真机手动验证三档参数生成正确。
- **T3 ArchitectClient**2 天)
brief/decide/final_review 三方法;JSON 约束输出+失败重试一次+降级;token 计量。
验收:MockTransport 单测(正常/坏 JSON/超时/熔断四路径);无 key 时构造报错信息明确。
- **T4 Workspace**2 天)
schema、校验、锚点寻址、双渲染函数(断言 token 预算)、rollup、持久化。
验收:schema 单测(合法/非法样例 ≥10 组);render_for_architect 输出对 3 组构造数据 ≤1200 token。
### 阶段 B:协作协议
- **T5 WorkerLoop + 工具循环 + 接地验证**(6 天)
受限工具循环(D12:五工具、目录作用域、每 step ≤20 次调用、run 强制超时)→验证(D4 分层:run 工具跑测试 / facts 对照 / 结构检查)→自修≤2→issue。QA 快路径不启用工具(纯生成)。
验收:单测覆盖"一次通过/自修成功/写 issue"三路径;工具循环单测(越界路径拒绝、超限熔断、超时回收);端到端 demo:一个函数需求从 brief 到工作目录内产出可跑通的模块+测试;facts 对照复用 knowledge YAML 现有数据出 3 个真实用例。
- **T6 CollaborativePipeline 编排**3 天)
快路径、循环状态机(4.3)、双护栏熔断、Architect 兜底代做、终审、TraceStore 对接。
验收:端到端集成测试(全程 Mock:假 llama-server = httpx MockTransport + 假 Architect 同理)跑通"一次通过""带 issue 修复""熔断兜底"三个剧本。
- **T7 网关扩展**(1.5 天):5.3 全部端点;`/chat` 切 v2`/chat/legacy` 保留。
验收:TestClient 测试新旧端点;legacy 测试全部原样通过。
- **T8 人工检验队列**2 天):ReviewQueue + 端点;抽样与 force_tags 规则。
验收:单测入队/出队/修正回写;端到端测试中 safety tag 的请求必入队。
- **T9 token 计量与账单**1 天):每请求 API token 记账;/metrics 扩展。
验收:E2E 测试断言 budget 回写正确;熔断在 cap=极小值的构造用例下触发。
### 阶段 C:整合
- **T10 rollup + prefix cache 调优**2 天):验证文档结构对 --cache-reuse 命中的影响;调 render 预算。
验收:同一 10 步会话,第二轮起 prefill 时间显著下降(记录数字到实验目录)。
- **T11 打包分发**3 天):setup_runtime.py + 一键启动(`scripts/serve.py` 扩展为自动拉起 llama-server+ 首启引导。
验收:**干净 Windows 环境 20 分钟内从 clone 到对话成功**(写入验收清单);无 API key 可走纯本地降级模式。
### 阶段 D:实验与论文
- **T12 实验脚本与数据集**(2 天):`scripts/bench_tokens.py` + `eval/` 数据集(第 9 节)。
- **T13 跑数与报告**(4 天):E1–E5 输出到 `research/v2_experiments/`md + csv)。
- **T14 文档收口**1 天):README v2 改写(架构图、快速开始、指标表)。
---
## 8. 工程规约(Agent 必读)
1. **环境事实**Windows 11 + Git Bashvenv 位于 `.venv`Python 3.14);测试命令
`.venv/Scripts/python.exe -m pytest tests -q`2026-08-30 基线:126 passed)。
2. **依赖纪律**`router_system/` 新模块零第三方依赖(标准库 only);`runtime/` 与网关可用
httpx/fastapi/pydantic/uvicorn;确需新增依赖(如 psutil)→ 加到 requirements.txt 并在 PR 描述说明理由。
3. **测试封闭性**D11):一切 LLM 交互用 `httpx.MockTransport` 注入;沙箱执行用临时目录+超时。
4. **Windows 兼容**:路径一律 `pathlib`;所有 CLI 出口 `sys.stdout.reconfigure(encoding="utf-8")`
(先例见 `scripts/eval.py` 头部);子进程用 `CREATE_NEW_PROCESS_GROUP`,终止用 terminate→kill 兜底。
5. **代码风格**:中文 docstring`build_xxx(cfg)` 工厂函数;与现有文件排版一致;注释只写代码无法自明的约束。
6. **金额敏感**:任何 Architect 调用必须计量并受 `api_token_cap` 约束;禁止无熔断的重试循环。
7. **禁止事项**:不改 llama.cpp 源码;不在主链路重新引入领域分类;Architect 输入包含工件全文;跳过 schema 校验;为演示造假数据。
8. **文档同步**:每完成一个 T,在《任务拆解与执行计划.md》追加一行状态;架构级偏离(如有)必须先更新本文件再动代码。
---
## 9. 实验与评测设计(论文数据来源)
统一输出目录:`research/v2_experiments/`(每个实验一份 md 报告 + csv 原始数据)。
### E1 token 经济学(主实验)
- 50 任务(代码 20 / 数学 10 / 通用 20),四臂:
A1 全量上下文(每轮把完整历史发 Architect)|A2 交流文本协议|A3 A2+rollupA4 A3+prefix cache。
- 指标:Architect input/output tokens、`prompt_cache_hit_tokens`、估算成本、回合数、最终质量分。
- 预期结论:A4 vs A1 的 Architect token 下降 ≥80%。
### E2 端到端质量(三臂)
- 100 任务:快路径 only / 完整协作管线 / 纯 Architect(大模型直答)。
- 判分:`machine_checkable` 项用断言;其余用 LLM rubric 评分+10% 人工抽检。
- 数据集建议:HumanEval+ 子集、GSM8K 子集、C-Eval 子集、自建法律/医疗 QA 各 30 条(facts 库内可核对)。
### E3 协作健康度
- 升级率、回合数分布、issue 率、自修成功率、熔断次数(直接汇总 E1/E2 运行数据)。
### E4 KV 量化内存-精度曲线
- fp16 / q8_0 / q4_0 × 上下文 4K/16K/32K:进程内存(psutil RSSnvidia-smi 显存)× Worker 验证准确率(固定 50 题)。
### E5 验证器 P/R
- 对 100 个产物注入 50 处模板化缺陷,测接地验证的拦截率/误杀率;对照组=纯小模型自由判断(预期显著更差,支撑 D4)。
---
## 10. 里程碑排期(12 周)
| 周 | 阶段 | 内容 | 硬验收 |
|---|---|---|---|
| 1 | A | T1 + T2 开工 | 真实 llama-server 冒烟 |
| 2 | A | T2 完成 + T3 | 运维层单测全绿 |
| 34 | B | T4 + T5 | Workspace/Worker 单测全绿 |
| 5 | B | T6 | Mock 端到端三剧本通过 |
| 6 | B/C | T7 + T8 + T9 | 新旧端点共存,测试全绿 |
| 7 | C | T10 + T11 开工 | prefix cache 收益数据 |
| 8 | C | T11 完成 | 干净环境 20 分钟跑通 |
| 910 | D | T12 + T13 | E1 主实验出数 |
| 1112 | D | T13 收尾 + T14 + 论文 | 实验报告 + README v2 |
---
## 11. 风险清单
| 风险 | 缓解 |
|---|---|
| 小模型长上下文"中间迷失" | 协议本身即补偿(重要前置+总量受控);render_for_worker ≤8K 硬约束 |
| llama.cpp 长上下文 prefill 慢(CPU 尤甚) | `--cache-reuse`brief 恒定前缀;`-c` 按需不拉满 |
| 协作死循环/踢皮球 | rounds_capapi_token_cap 硬熔断(D6),熔断即兜底代做 |
| 硬件多样性无法穷举测试 | 三档保守模板+手动覆盖;超出范围提示"已按保守档运行" |
| 国内模型下载失败 | hf-mirror 镜像+断点续传+手动下载指引 |
| 用户无 API key | 本地降级模式:快路径+本地兜底+明确降级提示(v1 NoneFallback 思路) |
| 打包吃掉全部时间(时间黑洞) | 只承诺"干净 Windows 20 分钟跑通";签名/自动更新/多平台一律不做 |
| schema 漂移导致协议断裂 | 所有写入过校验(4.6);校验器有独立单测 |
---
## 12. 术语对照
| 术语 | 含义 |
|---|---|
| 交流文本 / Workspace | 两模型间的结构化 JSON 共享工作区(本协议核心) |
| brief | Architect 开局写入的任务分析(目标/约束/验收/计划) |
| issue / decision | Worker 上报的验证问题 / Architect 的裁决回复 |
| 锚点(anchor | `a://文件#L行区间`,指向工件片段的引用(替代全文复制) |
| rollup | 已完成步骤压缩为 archive 摘要行的机制 |
| 快路径 | 小模型直答+自验证通过即返回,不经 Architect |
| 熔断 | rounds_cap / api_token_cap 触顶后强制退出循环 |