ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

拆解TuriX源码:Planner、Brain、Actor、Memory四模型协作如何编排桌面自动化

拆解TuriX源码:Planner、Brain、Actor、Memory四模型协作如何编排桌面自动化 拆解TuriX源码Planner、Brain、Actor、Memory四模型协作如何编排桌面自动化【免费下载链接】TuriX-CUAThis is the official website for TuriX Computer-use-Agent项目地址: https://gitcode.com/gh_mirrors/tu/TuriX-CUATuriX 是一个开源的计算机使用智能体Computer-use Agent让大模型真正上手操作你的桌面点击、输入、滚动、跨应用协作。它最大的架构特色是把桌面自动化拆成Planner规划、Brain大脑、Actor执行、Memory记忆四个独立角色各自可以配置不同的模型——只需改config.json一行代码都不用动。这篇文章带你用最短的路线读透 TuriX 源码看懂这四个模型是如何像指挥中心 质检员 双手 笔记本一样协作的。一、为什么是四个模型而不是一个大模型传统方案往往让一个大模型同时负责想任务、看屏幕、点鼠标容易顾此失彼。TuriX 的思路是职责分离角色昵称职责核心源码Planner军师任务开始前制定分步计划决定要不要搜索、选哪些 Skillsplanner_service.pyBrain质检员每步之后看截图评估上一步成败给出下一步目标service.py 的brain_stepActor双手把目标翻译成 0~10 个具体动作点击坐标、输入文本…service.py 的actor_stepMemory笔记本把越来越长的步骤历史压缩成结构化摘要省 tokenservice.py 的记忆压缩这种编排带来的直接收益Brain 可以专心看Actor 可以专心点Memory 可以专心记任何一环都能按需换成更强或更便宜的模型。二、先看主循环一次任务是如何转起来的整个 Agent 的入口是 Agent 类而主循环只有短短几行——这是全文最关键的骨架# src/agent/service.py run() 核心流程 if self.planner_llm and not self.resume: await self.edit() # ① Planner开工前先做规划 for step in range(max_steps): await self.brain_step() # ② Brain看图评估 定目标 await self.actor_step() # ③ Actor执行动作 if self.history.is_done(): # ④ 完成则退出 break对应源码位置run 主循环。一句话总结节奏Planner 开工前规划一次 → 每个 step 由 Brain 和 Actor 接力 → Memory 在后台随时压缩记忆。下面逐个拆解。2.1 Planner开工前的军师在 run() 中如果配置了planner_llm会先调用edit()让 Planner 干活源码见 planner_service.py制定分步计划把原始任务拆解成step_by_step_plan写回任务描述后续 Brain/Actor 都会带着这份计划行动决定要不要搜索preplan 流程比如查 iPhone 价格这类任务Planner 会先用 DuckDuckGo 搜一轮把搜索结果塞进上下文挑选 Skills如果 skills/ 目录里有 markdown 技能手册例如 github-web-actions.mdPlanner 只读每个技能的 name description 做选择题选中后把完整技能内容交给 Brain 当操作指南。Planner 的输出格式计划、搜索摘要、选中的技能由 _format_plan_payload 拼装成一段自然语言拼进任务描述。 小技巧不需要规划时把 examples/config.json 里的agent.use_plan设为false能省掉一整轮模型调用。2.2 Brain每步的质检员 指挥官brain_step() 是循环中每步的第一个动作。它做四件事截屏抓当前屏幕以及上一步的屏幕两张图一起交给模型做前后对比评估判断上一步是Success还是Failed比如输完网址按回车后地址栏真的变成 youtube.com 了吗定目标输出一个可执行的next_goal里面必须写清具体要输入的文字、要点哪里而不是含糊的输入消息按需取记忆Brain 能看到一份记忆索引Memory index如果近期摘要不够用它可以输出read_files请求把某条历史步骤记录原样调回来——这是由 brain_search.py 处理的二次调用。Brain 的输出是一个固定 JSON定义见 AgentBrain{ analysis: { analysis: ……, sop_check: …… }, current_state: { step_evaluate: Success/Failed, ask_human: No, next_goal: 下一步要做什么写得越具体越好 } }它的系统提示词在 prompts.py 的 BrainPrompt_turix里面藏着不少实战经验页面还在加载就先算 Success、连续 5 步卡住再算 Failed、发现屏幕上对后续有用的信息就提醒 Actor 用record_info存下来……2.3 Actor把目标变成手脚actor_step() 收到 Brain 的next_goal和截图后输出最多 10 个按顺序执行的动作get_next_action点击归一化到 0~1000 的坐标、输入文本、滚动、打开 App、record_info把屏幕上的信息写进记忆文件等。动作执行由 controller/service.py 的multi_act()完成动作目录注册在 controller/registry/——这就是热插拔的关键新增一种动作只需在注册表加一项Actor 的输出模型会自动带上它_setup_action_models。一个有意思的细节当 Actor 执行record_info时系统会自动把内容写进记忆库并登记到记忆索引里get_next_action 中的 record_info 分支描述自动从内容或 Brain 的目标里推导——Actor 不需要自己写摘要。2.4 Memory让长任务不迷路桌面任务动辄几十步历史消息会迅速撑爆上下文。Memory 模型系统提示词见 MemoryPrompt负责在后台做分层压缩步骤历史 ├─ pending刚发生、还没评估的 ├─ recent已评估的近期步骤预算 memory_budget_tokens └─ summary更早步骤的压缩摘要预算 summary_memory_budget_tokens当 recent 超出预算默认 2000 token见 examples/config.json_summarise_recent_memory 会调 Memory 模型压成已完成动作 / 当前应用状态 / 收集到的信息 / 错误与恢复 / 未完成目标五段式摘要压缩前的原始文本会存成快照memory_snapshots/摘要本身也会被结构化落盘成一条条记录record_store.py供 Brain 之后按名字调回每步结束后save_memory()把全部状态写到memory.jsonl配合resume: true可以中断后从断点恢复任务。这套压缩不丢证据的设计是长任务稳定性的核心。三、换个模型只需改 config.json四个角色在 examples/config.json 里各自独立配置支持 TuriX 官方端点、OpenAI 兼容 API、Ollama 本地模型等brain_llm: { provider: ollama, model_name: llama3.2-vision, base_url: http://localhost:11434 }, actor_llm: { provider: ollama, model_name: llama3.2-vision, base_url: http://localhost:11434 }, memory_llm: { provider: ollama, model_name: llama3.2-vision, base_url: http://localhost:11434 }, planner_llm:{ provider: ollama, model_name: llama3.2-vision, base_url: http://localhost:11434 }启动入口是 examples/main.py构建好四个 LLM 后注入 Agent四个模型还会被 to_structured() 统一包装上结构化输出能力不同厂商走不同机制保证 Brain/Actor 的 JSON 稳定可解析。 实用搭配思路Brain 用视觉最强的模型它要看图Actor 用便宜快的模型动作输出相对简单Planner/Memory 可以用中等模型——成本直接降一大截。四、一张图总结四模型协作┌──────────────────────────────────────────────────────┐ 任务 → │ Planner分步计划 搜索 选 Skills仅开工前一次 │ └──────────────────┬───────────────────────────────────┘ ▼ ┌─────────────────────────────────────┐ │ 循环每步 2 秒一拍 │ │ Brain: 截屏→评估上步→给出 next_goal │ │ Actor: 目标→0~10个动作→Controller执行│ │ Memory: 后台压缩历史 / 落盘可恢复 │◄── record_info └─────────────────────────────────────┘对应到源码地图方便你继续深挖主循环与四模型装配src/agent/service.py四套系统提示词src/agent/prompts.py结构化输出Brain/Actor/Memory/Planner 各自 Schemasrc/agent/output_schemas.py记忆落盘与检索src/utils/record_store.py、src/utils/brain_search.pySkills 技能手册加载src/utils/skills.py五、写在最后TuriX 的四模型并不是噱头而是把桌面自动化里三种截然不同的能力——规划、观察判断、精确执行——分配给了可以独立换件的模型插槽再用 Memory 把长任务托住。理解了这个循环Planner 一次 → Brain/Actor 每步接力 → Memory 常驻后台你再去读 service.py 的 1700 行代码就不会迷路了。如果你想动手体验macOS 15 下按 README 配置权限与模型改好 examples/config.json 的agent.task跑python examples/main.py就能亲眼看着这四个角色接力把任务做完。【免费下载链接】TuriX-CUAThis is the official website for TuriX Computer-use-Agent项目地址: https://gitcode.com/gh_mirrors/tu/TuriX-CUA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表