interval-injector:按步數或時間向對話中定期注入上下文

前言

在 DSH / Cordis 裏跑 agent 時,system prompt 每輪都會重送,但它始終固定在整段對話的最前面。對話一長,後面的 user / assistant 內容會把前面的指示「擠」到注意力邊緣,模型更容易偏離最初約束。常見補救是縮短會話、手動粘貼提醒,或把規則寫進每輪 user 消息——要麼打斷工作流,要麼維護成本高。

interval-injector 是維護者 rainfishs 發佈的通用注入器:在 agent 運行過程中,按「步數」或「時間間隔」(先到先觸發)把一段可配置文字,以 user 角色插入對話歷史,並儘量靠近即將生成的模型回答位置。換 text 即可換用途,不綁定某一種業務場景。

這是什麼

interval-injector(倉庫 rainfishs/dsh-interval-injector)面向 DSH 0.2 及以上與 Cordis agent 插件體系。它解決的是長對話裏 system 指示被稀釋的問題,用週期性 user 消息把同一段上下文重新推到模型附近。

套件在 package.json 中聲明 dsh.bundle.patch,安裝後成爲 profile 上的一層組合包:cordis.patch.yml 會插入 interval-injector 一行,所有 session 都會生效。0.1 時代需掛在 agent preset 的 row;0.2 起安裝完即生效,不必再手改 preset。

當前 package 版本爲 0.2.0,許可證 MIT,運行時要求 Node ^22.19.0 || >=24.0.0。

核心功能

下面介紹插件在資料中明確描述的行爲。

觸發條件

  • everyNSteps:每隔若干個「進入步數」注入一次;設爲 0 表示關閉該條件。
  • refreshIntervalMs:距上次注入超過指定毫秒數則注入;設爲 0 表示關閉該條件。
  • 兩個條件哪個先到就先注入一次;若兩者均爲 0,整支插件等效關閉。

注入方式

  • 監聽 agent/pre-step(waterfall),在 next() 之後把消息接在尾端,並以 { prepend: true } 註冊,排在最靠近模型回答的位置。
  • 注入內容來自 config.text;空字符串時插件不作用。
  • 空回合與被拒絕的回合不注入,避免無請求卻多出一條 user 消息。
  • 每個 agent 用 WeakMap 單獨計數,session 結束可回收;停用插件時監聽隨 fiber 移除。
  • 零依賴:消息結構自行構建(randomUUID + 遞歸凍結),純 JS,無需 build。
  • 消息 source 使用 { kind: 'interval-injector', form: 'notice', summary }(0.2 起不再使用共通的 plugin kind)。

安裝與啓用

DSH 0.2 以上在目標 profile 下執行:

dsh plugin --profile web add github:rainfishs/dsh-interval-injector

將 --profile 後的 web 換成你要掛載的 profile 名。也可在 GUI 插件頁粘貼 https://github.com/rainfishs/dsh-interval-injector,或本機絕對路徑安裝。

安裝後由組合包 patch 生效,無需再在 preset 裏單獨掛 row。

配置說明

插件自帶的 row 沒有內置 config;文字與節奏屬於部署側,應在 profile 自己的 cordis.patch.yml 裏覆蓋同一行。注意:config 是整塊取代,不是深度合併,覆蓋時必須寫全需要的字段。

- id: interval-injector
  name: interval-injector
  config:
    everyNSteps: 20
    refreshIntervalMs: 1800000
    text: |
      (想定期重貼的內容)
字段 默認 說明
text (必填) 每次注入的文字;空字符串則插件不作用。
everyNSteps 12 每隔幾個「進入步數」注入一次;0 關閉。
refreshIntervalMs 600000 距上次注入超過的毫秒數;0 關閉。
summary 定期注入 對話列表收合時的單行說明。

典型用法

1、確定要在長會話中反覆提醒模型的內容(規範、任務摘要、工具約束等),寫入 text 多行字符串。

2、按會話密度選 everyNSteps:交互頻繁時可設小一些;若更關心「多久沒提醒就補一次」,調大 refreshIntervalMs(例如 README 示例中的 1800000,即 30 分鐘)。

3、保存 profile 的 cordis.patch.yml 後重啓或按你的 DSH 流程 reload,新開或繼續 session 觀察對話列是否出現帶 summary 的注入條目。

用途完全由 text 決定:同一插件可充當「定期重申 system 要點」「滾動任務清單」等,資料未限定單一場景。

適用場景與注意

適合需要在不結束 session 的前提下,週期性把同一段上下文推回模型附近的 DSH / Cordis 開發者。不適合期望改 system prompt 位置或做一次性注入的場景——本插件刻意把內容做成 user 消息插在歷史中間。

安裝前請自行查看 GitHub 源碼與 MIT 許可證。插件以當前 DSH 進程的權限運行,注入內容會進入對話歷史並參與後續推理,請勿在 text 中放入 secrets 或未審覈的第三方指令。

DSH 生態強調「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

interval-injector 用步數與時間雙軌觸發,把可配置文字定期插入對話、靠近模型輸出位置,緩解長對話裏指示被稀釋的問題。細節與更新以倉庫 README 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/rainfishs/dsh-interval-injector
  • GitHub:https://github.com/rainfishs/dsh-interval-injector
羽毛球分组比赛记分
小程序二维码

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

小夜