前言¶
在 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。