前言¶
在 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 / 幻方無官方從屬關係。