跳转至

架构

主循环

每个决策周期一次模型调用、一个工具动作、一次新观测:

flowchart LR
    subgraph 每轮
        CTX["上下文组装<br/>系统提示+任务板+流程线+截图/marks"] --> MODEL["模型决策<br/>(一次调用)"]
        MODEL --> TOOL["工具层<br/>坐标换算 / 安全门 / 执行"]
        TOOL --> OBS["原子观测<br/>新截图 + marks,epoch+1"]
        OBS --> CTX
    end

harness 不做流程编排:没有节点、没有路由,任务规划由模型通过 TaskDoc 任务板自行维护。

原子观测

观测由唯一生产者 session.observe() 完成,一个采样窗口内取齐四类信号;窗口内前台组件变化则整窗重试一次,再不稳则本次观测失败:

sequenceDiagram
    participant T as 工具/调用方
    participant O as observe()
    participant D as 设备
    T->>O: 触发观测
    O->>D: foreground-before
    O->>D: 截图
    O->>D: accessibility dump(复用同一张截图)
    O->>D: foreground-after
    alt 前后台一致
        O->>O: epoch+1,mark 铸入新批次(ax_1@eN)
        O-->>T: 观测结果 + 图
    else 前台漂移
        O->>O: 整窗重试一次;仍不稳 → ScreenshotError
    end

每次成功观测使上一批 mark 全部过期;执行动作引用过期 mark 时在 resolve_mark 处拒绝。这保证模型操作的永远是最新一帧。

约束(P0)

约束
坐标 0-1000 相对坐标换算只在工具内部;模型不接触绝对像素
Marks-first 执行动作必须绑定 mark;歧义/未命中/过期一律拒绝执行
图片卫生 历史中只保留最新 2 张截图;工具成功总是回传新图
安全 风险执行调用默认先预警、确认后执行;见安全模式
工具 失败返回错误字符串;不执行动作、不假报成功
Trace 文本超 64 字截断、敏感子串脱敏、截图 base64 不落盘
设备 设备操作统一经 DeviceFactory;无裸 ADB 调用
配置 CLI > shell env > .env > 默认;无硬编码端点与密钥

上下文工程

每次模型调用的上下文组成:

生命周期 说明
系统提示 + 工具 schema 静态 工具契约与安全规则
TaskDoc 任务板 run 内 模型自维护的目标与路线;pinned,压缩时保留
流程线 run 内 最近 8 步"意图→工具→结果",从 transcript 推导
应用清单/记忆 跨 run App-KB 事实;将来注入晋升的经验
截图 + marks 每步 当前世界状态;历史图片滚动剪除

成本由两道闸控制:token 预算(硬上限)与两级 auto-compact(0.75 提醒收敛、0.92 折叠历史)。两者均可配置,见配置参考

记忆

三层结构:App-KB 事实库(已上线)、episode 经验档案(已上线)、RAG shadow 回想(已上线,默认不注入)。详见记忆与自进化