dsh-openjev-browser:用 OpenJev 做模型驅動瀏覽器操控,agent 不碰 DOM

前言

在 DSH 裏讓 agent 操作網頁,常見做法是整頁 DOM、可訪問性樹或大塊 HTML 塞進上下文。頁面一複雜,token 開銷和噪聲都會上來,模型還容易在無關節點裏迷路。openjev-browser 的 MCP stdio 版已經用本地決策模型把「該點哪個元素」收成單條結構化結果;dsh-openjev-browser 是其原生 DSH(cordis)插件移植,工具名與參數 schema 與 Python MCP server 一致,遷移時只需去掉 mcp__openjev-browser__ 前綴。維護者爲 belowthetree,分類屬於模型推理,當前 GitHub 星標爲 0。

這是什麼

一句話:dsh-openjev-browser 是以極小上下文開銷實現模型驅動瀏覽器操控的 DSH 插件。本地 OpenJev-4B 決策模型讀取頁面後只返回完成自然語言目標所需的那一個元素,agent 全程不接觸 DOM。瀏覽器側基於 playwright-core,插件版本 0.1.0,許可證 MIT。

核心功能

插件向 DSH 註冊一組瀏覽器工具,用途如下。

工具 用途
browser_open 打開 URL(auto / chrome / msedge / chromium,可複用已有瀏覽器配置)
browser_pick 讓 OpenJev 判斷哪個元素能完成自然語言目標
browser_click 按目標或 CSS 選擇器點擊
browser_type 向按目標或選擇器選中的元素輸入文本
browser_text 讀取頁面或單個元素的有界文本片段
browser_scroll 滾動頁面,或將某元素滾入視口
browser_screenshot 返回頁面截圖(可選目標元素高亮框)
browser_status 報告模型/服務檢測狀態與部署指引
browser_close 關閉瀏覽器會話

沒有可用模型時,目標驅動類工具(browser_pick,以及 click/type/text/scroll/screenshot 的 goal 路徑)會軟失敗並返回結構化部署指引;純 CSS 選擇器調用不依賴模型,始終可用。

噹噹前模型路由接受圖像輸入時(經 llm.resolveModelInfo 檢查),browser_screenshot 會內聯返回圖片;否則降級爲元數據文本並附 [image unavailable: ...],可改用 path 參數把文件存盤。

客戶端註冊「OpenJev 瀏覽器」設置分區,由僅監聽迴環地址的 API /dsh-openjev-browser/api 支撐;面板保存的值寫入 $DSH_HOME/dsh-openjev-browser.settings.json 並立即生效,無需重啓 DSH。

安裝與啓用

下面介紹從源碼構建並註冊到 DSH 的步驟。資料未給出 dsh plugin add github:... 一類一鍵安裝命令,請以 README 爲準。

1、克隆或取得插件源碼後,在插件目錄安裝依賴並構建(沙箱內若腳本受限,可加 --ignore-scripts):

pnpm install   # 沙箱內可用: pnpm install --ignore-scripts
pnpm build     # tsc(宿主側) + esbuild(客戶端) -> lib/

2、把構建產物目錄註冊到 DSH,在 cordis.patch.yml 中增加:

- insert:
  - id: dsh-openjev-browser
    name: dsh-openjev-browser

可選配置項(示例值爲默認值)可寫在同一 insert 下的 config 中,例如:

- insert:
  - id: dsh-openjev-browser
    name: dsh-openjev-browser
    config:
      openjevUrl: http://127.0.0.1:8080
      modelDir: null
      pythonPath: null
      autoStartServer: true
      serverPort: 8080
      serverStartupTimeoutMs: 240000
      browser: auto
      headed: false
      userDataDir: null
      maxCandidates: 80
      includeOffscreen: true
      maxNameLength: 90
      viewport: [1280, 900]
      timeoutMs: 30000
      debugDir: null

配置優先級爲:內置默認值 < loader patch 配置 < 設置文件;刪掉設置文件即回退到 patch 配置。

模型部署

