dsh-plugin-artemis:在 DSH 里用自然语言驱动 Google ARTEMIS 做 Android 自动化

前言

在 DeepSeek Harness(DSH)里做 Android 操作时,常见做法是 adb 截图加点按:屏幕理解、下一步点哪里、点错了怎么纠,都压在主对话模型上。短流程还能撑,跨 App、多分支、长链路就容易漂。Google 开源的 ARTEMIS 把元素定位(无障碍树、OCR、视觉兜底)、Flash/Pro 两档执行、执行前校验和轨迹回放做成一套移动 agent;社区插件 dsh-plugin-artemis(维护者 coolluo,分类:工作流)负责通过 MCP 把它接进 DSH,并补上「一次工具调用等到任务结束」的交互。下面介绍它是什么、怎么装、怎么用。

这是什么

一句话:你说一句自然语言任务,ARTEMIS 在真机或模拟器上分步执行,DSH 通过插件拿回结果、截图和逐步 trace。

插件不打包 ARTEMIS 本体,只启动其 MCP 服务并暴露五个 artemis_* 工具;轻量 adb 点按仍可用其它工具,需要「专职司机」跑复杂 Android 流程时用本插件。

和裸 adb、和 ARTEMIS 原生 MCP 的差别

裸 adb 类工具把「看懂屏幕、决策、纠错」留给主模型;ARTEMIS 在 agent 侧系统化完成这些步骤。两者可并存:简单点按继续 adb,复杂任务交给 ARTEMIS。

ARTEMIS 自带的 MCP 里 mobile_run_task 异步返回 trace_id,调用方需自行定时轮询。本插件在 artemis_run_task 内轮询 mobile_manage_task(默认等待 120 秒,可配),结束一次性返回 result / error 等;超时则返回 status:"running" 与 trace_id,由 artemis_task 续收,避免重复提交。还支持 exec.signal 取消、截图经 DSH attachment store 进模型上下文,并附带 skills/artemis/SKILL.md 指导模型选 Flash/Pro 与排障顺序。

核心功能:五个工具

工具 作用 关键参数
artemis_run_task 派发任务并在同一次调用内等到结束 task、model(Flash/Pro)、device_serial、wait_seconds
artemis_task 收结果、中止或中途指导 action、trace_id、instruction、release_loop
artemis_device_state 查看设备层级或截图 view_type、device_serial
artemis_trace 回放 trace:摘要、搜索、单步、动作叠加图 action、trace_id、step_number
artemis_doctor 环境自检(含 ARTEMIS mobile_diagnose),可尝试修复 attempt_fix、probe_device、launch_avd、restart_server

典型对话形态(README 示例):

你: 打开设置 → 电池,读出当前电量
DSH → artemis_run_task("打开设置→电池,读出电量")
      └─ ARTEMIS: 截图 → 无障碍树 → 点设置 → 点电池 → 读数值 → 校验
DSH: 电量 53%,共 6 步,用时 41s(trace 可回放)

前置条件

安装插件前需自行准备 ARTEMIS 运行环境(非插件安装步骤的一部分):

需要 说明
ARTEMIS 源码 克隆 google/artemis,并在配置里填写 artemisPath
Python 3.12+ 与 uv ARTEMIS 用 uv 管理环境;也可使用已装好依赖的 python -m mcp_server
adb + Android 设备 USB 调试真机或已启动模拟器(adb devices -l 为 device)
模型 API key 写入 ARTEMIS 的 .env:GEMINI_API_KEY 或 OpenAI 兼容的 OPENAI_API_KEY(可配 DeepSeek,见下文)
Node 20+ DSH 要求

安装与启用

包已发布到 npm(包名 dsh-plugin-artemis)。在 DSH 中执行:

dsh plugin --profile desktop add dsh-plugin-artemis

将 artemisPath 指向本地 ARTEMIS 源码目录(含 mcp_server/、pyproject.toml),例如在 profile 的 cordis.patch.yml:

- insert:
    - id: dsh-artemis
      name: 'dsh-plugin-artemis'
      config:
        artemisPath: 'D:\Projects\artemis'

重启 DSH 后对模型说「用 artemis 看看设备」,或调用 artemis_doctor 验证环境。

配置项(插件侧)

字段 默认 说明
artemisPath '' ARTEMIS 源码目录
command / args '' / [] 显式启动命令;留空则尝试 uv run artemis mcp → python -m mcp_server
env {} 传给 MCP 进程的额外环境变量
defaultModel Flash 默认执行档
defaultDeviceSerial '' 默认设备 serial
defaultWaitSeconds / maxWaitSeconds 120 / 600 轮询等待预算
pollIntervalMs 3000 轮询间隔
callTimeoutMs / startupTimeoutMs 120000 / 180000 单次调用与首次握手超时
provideSkill true 是否注册自带 skill

改 ARTEMIS 的 .env 后,可调用 artemis_doctor({ restart_server: true }) 重连 MCP,无需重启整个 DSH。

典型用法:DeepSeek Flash 替代 Gemini

ARTEMIS 需要能看屏幕的多模态模型,README 说明可用 DeepSeek 的 deepseek-flash(OpenAI 兼容接口)。

1、在 ARTEMIS 的 .env 中配置:

OPENAI_API_KEY=sk-你的DeepSeek key
OPENAI_BASE_URL=https://api.deepseek.com

2、在 config/artemis.jsonc 中将 default、nodes.object_detector、nodes.hopper 等路由改为 openai / deepseek-flash,并按文档关闭 video_analyzer、调整 flash/pro 的 explorer 模式;完整项见仓库 docs/USING-DEEPSEEK.md。

3、注意两处坑:agent.flash.step_summarizer 需设 "enabled": false,否则会误建 Gemini 客户端;若 key 改后不生效,可在插件配置中加 env: { ARTEMIS_STANDALONE: '1' } 绕开 ARTEMIS 常驻 daemon。

排障与限制

任何报错可先跑 artemis_doctor;任务失败可用 artemis_trace({ action: "view_summary", trace_id }) 看逐步动作,或查看返回中的 stderr_log / stdout_log。README 列出了 MCP 起不来、空 key 行被误判为已配置、无设备等常见现象与处理。

已知限制包括:仅 Android(无 iOS);任务 token 消耗在 ARTEMIS 侧模型调用;一个 DSH profile 共享一个 MCP 进程;插件以当前 DSH 进程权限运行,安装前应阅读 MIT 许可的插件仓库 与 Apache-2.0 的 ARTEMIS 源码及许可证。

维护者在 Windows 11 + Android 模拟器 + DSH 0.2.1-rc.2 上验证了安装、五工具发现、artemis_run_task 与 trace 回放等路径;真机 DeepSeek Flash 下「设置 → 电池 → 读电量」约 5 步、28 秒量级(换模型后定位精度可能弱于 Gemini 生态下的官方 benchmark 表现)。

结尾

dsh-plugin-artemis 把 Google ARTEMIS 以 MCP 形式接入 DSH,用 artemis_run_task 把异步移动 agent 收成同步工具调用,适合需要自然语言派发、可验证步骤与 trace 回放的 Android 工作流。插件目录页:skillhub.cn/plugins/coolluo/dsh-plugin-artemis;源码与完整说明:github.com/coolluo/dsh-plugin-artemis。DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