资讯中心

Tactile observe-plan-act 工作流深度解析:LLM 驱动的有界执行闭环原理与实战

📅 2026/8/26 19:36:58
Tactile observe-plan-act 工作流深度解析:LLM 驱动的有界执行闭环原理与实战
Tactile observe-plan-act 工作流深度解析LLM 驱动的有界执行闭环原理与实战【免费下载链接】TactileTactile: an accessibility-first operating layer for agents.项目地址: https://gitcode.com/gh_mirrors/tactile/TactileTactile 是一个无障碍优先的 Agent 操作系统层核心是 LLM 驱动的 observe-plan-act观察-规划-执行工作流Agent 通过有界执行闭环用无障碍语义代替截图猜坐标可靠地操作飞书、微信等桌面应用。本文带你完整理解这个闭环的原理、安全边界和实战用法。为什么 Agent 需要观察-规划-执行闭环传统的 computer-use Agent 通常这样工作看截图 - 猜元素 - 预测坐标 - 点击 - 再看截图这条路径通用但脆弱坐标会随窗口移动漂移截图语义信息少模型经常自信地点错地方。Tactile 把工作方式反转成一条有监督的闭环源码位于 skills/tactile-macos/scripts/workflows/codex_llm_workflow.pyObserve观察- PlanLLM 规划 1 个动作- Act执行- 再 Observe - …每一轮循环都由一个独立的控制器进程持有全部状态当前 UI 快照、元素索引、历史动作、剩余步数。LLM 只负责下一小步怎么走不拥有全局控制权——这正是有界执行的核心。闭环的四个环节逐个拆解1️⃣ Observe先触摸结构再谈视觉每一轮循环开始时控制器用TraversalTool重新遍历目标应用的无障碍树得到每个元素的角色AXButton、AXTextField、AXMenuItem…可访问名称与文本位置与尺寸frame、center层级路径ax_path是否可被直接 AX 操作direct_ax如果无障碍信息不够还会叠加本地 OCR系统级文本识别同时返回文字和屏幕坐标作为文本定位的兜底只有当 AX 和 OCR 都不足时才会把截图交给视觉规划。这个优先级就是 Tactile 的操作阶梯AX OCR 视觉。2️⃣ PlanLLM 一次只允许规划有限动作控制器把当前状态打包成 JSON元素列表、观察摘要、最近 5 步历史、用户指令、剩余步数调用 LLM 生成下一步计划。规划提示词中有几条关键的约束规则每步最多 1 个动作可用--max-actions-per-step放宽防止 LLM 一口气输出连招优先 element_id禁止编造 id坐标是最后手段打开弹窗、提交表单后应返回wait让控制器先重新观察发消息类任务必须先确认收件人可见再输入正文。LLM 只能从白名单动作类型中选择click、doubleclick、rightclick、scroll、writetext、keypress、wait、finish。超出白名单的返回会被直接拒绝。3️⃣ Act执行前先做计划校验在真正动鼠标之前validate_plan会做三重把关动作数量超过上限 → 截断并告警出现白名单之外的动作类型 → 直接报错element_id不在当前元素索引中即 LLM 幻觉出来的元素→ 拒绝执行。也就是说LLM 的每个决定都要通过物理校验才能落地这是防幻觉的关键闸门。执行完成后控制器还会做后输入验证比如writetext之后重新观察确认预期文本真的出现在输入框里如果上一步直接 AX 点击后 UI 毫无变化观察签名不变会自动触发坐标回退或重新规划而不是傻等。4️⃣ 再 Observe闭环靠重新观察驱动执行完动作后控制器无条件重新遍历应用 UI进入下一轮。循环只在三种情况下退出LLM 返回finish目标完成、受阻或需要人工介入计划状态为blocked达到--max-steps上限运行日志记为max_steps_reached。┌──────────── observe-plan-act 有界执行闭环 ────────────┐ │ │ │ TraversalTool 遍历 AX 树 ──┐ │ │ 本地 OCR兜底 ──┼── LLM 规划 1 个动作 │ │ 可选视觉截图 ──┘ │ │ │ ▼ │ │ validate_plan 校验 ── 执行 ── 后验证/状态签名对比 │ │ ▲ │ │ │ └──── 重新观察进入下一轮 ◄──┘ │ │ │ │ 出口finish / blocked / max_steps_reached │ └────────────────────────────────────────────────────────┘有界执行为什么限制反而更可靠有界bounded是 Tactile 工作流的设计灵魂体现在四层边界上边界机制作用步数边界--max-steps N默认 20卡死总迭代次数杜绝无限循环单步动作边界--max-actions-per-step每轮最多执行有限动作强制每步后重新观察动作白名单ALLOWED_ACTION_TYPESLLM 只能输出受控的 UI 动作元素存在性校验element_id 必须在当前索引中拦截幻觉元素坐标必须来自最新观察配合 SKILL 规范中的Bailout Rules如果工作流反复做同一个无效动作比如反复滚动却接近不了目标选项就应当停止该次运行切换到手动的observe/ocr/ax/input命令接手。继续一个循环中的工作流比带着新鲜观察人工接管风险更高。实战跑一次有界工作流前置条件macOS 已授予辅助功能与屏幕录制权限配置TACTILE_OPENAI_API_KEY可选TACTILE_OPENAI_BASE_URL、TACTILE_MODEL。第一步用最短命令体验闭环。不带--execute时是 dry-run只观察规划一步不触碰真实 UIbin/tactile-macos workflow message a contact -- --target WeChat第二步真正执行并加严边界。对长任务或不可逆操作切组织发消息先限步、再限每步动作数同时把运行日志写到产物目录artifact_dir$(bin/tactile-macos artifact-dir) bin/tactile-macos workflow switch org and draft a message -- \ --target /Applications/Lark.app --execute --mode auto \ --visual-planning off --max-steps 6 --max-actions-per-step 1 \ --plan-output $artifact_dir/lark-run.json第三步读懂运行日志。每次运行生成一份完整 JSON 轨迹由 skills/tactile-macos/scripts/utils/artifacts.py 管理产物目录包含final_statusfinished/blocked/max_steps_reached/dry_run每步的observation_sourcesAX 元素数、OCR 行数、截图路径每步发给 LLM 的元素数、计划内容与execution_results用bin/tactile-macos plan-log $artifact_dir/lark-run.json可以查看可读的计划日志。模式选择ax-rich 还是 ax-poor--mode auto会自动区分飞书/Lark/Slack/浏览器等无障碍富AX-rich应用走语义优先路径微信等无障碍稀疏AX-poor的应用会额外启用 profile 区域提示。遇到未知应用时--capability-selection auto会在首次遍历后让 LLM 结合可见的 AX 摘要和应用截图一次性判定走哪条路径。高风险操作的分段策略工作流规则对发消息、点赞、支付、删除、账户变更这类高风险外部动作有明确要求把任务拆成 定位 → 草稿/展开控件 → 验证 → 提交 四段。用有界工作流完成前三段然后从最新观察中人工核对活动窗口、目标对象与草稿状态确认无误后再执行最后的提交动作。发送消息类任务尤其要在输入正文前验证收件人可见、提交前验证正文可见。核心文件导航闭环主逻辑约 3200 行skills/tactile-macos/scripts/workflows/codex_llm_workflow.py入口与工具说明skills/tactile-macos/SKILL.mdLLM 调用配置skills/tactile-macos/scripts/utils/llm_config.py运行轨迹生成skills/tactile-macos/scripts/utils/tactile_trace.py应用专属操作指南飞书、微信等skills/tactile-macos/references/app-guides/规划器提示词含全部约束规则codex_llm_workflow.py 的 build_planner_promptmacOS MCP 备选入口mcps/tactile-macos-mcp/总结把能力关进笼子Tactile 的 observe-plan-act 工作流给我们的启示是给 LLM 的自主权加上物理边界可靠性不降反升。每步 1 个动作 强制重新观察 → 决策始终基于最新事实步数与动作白名单 → 任何一次运行都有确定的终点element_id 存在性校验 后输入验证 → 幻觉在落地前被拦截完整的 run log → 每一步都事后可审计、可复盘。如果你希望在自己的 Agent 自动化里获得同样稳定的桌面操作体验可以从仓库克隆后配置该 skill 开始git clone https://gitcode.com/gh_mirrors/tactile/Tactile.git先跑一次 dry-run 读懂观察结构再逐步放开--execute与步数上限你会清晰体会到有界二字带来的确定感。【免费下载链接】TactileTactile: an accessibility-first operating layer for agents.项目地址: https://gitcode.com/gh_mirrors/tactile/Tactile创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考