插件不附帶模型權重,也不附帶 Python 運行時,需自行部署。設置面板「部署指引」卡片內有可複製的 agent 提示詞:粘貼到任意 DSH 會話後,agent 可完成 Python 環境、模型與冒煙自檢,並回報需填入的兩個路徑。詳細規範見倉庫內 docs/DEPLOYMENT.md。

部署完成後,插件按順序檢測:

  1. openjevUrl(默認 http://127.0.0.1:8080)上是否已有決策服務;
  2. 本地工件(config.modelDir、$OPENJEV_ARTIFACT、$OPENJEV_MODEL、~/.openjev/models/OpenJev-4B、~/.dsh/openjev/models/OpenJev-4B),按 manifest.json 與 COMPLETE 校驗;
  3. 裝有 openjev 包的 Python 解釋器(順序:config.pythonPath → $OPENJEV_PYTHON → PATH 上的 python)。滿足 2+3 時,首次使用可自動拉起 python -m openjev.runtime.server。

資料記載的 agent 輔助部署流程大致爲:在 DSH 會話工作區之外創建 Python 3.12 環境(默認 %USERPROFILE%\.dsh\openjev\runtime);用 uv pip install 安裝 torch 與 openjev[serve] @ git+https://github.com/ejhshen/OpenJev.git(PyPI 上 openjev 包名被佔用,必須走 git);下載 Hugging Face 倉庫 shenjunhao/OpenJev-4B(約 8 GB)並校驗工件;冒煙 python -m openjev.runtime.server --artifact <dir> 直至 /health 爲 ready;將 Python 路徑與模型目錄填入設置面板。

事後可用 CLI 探測:

node lib/setup.js detect          # 探測服務 / 工件 / python
node lib/setup.js print-config    # 輸出 cordis.patch.yml 配置片段

Windows 沙箱下,插件爲 Python 子進程重定向 TMP/TEMP/TMPDIR/TORCHINDUCTOR_CACHE_DIR 到 $DSH_HOME/openjev/tmp,避免 torch inductor 報臨時目錄不可用;若 pythonPath 指向工作區內解釋器且不可寫,會回退到解釋器旁的 .openjev-tmp/。

典型用法

在 DSH 會話中,agent 通過上述工具名調用即可,語義與 MCP 版一致。常見流程可以是:

  1. browser_open 打開目標 URL;
  2. 用自然語言目標調用 browser_pick 或帶 goal 的 browser_click / browser_type;
  3. 需要確認頁面文字時用 browser_text,需要視覺證據時用 browser_screenshot;
  4. 不確定環境是否就緒時先調 browser_status;
  5. 結束時 browser_close。

若已從 MCP 遷移,把原 mcp__openjev-browser__browser_* 改爲 browser_* 並保持參數不變即可。

開發側冒煙(mock 上下文,註冊工具並打開 about:blank):

pnpm typecheck
node scripts/smoke.mjs

適用場景與注意

適合需要在 DSH 內做網頁自動化、又希望控制上下文體積、讓「選元素」交給本地 OpenJev 而非整頁 DOM 的開發者。純選擇器驅動的點擊、輸入不依賴模型,適合已知穩定 DOM 的腳本化步驟;自然語言目標依賴已部署的 OpenJev 服務或本地工件與 Python 環境。

安裝前請自行閱讀 GitHub 源碼與 MIT 許可證。DSH 插件以當前 dsh 進程權限運行,瀏覽器可配置 userDataDir 複用登錄態,涉及賬號與隱私頁面時需評估風險。首次拉起決策服務時,serverStartupTimeoutMs 默認 240000 ms,資料提到首次 Triton JIT 可能需數分鐘。社區目錄站點與 DeepSeek / 幻方無官方從屬關係,本插件爲社區維護的 cordis 插件。

鏈接

  • 社區目錄頁:https://www.skillhub.cn/plugins/belowthetree/dsh-openjev-browser
  • GitHub:https://github.com/belowthetree/dsh-openjev-browser

經過上面的步驟,你可以在 DSH 裏用與 MCP 對齊的工具面做模型驅動瀏覽,並把頁面理解留在本地 OpenJev,而不是把 DOM 推給對話模型。

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

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

小夜