前言¶
在 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 / 幻方无官方从属关系。