dsh-dqy:在 DSH 上把手機通知變成可值守的 Android 自主體

前言

在 DeepSeek Harness(DSH)裏做智能體,常見路徑是等用戶在桌面輸入、再調工具回應。手機上的私信、通知卻是另一路事件:來得零散、平臺各異,有的還沒有穩定協議,只能走 UI 自動化。若把「聽通知 → 判斷是否該回 → 真機在屏幕上操作 → 可選語音」串成一條可插拔鏈路,並默認以安全爲先(少發、可確認、可急停),開發者就不必爲每個 App 硬寫一整條腳本。

下面介紹維護者 xiaozqi 的工作流類插件 dsh-dqy(包名 dsh-dqy,目錄頁見 SkillHub)。README 將其定位爲面向 DSH 的事件驅動值守智能體:監聽通知、過濾噪音、LLM 決策、護欄校驗、UI 執行、語音輸出。在 DSH 內可經宿主模型通道(host-llm)決策,README 與 package 描述均強調免獨立 API key 的使用方式(具體以你當前 DSH 與 Cordis 配置爲準)。

這是什麼

dsh-dqy(項目 README 亦稱「青魚」)是掛在 DSH 上的 Android 自主體插件:通過 adb 驅動真機,用 LLM 決策環閉合「通知進 → 過濾 → 判斷 → 動手 → 出聲」。當前版本在 package.json 中爲 0.3.0,許可證 MIT,要求 Node >= 22,peer 依賴含 @deepseek-ai/cordis 4.1.0 等。

與「只做執行器」的插件不同,本項目強調上層閉環:通知路由、過濾、護欄、狀態機與 YAML 平臺配方複用;執行層可選用 uiautomator2、adb 或視覺模板降級鏈。

核心功能

值守閉環

README 描述的核心鏈路爲:

通知 → 過濾噪音 → LLM 決策 → 護欄硬校驗 → UI 自動化執行 → 語音輸出。

應用層包含自治循環(think→act→observe)、RunMode 運行模式(總開關 / 試運行 / 急停)、出站硬護欄、消息狀態機與冪等,以及 dm-watch-pipeline 編排通知到發送的全過程。

平臺與當前狀態

README 用表格如實標註各平臺優先級(節選):

平臺 狀態 說明
抖音私信 核心驗證鏈路 無可用個人協議,UI 自動化;v0.1 優先打磨該條
B 站 / 微博 / 小紅書 適配器已建,待配方化 優先級低於抖音穩定
QQ 協議優先 有成熟協議通道,不強行 UI 自動化
支付寶 非目標 不做、不接受相關 PR

v0.2 起的安全取向

README 寫明 v0.2 優先修「會做錯事」處,而非堆功能,要點包括:

  1. 出站策略閘:RunMode.decide() 爲唯一判定點;/halt 可攔住自主循環。
  2. 默認不開口:autonomy.autoActions 默認空;發消息、發圖等默認進黑名單;需主人 /confirm approve 才執行。
  3. 提示注入邊界:人格與通知入口 fail-closed(loopback、token、體積上限、App 白名單等)。
  4. 設備串行 + 超時:SerialDevice 互斥;工具帶 timeoutMs。
  5. 發送真實性:中文走 ADBKeyBoard base64;發送成功需「輸入框清空 + 新氣泡」等校驗。
  6. 測試:tests/safety.mjs 與原有值守測試一併運行(npm test)。

項目聲明:不做隱形代聊;使用時應告知對話方當前由 AI 值守應答。

模型與工具面

基礎設施層提供 host-llm.ts(借用 DSH 宿主模型通道)與 http-llm.ts(OpenAI 兼容兜底)。接口層註冊 fish_apps、fish_app_run 等工具,經 AdapterRegistry 按 App 能力派發,避免工具層寫滿 App 分支 if-else。

平臺 UI 路徑可寫成 YAML 配方(示例見 assets/recipes/douyin.yml),步驟含 open_app、tap、input、send、verify 等,佔位符 {peer}、{reply} 由運行時填充。

安裝與啓用

環境與依賴

從倉庫 package.json 可見:

  • 運行時:Node.js >= 22
  • 構建:npm run build(TypeScript 編譯到 lib/)
  • 測試:npm test(tests/smoke.mjs、tests/safety.mjs)

README 三步上手中的安裝表述爲:在 DSH 裏安裝 dsh-dqy 的包目錄(或按項目說明從 git 安裝)。資料中未給出固定的 dsh plugin add … 單行命令;請以你使用的 DSH / Cordis 插件安裝方式與倉庫 cordis.patch.yml 爲準,安裝前閱讀源碼與 MIT 許可證。

連接手機與通知

  1. 手機開啓 USB 調試,通過 adb 連接。
  2. 若要接收通知:編譯安裝 android/notify-listen,在系統「通知使用權」中授權(applicationId 爲 com.dqy.notify)。

白名單與發送開關

先配置允許對話的對象,再逐步打開發送能力。README 示例:

control:
  allowedPeers:
    - com.tencent.mobileqq:張三

在 DSH 會話中使用值守相關命令(README 原文):

/watch            # 先看她現在爲什麼不說,照着提示配
/watch enable     # 打開發送總開關(此時仍是試運行)
/watch live       # 從試運行切到真實發送

默認狀態下插件只觀察、寫日記、不對外說話。擬執行的對外動作進入確認收件箱:/confirm list 查看,/confirm approve <id> 後才真正執行。

典型用法與架構要點

設計原則(README)

  1. 默認關閉自動發送;試運行只記錄擬發送內容。
  2. 規則模糊或校驗失敗時優先不回覆。
  3. 消息與發送持久化,支持斷點續跑與復盤。
  4. 有協議則走協議,UI 自動化爲兜底。
  5. 執行層可換,新增 App 主要增加 YAML 配方。

分層結構

README 給出嚴格向內依賴的分層:入口 src/index.ts 裝配;interface/ 適配工具與命令;application/ 決策與值守;domain/ 端口與模型;infrastructure/ adb、LLM、記憶、視覺與配方加載。UI 驅動經 FallbackUiDriver:主 uiautomator2 → 備 adb → 視覺模板。

與生態內其他項目的差異(README 表格):例如 dsh-mobile-use 偏執行器,本項目是上層閉環;OneBot 類方案覆蓋有協議平臺,本項目側重無協議私信場景的配方化 UI 路徑。

適用場景與注意

適合誰:已在用 DSH、希望把 Android 通知驅動的私信值守(當前 README 以抖音私信爲核心驗證)接到宿主模型上,且能接受「默認靜默 + 人工確認 + 急停」安全模型的開發者。

務必注意:

  • 插件隨 當前 dsh 進程權限運行,可訪問你配置的 adb 設備與網絡;安裝前通讀倉庫源碼與 tests/safety.mjs 所覆蓋的閘門行爲。
  • 真機自動化依賴環境與 App UI 變化,嗶哩嗶哩、微博、小紅書等仍處於適配器待配方化階段,勿按生產全天候話術預期。
  • 資金類、支付寶相關能力爲非目標;QQ 走協議優先路線,與純 UI 配方路徑不同。
  • 社區目錄 SkillHub 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;版本與星標以各站點實時的倉庫與目錄信息爲準。

結尾

dsh-dqy 把「通知驅動的真機值守」收成 DSH 裏可配置的一條工作流:LLM 借宿主通道決策,護欄與運行模式約束出站,YAML 配方描述各 App 的 UI 路徑。若你正在 DSH 上擴展能聽手機、又默認少動的智能體,可從倉庫 README 的「三步上手」與 control.allowedPeers、/watch 系列命令開始驗證。

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

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

小夜