Repository docs · as authored
Architecture
A local reading view of the repository's documents: the body is served as authored (Chinese documents are not translated) and every in-document link is rewritten to stay inside this app.
Source: docs/architecture.md
This document is served as authored. This page translates the chrome — not the document text.
"The complete on-site operating system for a Forward Deployed Engineer."
FDE Scope 不是又一个 Agent 应用,而是 FDE 在客户现场的完整工作台:把 FDE 的 18 阶段标准作业流程(SOP)变成可执行、可被 gate 拦截的工程化流程,覆盖 软件/SaaS 与具身机器人/制造业两类场景。
分层
┌─────────────────────────────────────────────────────────────────┐
│ CLI / Web Console │
│ engage · gate · status · handoff · connect · corpus · … │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ SOP 层:engagement/ [无 agentscope]│ │
│ │ 4 zones / 18 阶段状态机 + 10 个可执行 gate + handoff │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │Zone A │→│Zone B │→│Zone C │→│Zone D │ │ │
│ │ │Pre-engage│ │Build │ │Ops │ │Handoff │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Profiles:profiles/ [无 as] │ │
│ │ ticket(客服)· manufacturing(工厂)场景选择 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 5: Flywheel(数据飞轮) [延迟导入 as] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 4: Eval(评估框架) [无 as] │ │
│ │ ticket 指标 · 制造业 KPI(OEE/MTBF/抓取率)· bad case │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 3: Deploy(多租户部署) [延迟导入 as] │ │
│ │ Workspace 沙箱 · PermissionContext · Toolkit 工具绑定 │ │
│ │ SubAgentTemplate 蓝图 · deploy plan(web/PawApp 共享) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 2: Corpus Engine(语料引擎)★核心 [无 as] │ │
│ │ 脱敏 → 去重 → 质量门 → 覆盖度 → 合成 → 报告 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Layer 1: Connector Kit(数据接入) [无 as] │ │
│ │ CSV★·Zammad·Salesforce·MySQL │ │
│ │ OPC UA·MQTT-Sparkplug·ROS2·MES·Historian(工业) │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
> **横切模块 `fde_scope/llm.py`(MiMo Token Plan 客户端)**:可被 Layer 2(合成/
> 评分)、Layer 4(MiMoReplyFn)、Zone C/D(runbook)与 Web Forge 注入的可选
> LLM 能力;纯标准库实现,无 key 时全链路规则路径。详见
> [`llm_integration.md`](llm_integration.md)。
>
> **横切模块 `fde_scope/skills/`(技能沉淀库)**:现场经验 → 可复用技能的文件库
> (draft → published → archived),可导出为 AgentScope / QwenPaw 的 Agent
> Skills。详见 [`skills.md`](skills.md)。
>
> **横切模块 `fde_scope/ontology/`(本体语义层)**:领域概念的形式化
> TBox/ABox + SKOS 分类法 + JSON-LD 导出;P2/P3 将接入 corpus 覆盖度与
> skills 检索。详见 [`ontology.md`](ontology.md)。
>
> **桌面形态 `pawapp/`(QwenPaw PawApp)**:把上述全部能力以插件应用形式嵌入
> QwenPaw 桌面端(App Center),复用宿主 LLM/沙箱/记忆。详见
> [`qwenpaw_integration.md`](qwenpaw_integration.md)。
核心设计决策
1. SOP 层是新顶层编排
engagement/ 把"FDE 在现场做什么"从 5 步扩展为 4 zones / 18 阶段 状态机:
- Zone A · Pre-engagement(4):qualification → site-survey → stakeholder-map → success-criteria
- Zone B · Build(6):connect → corpus → prototype-on-real-data → validate → deploy → eval
- Zone C · Operationalization(5):slo-sla → runbook → monitoring-drift → change-mgmt → flywheel→productization
- Zone D · Handoff(3):ops-handoff → knowledge-transfer → disengage
每个阶段有可选的 gate;Engagement.advance() 在 gate 未通过时拒绝推进并返回 blockers。
这是把 SOP 从口号变成工程物的关键。
为什么是 gate 而不是 checklist
两者是记录与谓词的区别,"更严格"不是语气而是机制:
- 清单是记录,门禁是谓词。 勾选框陈述"曾经查过";
Gate.check(ctx)在 推进的瞬间从 engagement 上下文重新推导事实。 - 腐化方向相反。 清单填完那天状态最好,之后随现实漂移(代码、人员、需求)
单向腐化;
advance()对当前阶段全部门禁无条件重评估,旧的 passed 记录不提供豁免(engagement/engagement.pyadvance docstring:a stale pass record never counts)。 - 执行点从纪律移到不变量。 blocker 在场时
AdvanceBlocked让推进在物理上 不可能,不依赖任何人记得复查。 - 越权 ≠ 绕过。
force=True仍评估并记录全部结果,例外本身进入审计日志, 事后无法与正常通过混淆。
因此任何围绕 evaluate_phase_gates 的缓存/短路都会把机制退化回一张清单
(AGENTS.md 不变量 1 禁止这样做)。
2. 工业 Overlay(manufacturing profile 启用)
6 个 SaaS 不需要的并行 gate,每个都是 Gate.check(ctx) -> GateResult:
| gate | 标准 | 拦截条件 |
|---|---|---|
| site_survey | gemba walk | location 未记录 |
| fat_sat | FAT/SAT 验收 | FAT/SAT 未执行/未签字 |
| functional_safety | ISO 13849 / IEC 61508 / ISO 10218 | PL 不足 / SIL 不足 / 未做危险分析 |
| conformity | EU AI Act / CE marking | 高风险系统未 CE |
| works_council | 德国 BetrVG §87 | works council 在场但无审批 |
| air_gap | air-gapped 部署 | 缺 edge 硬件 / 遥测出网 |
| shift_handover | 24/7 生产 | 多班次未集成交接 |
3. Profile 机制让核心场景无关
profiles/ 按 scenario 选 connectors / KPIs / gate overlay:
- ticket:CSV/Zammad/Salesforce + 意图准确率/采纳率/升级率
- manufacturing:OPC UA/MQTT/ROS2/MES/Historian + OEE/MTBF/FPY/DPMO/抓取率/碰撞率 + 工业 gate
4. 依赖分层 → 零配置可跑
- 核心数据层 + SOP 层 + Profiles 层 + Web 层零顶层 agentscope 依赖(唯一例外见下:connectors/documents.py 的延迟 rag 导入)。
- 仅 deploy/(三支柱 5 模块)与 connectors/documents.py(rag 解析器)延迟导入 agentscope
(optional extra,实测窗口
>=2.0.4.post1,<3);flywheel 为纯规则实现。 pip install -e ".[dev]"+pytest全绿,不需要 LLM key / docker / agentscope。
5. Corpus Engine 规则为底、LLM 可选增强
脱敏、去重、质量门、覆盖度分析、缺口检测、针对性合成、train/eval/test 分割、HTML 报告
——全部是真实规则实现,不接 LLM 也能跑通并产出可审计报告。2026-08 起合成与质量
评分可选接入 MiMo(corpus --llm,同签名换内核,失败自动回退规则)。
6. AgentScope API 真实化
见 docs/agentscope_api_mapping.md:把设计文档里的虚构 API
(HarnessAgent/SequentialPipeline/EventSystem.on/HumanInTheLoop/VectorStore)
逐条对齐到真实 2.0.x API(实测窗口 >=2.0.4.post1,<3)。
7. LLM 横切层(可选、可回退、零依赖)
fde_scope/llm.py 是唯一的 LLM 出口(MiMo Token Plan,OpenAI 兼容,标准库 urllib):
- 可选注入:各层接受
llm=None可选参数,无 key 时行为与旧版完全一致; - 失败回退:网络错误/坏 JSON/
content: null都回退规则路径(eval 被测 Agent 除外——干净退出 exit 1); - 溯源诚实:回退后不声称 LLM 生成(
llm_runbook返回(text, used_llm)); - 凭据只走环境变量
FDE_SCOPE_MIMO_API_KEY,不进 git/报告/manifest。 设计与接入点详见llm_integration.md。
8. 技能沉淀库(经验资产化)
fde_scope/skills/ 把现场经验变成可复用、可导出的技能资产:
- 文件库存储(
.fde_scope/skills/,零数据库);四类分类 + draft→published→archived 生命周期; - 三种自动/半自动沉淀入口(gate 阻塞提示、操作自动捕获、现场记录桥接)都产出草稿,
skill review人工审阅后才发布,保证信噪比; - 导出遵循 Anthropic Agent Skills 规范(SKILL.md + frontmatter),
AgentScope
Toolkit(skills_or_loaders=[...])(部署装配的AgentSpec.toolkit.skills_dirs)与 QwenPawcustomized_skills双兼容。 详见skills.md。
9. 多 Agent 生产(真实 AgentScope 2.0 装配 + FDE 自定义)
装配即真实对象。 TenantDeployer.deploy() 为 tenant_config.yaml agents:
段的每个 AgentSpec 组装一个真实 agentscope.agent.Agent:spec.model wiring
成真实 ChatModel(缺省留运行时注入)、plan_bindings() 按角色把连接器/语料
工具绑成真 Toolkit、AgentState(permission_context=...) 注入规则上下文、
ReActConfig(max_iters=20)。
FDE 自开 Agent 有三个通道(名字任意、中文可用):
- CLI
--agent 名字:角色[:模型](可重复)+--connector-source slug=path绑源; - YAML:
TenantConfig.agents声明 +TenantConfig.sources给连接器数据源; - 单 Agent 覆盖:
spec.toolkit["sources"]/["skills_dirs"]覆盖该 Agent 的数据源与挂载技能(Toolkit(skills_or_loaders=...)注册)。
角色是自由文本,经 canonical_role() 归入数据/日志/文件三个工具桶(含中文
关键词);未归桶的角色退化为 corpus-only。没有数据源的连接器工具保持
unbound 并在 manifest 里写明原因——不假装可用(describe_bindings)。
协调走 2.0 官方机制:每个 Agent 同时导出 SubAgentTemplate 蓝图进真实
create_app(custom_subagent_templates=...);leader 通过 AgentCreate 按
subagent_type 派活、成员经 TeamSay 回报(CI 真库测试覆盖)。装配 ≠ 服务:
不带 --serve,deploy 是真对象装配 + 诚实 manifest(dry-run/审计友好);
deploy --serve(build_app() + uvicorn)起真实 app 服务,需要 agentscope
extra + Redis + 可达模型。生命周期:2.0 无 Agent.stop,TenantDeployer.stop()
关闭 workspace/engine 句柄并标记 manifest。
10. QwenPaw 桌面形态(PawApp)
pawapp/ 把整个引擎做成 QwenPaw 的 PawApp(App Center 插件应用):
- 后端薄封装
fde_scope(18 路由由宿主挂载到/api/fde-scope)+ 3 个 Agent 工具 (fde_sop_status/fde_sop_advance/fde_deploy_plan); - runbook 起草用宿主
ctx.chat()(不再需要外部 LLM key); ctx.storage同步 engagement 快照(文件仍为唯一事实源);skill_provider()把导出的技能目录直接注册给宿主 Agent(技能即能力)。 安装/契约详见qwenpaw_integration.md。
11. 本体语义层(ontology/)
fde_scope/ontology/ 把领域概念形式化为 TBox(OntologySchema:类层级、
对象/数据属性、SKOS 概念体系、命名空间、版本)+ ABox(InstanceStore:
个体与属性断言),零新依赖(pydantic + pyyaml)。内置 fde-core 与
ISA-95 mfg-overlay 为包内只读 YAML(狗粮校验:内置本体必须通过自己的
SHACL-lite 校验器);用户本体/实例库在 .fde_scope/ontology/ 工作区
(工作区覆盖内置),全部写入走 fsutil.atomic_write_text。JSON-LD 1.1
导出保证互操作(ontology export)。校验返回错误码报告(ONTO-xxx)而非
异常——记录与谓词分离,与 gate 哲学一致。语义层向两个模块单向桥接:
corpus(--ontology 概念注解 → 概念级覆盖 → 定向合成)与 skills
(skills_bridge.py 检索时推导概念,--concept 经 narrower 闭包扩展
检索、导出可选 concepts: frontmatter);桥接不回写、不持久化。详见
ontology.md。
数据流
客户数据源
│ connect (OPC UA / MQTT / CSV / Zammad…)
▼
[raw rows] → corpus forge(可选 LLM 合成/评分,`--llm`)→ [CorpusReport] → HTML 报告
│ deploy (FAT→SAT→commissioning,工业 gate 守卫;manifest 可选携带 llm 段)
▼
[Workspace 沙箱 + PermissionContext(经 AgentState 注入) + Toolkit 绑定角色连接器/语料工具 + Agent]
│ eval (ticket 指标 或 制造业 KPI;被测 Agent 可用 mock 或 MiMo)
▼
[EvalReport + bad cases + 建议]
│ runbook(可选 `handoff --llm` 由 MiMo 起草)
│ skills(现场经验 → 草稿 → 发布 → 导出 Agent Skills)
│ flywheel (概念事件→真实事件映射→回流→周度重训)
▼
数据飞轮 → 产品化 → 移交包 → 客户签字 → 退场
可选宿主形态:QwenPaw 桌面端(pawapp/ PawApp,复用宿主 LLM/沙箱/记忆)
三层隔离(多租户数据泄露防御)
| 层 | 机制 | AgentScope 2.0 真实类型 |
|---|---|---|
| 执行隔离 | 容器沙箱 | DockerWorkspace / LocalWorkspace(经 SandboxSpec 组装) |
| 数据隔离 | 租户专属 collection 命名空间;语料检索为绑定该 corpus 的关键词工具 | collection 名 corpus_{tenant_id};agentscope.rag.KnowledgeBase 需 embedding model,见路线图 |
| 权限隔离 | 规则上下文随 AgentState 注入 agent(bound 工具自动 ALLOW,未匹配按审批策略 ASK/DENY) |
PermissionContext + PermissionRule(ALLOW/DENY/ASK) |
当前状态 vs 路线图
| 模块 | v0(本期) | v1(路线图) |
|---|---|---|
| Engagement SOP | ✅ 18 阶段 + 10 gate 状态机 | + 与 deploy/flywheel 实时联动 |
| Connector (CSV) | ✅ 真实实现 | + 工业协议真实 IO + Zammad/Salesforce HTTP |
| Corpus 清洗/合成 | ✅ 规则版 + MiMo LLM 可选增强(同签名换内核) | + 批量样本 LLM 评分 |
| LLM 横切层 | ✅ MiMoClient + 6 接入点(llm.py) |
+ 流式输出 + 多 provider 路由 |
| Deploy 组装 | ✅ 真实 Agent 装配(模型 wiring + Toolkit + PermissionContext)+ --serve 真实启动 |
+ serve 端到端实测(Redis + 模型) |
| Eval | ✅ ticket + 制造业 KPI + mock/mimo reply | + 真实 AgentScope Agent.reply + 分类器 |
| Runbook | ✅ Jinja 模板 + MiMo 起草(handoff --llm) |
+ 客户定制模板 |
| Skills 沉淀库 | ✅ 四类分类 + 生命周期 + 双格式导出(AgentScope/QwenPaw) | + 技能检索嵌入化 + 跨项目同步 |
| 多 Agent 生产 | ✅ 每规格真实 Agent 装配 + SubAgentTemplate 蓝图 + FDE 三通道自定义 | + serve 端到端实测(Redis + 模型) |
| Flywheel | ✅ 事件映射 + 规则回流 | + 真实订阅 reply_stream + 微调 |
| Web 工作台 | ✅ 三视图控制台(workbench 聚合 + journal + skills) | + 实时事件流 |
| QwenPaw 集成 | ✅ qwenpaw export/validate + PawApp(真机验证通过) | + ACP 适配 + Studio 集成 |