前言¶
在 DeepSeek Harness(DSH)裏跑智能體,上下文往往靠當前會話和手寫提示詞撐着。項目一多、回合一長,以前踩過的坑、整理過的流程、入庫的文檔很難在合適時機被撈回來。本地文件或 SQLite 方案能做關鍵詞檢索,但語義召回弱,記憶和資源也通常各管各的,換工具就要重導一遍。
下面介紹社區插件 dsh-openviking:把 OpenViking 接到 DSH,統一做語義檢索、資源管理、自動召回和會話記憶。維護者爲 Rxiain,倉庫採用 MIT 許可證,當前 GitHub 約 9 stars。
這是什麼¶
dsh-openviking 是面向 DeepSeek Harness 的 OpenViking 插件,在 DSH 側提供一組記憶相關模型工具與斜槓命令,底層讀寫 OpenViking 的 viking:// 虛擬文件系統。
與「只在本機堆 Markdown」相比,OpenViking 用向量召回加 L0/L1 摘要分層加載內容,遠程 URL 和本地文檔可通過 memadd 入庫;同一套庫可被 DSH、Claude Code、Codex、MCP 客戶端和 ov CLI 共享。插件還負責已索引倉庫上下文注入、按回合自動召回,以及會話同步與自動提交。
運行環境要求 Node ^22.19.0 或 >=24.0.0,插件類型爲 TypeScript,當前版本 0.1.0。
核心功能¶
記憶與檢索工具¶
插件向模型暴露以下工具(名稱與 README 一致):
| 工具 | 作用 |
|---|---|
memsearch |
語義搜索,模式 auto / fast / deep(deep 使用會話上下文) |
memfind |
快速語義查找,不帶會話上下文 |
memread |
讀取 viking:// URI,模式 abstract / overview / read / auto |
membrowse |
瀏覽 viking:// 文件系統,list / tree / stat |
memgrep |
精確或正則內容搜索,默認範圍 viking://resources/ |
memglob |
按 glob 模式枚舉文件 |
memadd |
在 viking://resources/ 下添加遠程 URL 或本地文本 |
memremove |
刪除資源,需字面量 confirm: true |
memqueue |
查看觀察者隊列狀態(嵌入、摘要生成等後臺任務) |
memcommit |
提交當前會話並提取持久記憶 |
memlearn |
主動沉澱經驗:寫/合併記憶或鑄 skill playbook,含脫敏、查重,並即時注入當前會話 |
自動召回與會話同步¶
每條用戶消息可觸發一次相關記憶召回(autoRecall),支持 user 與 agent 雙空間;可配置注入條數、相關度閾值、單條字符上限和 token 預算。同一條消息內還可按工具步驟間隔刷新,只注入新記憶。
對審計、恢復、補償、重放、驗證、修復、診斷、遷移等步驟化問題,插件會在普通全局召回之外啓用 procedure lane:從用戶記憶樹中篩選路徑含 方法論、playbook、workflow、runbook、pattern、case、skill 等標記的分支,最多檢索 16 個流程分支,每個分支限時 3 秒,失敗不阻斷當前模型步驟。
會話側支持按用戶回合數或時間間隔自動提交(autoCommit),把對話沉澱爲持久記憶。
斜槓命令¶
| 命令 | 作用 |
|---|---|
/memlearn <lesson> |
人工觸發記憶沉澱,與 memlearn 工具同源;不開啓模型回合,原始輸入不進會話日誌 |
安裝與啓用¶
使用前需有可訪問的 OpenViking 服務;插件默認連接 http://localhost:1933。
一鍵安裝(倉庫含預構建 lib/,無需本地構建):
sh install.sh [profile-name] # 默認 profile: dsh-openviking
或手動安裝:
dsh plugin --profile <name> add github:Rxiain/dsh-openviking
dsh --profile <name>
也可在 DSH 設置的插件配置裏添加。社區目錄頁:SkillHub - dsh-openviking。
連接 OpenViking 與賬號¶
管理命令需要 root 密鑰(本地服務通常在 ~/.openviking/root_api_key.txt):
ROOT=$(cat ~/.openviking/root_api_key.txt)
printf '{"url":"http://localhost:1933","api_key":"%s"}' "$ROOT" > /tmp/ov-root.conf
export OPENVIKING_CLI_CONFIG_FILE=/tmp/ov-root.conf
ov admin create-account dsh --admin dsh-admin
ov admin register-user dsh dsh --role user
ov admin regenerate-key dsh dsh
unset OPENVIKING_CLI_CONFIG_FILE && rm -f /tmp/ov-root.conf
將返回的密鑰填入插件配置的 apiKey,account 與 user 填對應賬號與用戶。
覆蓋配置¶
在 profile 的 cordis.patch.yml 中以 id: openviking 寫入完整配置(patch 會整體替換 config)。常用項示例:
- id: openviking
config:
endpoint: 'http://localhost:1933'
apiKey: !!js process.env.OPENVIKING_API_KEY ?? ''
account: ''
user: ''
agentId: 'deepseek-harness'
timeoutMs: 30000
stateFile: '~/.dsh/openviking/state.json'
repoContext:
enabled: true
cacheTtlMs: 60000
autoRecall:
enabled: true
limit: 6
scoreThreshold: 0.15
maxContentChars: 500
tokenBudget: 2000
agentSpaces: true
refreshSteps: 10
startupMapEveryTurns: 5
autoCommit:
enabled: true
turns: 3
intervalMinutes: 10
apiKey 對應 X-API-Key 頭;account、user、agentId 分別對應 OpenViking 的租戶、用戶與 agent 標識頭。stateFile 只存消息 id,不存正文或密鑰。
典型用法¶
語義檢索記憶¶
模型在需要歷史上下文時調用 memsearch 或 memfind。memsearch 的 deep 模式會結合當前會話上下文;只想快速查庫、不帶會話時用 memfind。
瀏覽與讀取資源¶
先用 membrowse 查看 viking:// 下的目錄結構,再用 memread 按層級加載:abstract(一句話)、overview(要點)到 read(全文),減少 token 佔用。
入庫與清理¶
把文檔或 URL 加到資源庫:
memadd # 在 viking://resources/ 下添加遠程 URL 或本地文本文件
刪除需顯式確認:memremove 並設置 confirm: true。
沉澱與會話提交¶
長對話結束後可調用 memcommit 提取持久記憶;中途也可用 /memlearn <lesson> 或 memlearn 工具把經驗寫入庫並去重。後臺處理進度用 memqueue 查看。
開啓 autoRecall 和 autoCommit 後,多數場景下記憶會在用戶發消息時自動注入、在若干回合後自動提交,無需每步手動調用。
適用場景與注意¶
適合誰: 已在跑 OpenViking(或計劃部署)的 DSH 用戶;需要跨會話、跨工具共享語義記憶和文檔資源;希望把流程類經驗(playbook、runbook 等)在相關任務時自動召回的團隊。
與本地方案的取捨: README 中的對比表指出,本地 FTS 擅長精確匹配,OpenViking 擅長語義召回和分層加載;若只需本機小文本、無跨工具需求,維護成本可能更低。本插件的價值在於把 OpenViking 能力原樣接到 DSH 工具鏈,並補上自動召回與會話同步。
安全與權限: 插件以當前 DSH 進程權限運行,可訪問你配置的 OpenViking 端點和 API 密鑰。安裝前請閱讀 GitHub 源碼 與 MIT 許可證,確認 memadd、memremove 等寫操作符合你的數據策略。SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。
DSH 生態強調「一切皆插件」;dsh-openviking 把 OpenViking 的檢索、資源管理與雙空間記憶接到 Harness 上,適合需要長期上下文和可複用流程知識的智能體開發。目錄頁:https://www.skillhub.cn/plugins/Rxiain/dsh-openviking;源碼與文檔:https://github.com/Rxiain/dsh-openviking。