<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>移动测试 on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/%E7%A7%BB%E5%8A%A8%E6%B5%8B%E8%AF%95/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Mon, 21 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/%E7%A7%BB%E5%8A%A8%E6%B5%8B%E8%AF%95/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Google ARTEMIS 源码深度解析：LangGraph 多 Agent 编排 Android 自动化，99%&#43; AndroidWorld SOTA 的背后</title>
        <link>https://www.yesmiracle.net/post/20260921-google-artemis-deep-dive/</link>
        <pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20260921-google-artemis-deep-dive/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20260921-google-artemis-deep-dive/cover.svg" alt="Featured image of post Google ARTEMIS 源码深度解析：LangGraph 多 Agent 编排 Android 自动化，99%&#43; AndroidWorld SOTA 的背后" /&gt;&lt;p&gt;如果你上周听说了 Google 开源了一个叫 &lt;strong&gt;ARTEMIS&lt;/strong&gt; 的 Android 自动化项目——自然语言指令驱动真实 Android 设备，99%+ 的 AndroidWorld 完成率，原生 MCP Server 支持 Gemini/Claude/Cursor/Codex 等 AI 编码助手——你可能以为它又是一个「用 LLM 调 ADB」的玩具。&lt;/p&gt;
&lt;p&gt;但实际读下来，ARTEMIS 的工程深度远超我的预期。它不只是把「看屏幕 → 决策 → 点击」这个循环套上了 LLM，而是在 LangGraph 上构建了一套&lt;strong&gt;生产级的多 Agent 编排系统&lt;/strong&gt;，有两个完整的执行模式引擎、一个可插拔的感知流水线，和一套 MCP 生态集成层。&lt;/p&gt;
&lt;p&gt;这篇文章从源码层面拆解它的架构设计。在开始之前，先交代一下我研究后的几个核心判断：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ARTEMIS 是当前&lt;strong&gt;开源 Android 自动化领域工程最完善的项目&lt;/strong&gt;，没有之一&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flash 模式&lt;/strong&gt; 3-5s/step 的反应速度不是靠更小的模型，而是靠&lt;strong&gt;精巧的上下文压缩和状态管理&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro 模式&lt;/strong&gt;的多 Agent 编排（Planner → Operator → Checker → Explorer）是 LangGraph 在实际产品中我看到过的最完整落地&lt;/li&gt;
&lt;li&gt;代码归属争议是真实存在的——228/229 个文件与 Minitap 的 mobile-use 项目完全相同&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;1-项目概览&#34;&gt;1. 项目概览&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;元数据&lt;/th&gt;
          &lt;th&gt;值&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;仓库&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;github.com/google/artemis&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;作者&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Farley Wang (&lt;a class=&#34;link&#34; href=&#34;mailto:farleyw@google.com&#34; &gt;farleyw@google.com&lt;/a&gt;)&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;语言&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Python 3.12+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;许可&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;Apache 2.0&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Forks&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;806&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Open Issues&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;98&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;创建&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;2026-08-13&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;最后推送&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;2026-09-12&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;核心依赖&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;LangGraph, LangChain, MCP, ADB, OpenCV&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;依赖栈分四个层次：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;编排层&lt;/strong&gt;：LangGraph 1.0+、LangChain Core、LangChain MCP Adapters&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LLM 层&lt;/strong&gt;：Google GenAI SDK、LangChain Google GenAI、LangChain OpenAI、LangChain Anthropic——支持 Gemini、Claude、GPT-4o、Qwen-VL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设备层&lt;/strong&gt;：adbutils、uiautomator2、scrcpy&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;感知层&lt;/strong&gt;：OpenCV、Pillow、Tesseract OCR&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-架构全景langgraph-多-agent-编排&#34;&gt;2. 架构全景：LangGraph 多 Agent 编排&lt;/h2&gt;
&lt;p&gt;ARTEMIS 的源码结构清晰地反映了其架构分层：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;artemis/
├── agents/          # Agent 节点实现 (9 个 Agent)
│   ├── flash/       # Flash 模式（反应式循环）
│   ├── operator/    # Pro 模式的核心执行 Agent
│   ├── planner/     # 计划维护 Agent
│   ├── checker/     # 验证 Agent
│   ├── explorer/    # 目标预检 Agent
│   ├── validator/   # 动作后验证 Agent
│   ├── summarizer/  # 历史压缩 Agent
│   ├── video_analyzer/ # 视频回放分析 Agent
│   └── diagnoser/   # ADB 诊断 Agent
├── graph/           # LangGraph 状态图定义
├── tools/           # 工具函数层
├── controllers/     # 统一设备控制器
├── drivers/         # 设备驱动抽象层
├── runtime/         # 后台服务层
├── llm/             # LLM 路由与可靠性层
├── memory/          # 记忆系统
└── mcp/             # MCP 集成
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;状态图stategraph的核心设计&#34;&gt;状态图（StateGraph）的核心设计&lt;/h3&gt;
&lt;p&gt;文件 &lt;code&gt;artemis/graph/graph.py&lt;/code&gt;（44,453 bytes）和 &lt;code&gt;artemis/graph/state.py&lt;/code&gt;（5,552 bytes）定义了完整的 LangGraph 状态机。&lt;/p&gt;
&lt;p&gt;State 的字段按职责分四组：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;控制平面&lt;/strong&gt;：&lt;code&gt;initial_goal&lt;/code&gt;、&lt;code&gt;injected_instruction&lt;/code&gt;、&lt;code&gt;user_stop_requested&lt;/code&gt;（latch 语义）、&lt;code&gt;checker_success&lt;/code&gt;、&lt;code&gt;run_outcome&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;感知数据&lt;/strong&gt;：&lt;code&gt;latest_ui_hierarchy&lt;/code&gt;、&lt;code&gt;latest_screenshot&lt;/code&gt;、&lt;code&gt;indexed_points&lt;/code&gt;、&lt;code&gt;indexed_elements&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;回合产物&lt;/strong&gt;：&lt;code&gt;structured_decisions&lt;/code&gt;、&lt;code&gt;last_execution_result&lt;/code&gt;、&lt;code&gt;open_incident&lt;/code&gt;、&lt;code&gt;last_closed_incident&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;子 Agent 状态&lt;/strong&gt;：&lt;code&gt;subagent_calls&lt;/code&gt;、&lt;code&gt;operator_tool_limit_exceeded&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;关键设计选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;extra=&amp;quot;forbid&amp;quot;&lt;/code&gt;&lt;/strong&gt;：State 不接受未声明的字段写入。LangGraph 中节点可能向 State 写入任何键，这个配置强制每写入一个字段必须先显式声明——避免幽灵键导致的状态不一致&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;sticky_or&lt;/code&gt;&lt;/strong&gt;：&lt;code&gt;user_stop_requested&lt;/code&gt; 字段使用 latch 语义——一旦设为 True 就不可逆转。这是安全设计：如果用户要求停止，后续节点不能取消这个信号&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;take_last&lt;/code&gt;&lt;/strong&gt;：大部分字段使用后写入者覆盖（last-write-wins）的 reducer&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;pro-模式的多-agent-工作流&#34;&gt;Pro 模式的多 Agent 工作流&lt;/h3&gt;
&lt;p&gt;Pro 模式的核心编排逻辑在 &lt;code&gt;graph.py&lt;/code&gt; 中。它不是简单的「调用 LLM → 执行 → 重复」，而是一个&lt;strong&gt;异步多 Agent 协作图&lt;/strong&gt;：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;用户指令 → Planner（维护计划）→ Operator（执行动作）
    → Explorer（Safety Net 预检）→ Checker（验证检查点）
    → Validator（动作后验证）→ Exit Settlement
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Operator 的 Incident 机制&lt;/strong&gt;是一个亮点：当 Explorer 预检发现某个动作被阻塞或失败时，不是直接把错误丢回给 LLM 等它随机重试，而是创建一个 &lt;strong&gt;execution incident&lt;/strong&gt; 留在 Operator 的上下文中。后续动作成功执行后会关闭 incident——这意味着 Operator 可以自己决定「换个方式达到同一目标」，而不需要专门的 Repair Agent。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-flash-模式3-5sstep-的反应式引擎&#34;&gt;3. Flash 模式：3-5s/step 的反应式引擎&lt;/h2&gt;
&lt;p&gt;Flash 模式的 runner 实现位于 &lt;code&gt;artemis/agents/flash/runner.py&lt;/code&gt;（51,614 bytes），是整个项目最大的单体文件。&lt;/p&gt;
&lt;h3 id=&#34;核心循环&#34;&gt;核心循环&lt;/h3&gt;
&lt;p&gt;Flash 是一个极简的 observe-and-act 循环：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;观察&lt;/strong&gt;：截屏 + 获取 UI 层次结构 + OCR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推理&lt;/strong&gt;：单次 LLM 调用，决定下一步动作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;执行&lt;/strong&gt;：通过 ADB/UI Automator 执行动作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;汇总&lt;/strong&gt;：异步生成历史摘要，压缩上下文&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;没有图编排、没有 Planner、没有 Checker——就是一段直的 while 循环。&lt;/p&gt;
&lt;h3 id=&#34;上下文压缩关键优化&#34;&gt;上下文压缩（关键优化）&lt;/h3&gt;
&lt;p&gt;Flash 能达到 3-5s/step 的效率，不是因为用了更快（更蠢）的模型，而是因为它在&lt;strong&gt;上下文管理上做了大量工程&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;文件 &lt;code&gt;artemis/agents/flash/context_compressor.py&lt;/code&gt;（20,864 bytes）实现了三层压缩：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;L1 - 视觉摘要&lt;/strong&gt;：将较旧的截屏替换为视觉摘要（summarizer 生成的文字描述），原始截屏在摘要后被丢弃&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L2 - 步骤压缩&lt;/strong&gt;：将已完成的步骤压缩为可搜索的 chunk，每个 chunk 包含步骤摘要 + 关键截图&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L3 - 历史归档&lt;/strong&gt;：当上下文超过配置阈值时，将早期回合整体归档为「Era」，通过 &lt;code&gt;search_history&lt;/code&gt; 按需召回&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这意味着 Flash 在理论上可以无限回合运行——&lt;code&gt;agent.flash.max_turns = 0&lt;/code&gt;（默认无限）不是因为「反正不会跑那么远」，而是因为压缩机制确保了上下文不会爆炸。&lt;/p&gt;
&lt;h3 id=&#34;关键缺陷来自-readme&#34;&gt;关键缺陷（来自 README）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;没有任务计划或笔记&lt;/li&gt;
&lt;li&gt;没有执行前的 Safety Net&lt;/li&gt;
&lt;li&gt;没有检查点验证或最终报告&lt;/li&gt;
&lt;li&gt;没有 ADB shell 权限&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;4-pro-模式15-40sstep-的多-agent-协作&#34;&gt;4. Pro 模式：15-40s/step 的多 Agent 协作&lt;/h2&gt;
&lt;h3 id=&#34;planner计划维护-agent&#34;&gt;Planner（计划维护 Agent）&lt;/h3&gt;
&lt;p&gt;Planner 维护一个&lt;strong&gt;活着的 Markdown 计划文档&lt;/strong&gt;。这不是一次性生成的静态计划——它在任务执行过程中持续更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Milestones&lt;/strong&gt;：顶层子目标（&lt;code&gt;[ ]&lt;/code&gt; 和 &lt;code&gt;[x]&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verify items&lt;/strong&gt;：每个 milestone 下的验证条件（&lt;code&gt;verify:&lt;/code&gt; 前缀）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assert items&lt;/strong&gt;：断言条件（&lt;code&gt;assert:&lt;/code&gt; 前缀）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checkpoints&lt;/strong&gt;：自动生成的检查点，供 Checker 节点验证&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;计划文件本身是 Markdown，&lt;code&gt;artemis/utils/plan_grammar.py&lt;/code&gt; 中维护了一个完整的 Markdown 解析器，用于提取 milestone、check items、subgoal hash 等结构。&lt;/p&gt;
&lt;h3 id=&#34;checker只读验证-agent&#34;&gt;Checker（只读验证 Agent）&lt;/h3&gt;
&lt;p&gt;Checker 的核心职责：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;验证检查点（&lt;code&gt;verify&lt;/code&gt; / &lt;code&gt;assert&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;在最终出口执行 Final Review——对比原始目标 vs 实际结果&lt;/li&gt;
&lt;li&gt;生成 verdict（通过/失败/待定）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Checker 不修改任何状态。它的输出写入 &lt;code&gt;operator_feedback&lt;/code&gt; 字段，该字段作为 &lt;code&gt;[checker]&lt;/code&gt; 标签注入到 Operator 的下一次 Prompt 中。&lt;/p&gt;
&lt;h3 id=&#34;explorersafety-net-核心&#34;&gt;Explorer（Safety Net 核心）&lt;/h3&gt;
&lt;p&gt;Explorer 在 Operator 调用每个动作之前检查目标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;通过 UI 树定位目标（XML-first）&lt;/li&gt;
&lt;li&gt;如果 XML 找不到，回退到像素级别的视觉定位（坐标 + OCR）&lt;/li&gt;
&lt;li&gt;热度等级：&lt;code&gt;flash&lt;/code&gt; / &lt;code&gt;pro&lt;/code&gt; / &lt;code&gt;ultra&lt;/code&gt;（用户配置，Agent 无权选择）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 Explorer 发现目标不可达，它创建一个 execution incident，Operator 在后续回合中自行恢复。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;5-设备控制层的三层抽象&#34;&gt;5. 设备控制层的三层抽象&lt;/h2&gt;
&lt;p&gt;ARTEMIS 的设备控制分为三个层次：&lt;/p&gt;
&lt;h3 id=&#34;drivers设备抽象&#34;&gt;Drivers——设备抽象&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;drivers/
├── base.py          # BaseDeviceDriver 抽象类
├── factory.py       # 工厂模式创建驱动
├── android/         # Android 设备驱动
├── cloud/           # 云设备驱动（Firebase Test Lab）
└── mock/            # 测试 Mock 驱动
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;controllers统一控制层&#34;&gt;Controllers——统一控制层&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;unified_controller.py&lt;/code&gt;（36,104 B）是整个设备控制逻辑的枢纽：理解 UI 树、执行点击/滑动/输入、处理弹窗、管理应用生命周期、收集 Logcat。&lt;/p&gt;
&lt;h3 id=&#34;runtime后台服务&#34;&gt;Runtime——后台服务&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;device_lock.py&lt;/code&gt;（40KB）和 &lt;code&gt;helper_manager.py&lt;/code&gt;（45KB）是最大文件。设备锁确保同一台设备不会同时被两个任务调度；Helper Manager 管理安装在 Android 设备上的 Accessibility Service。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;6-mcp-集成将-android-设备接入-ai-ide&#34;&gt;6. MCP 集成：将 Android 设备接入 AI IDE&lt;/h2&gt;
&lt;p&gt;这是 ARTEMIS 最务实的工程决策。它不试图成为 IDE，而是通过 &lt;strong&gt;MCP Server&lt;/strong&gt; 让自己成为 IDE 的工具。&lt;/p&gt;
&lt;p&gt;MCP Server 提供 5 个 Eager 工具：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;MCP 工具&lt;/th&gt;
          &lt;th&gt;功能&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mobile_run_task&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;运行自动化任务（自然语言 → 执行 → 报告）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mobile_manage_task&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;管理任务生命周期&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mobile_get_device_state&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;获取设备状态&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mobile_inspect_trace&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;检查任务追踪记录&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;mobile_diagnose&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;运行 ADB 诊断&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Eager 工具会在 AI IDE 中自动可用，无需用户显式请求。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mcp_server/rules.md&lt;/code&gt;（13,606 bytes）是一个完整的「移动测试工程师思维」规则集，指导 AI IDE 在调用 ARTEMIS 时遵循正确流程：Active Exploration、Flash vs Pro 路由策略、延迟补偿、定位器模式选择。&lt;/p&gt;
&lt;p&gt;集成方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Antigravity/Codex&lt;/strong&gt;：&lt;code&gt;uv run artemis mcp --install antigravity&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;：&lt;code&gt;uv run artemis mcp --install claude&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cursor&lt;/strong&gt;：复制 &lt;code&gt;rules.md&lt;/code&gt; 到 &lt;code&gt;.cursor/rules/artemis.mdc&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;7-androidworld-sota99-的秘密&#34;&gt;7. AndroidWorld SOTA：99%+ 的秘密&lt;/h2&gt;
&lt;p&gt;AndroidWorld 是 Google Research 的 Android 自动化基准测试，涵盖 20+ 应用和 100+ 多步骤任务。ARTEMIS 宣称达到 &lt;strong&gt;99%+&lt;/strong&gt; 任务完成率。&lt;/p&gt;
&lt;p&gt;这个成绩来自几个工程选择的叠加：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;元素定位三层回退&lt;/strong&gt;：Accessibility 层次结构 → UI Automator → 像素级视觉定位。每层有独立的验证&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pro 模式的 Safety Net&lt;/strong&gt;：每次动作前由 Explorer 预检，不是动作出错后再重试&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context 三维压缩&lt;/strong&gt;：L1/L2/L3 压缩让长任务不会因上下文膨胀而退化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多模型支持&lt;/strong&gt;：支持 Gemini、Claude、GPT-4o、Qwen-VL，允许不同认知负载使用不同模型&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;但需要注意的是：99%+ 的数据来自 Google Research 的官方 AndroidWorld 基准。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;8-代码归属争议minitap-的-228229-文件&#34;&gt;8. 代码归属争议：Minitap 的 228/229 文件&lt;/h2&gt;
&lt;p&gt;在 ARTEMIS 开源后不久，&lt;strong&gt;Minitap&lt;/strong&gt;（一家移动测试公司）发现 ARTEMIS 的代码与他们的开源项目 &lt;strong&gt;mobile-use&lt;/strong&gt; 高度相似。根据 Minitap CEO Nicholas deHansehowercker 的声明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;「我们打开 Google 的 Artemis 仓库，认出了我们自己为 mobile-use 写的代码。然后我们在其提交历史中找到了我们的名字——以及&lt;strong&gt;删除这些名字的那次修改&lt;/strong&gt;。」&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Minitap 列出的对比数据：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ARTEMIS 共 229 个文件&lt;/li&gt;
&lt;li&gt;其中 &lt;strong&gt;228 个文件与 mobile-use 完全相同&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Google 在某个提交中删除了 Minitap 贡献者的作者信息&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;mobile-use 基于 Apache 2.0 协议发布，允许商业使用和衍生作品。争议焦点是 &lt;strong&gt;Google 是否遵守了 Apache 2.0 的署名要求&lt;/strong&gt;——使用 Apache 2.0 代码时必须保留原始版权声明。&lt;/p&gt;
&lt;p&gt;截至写作时，Google 已在 ARTEMIS 仓库中增加了对 mobile-use 的致谢，但 Minitap 认为这不足以弥补初始发布时移除署名的行为。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;9-总结artemis-的工程启示&#34;&gt;9. 总结：ARTEMIS 的工程启示&lt;/h2&gt;
&lt;p&gt;ARTEMIS 对 Android 自动化领域做了三件事：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一，验证了 LangGraph 多 Agent 编排的工程可行性。&lt;/strong&gt; Planner → Operator → Checker → Explorer 的协作模式不是学术 Demo，而是 40KB+ 的生产代码。&lt;code&gt;checkpoints.py&lt;/code&gt; 到 &lt;code&gt;graph.py&lt;/code&gt; 再到 &lt;code&gt;operator.py&lt;/code&gt;（60KB），这三层合起来构成了在开源项目中见过的最复杂的 LangGraph 落地。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，Flash/Pro 双模式是务实的架构决策。&lt;/strong&gt; 不是「一个模型走天下」，而是根据任务复杂度切换执行模式。Flash 模式 3-5s/step 用于确定性 UI 操作，Pro 模式 15-40s/step 用于复杂多步骤工作流。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，MCP 集成是基础设施层面的正确选择。&lt;/strong&gt; 与其重新发明一个 IDE，不如通过协议成为 IDE 的一部分。ARTEMIS 的 MCP Server + &lt;code&gt;rules.md&lt;/code&gt; 模式是将移动设备接入 AI 开发生态的最优雅方案之一。&lt;/p&gt;
&lt;p&gt;至于代码归属争议——技术上说，228/229 个文件相同意味着 ARTEMIS 的初始版本在很大程度上是 mobile-use 的重新打包。Google 后来补充了致谢，但初始发布时移除署名的行为在法律和社区规范上都站不住脚。这不会让 ARTEMIS 变差，但它提醒我们：即使是大公司，在开源发布时也需要更谨慎地处理上游贡献者的署名权。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;关于作者&lt;/strong&gt;：万戈（Chengqi），AI Infra 工程师，前华为/万翼，现构建 MCPZERO、ClawGuard 和 NanoRuntime。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
