安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add dsh-opencontext
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
README
为 DeepSeek Harness (DSH) agent 提供持久化记忆与检索增强上下文的插件,
基于 @melandlabs/opencontext。
- 包名:
dsh-opencontext - 协议:Apache-2.0
- Node 版本:
^22.19.0 || >=24.0.0 - 工具前缀:
oc_* - 技能:
opencontext - 命令:
/oc doctor
安装
从 npm 安装(推荐)
# 直接从 npm 安装
dsh plugin --profile web add dsh-opencontext
# 确认已挂载
dsh --profile web --dump-config
# ... 应包含 `id: dsh-opencontext`
# 启动 DSH web 并验证
dsh --profile web web
# 访问 http://127.0.0.1:3080/plugins,确认 dsh-opencontext 显示 "Enabled"
从源码安装(开发用)
# 1. 进入插件目录
cd /path/to/opencontext/plugins/dsh-opencontext
# 2. 构建插件(生成 lib/)
pnpm install
pnpm build
# 3. 注册到 DSH profile
dsh plugin --profile web add /path/to/opencontext/plugins/dsh-opencontext
# 4. 确认已挂载
dsh --profile web --dump-config
# ... 应包含 `id: dsh-opencontext`
# 5. 启动 DSH web 并验证
dsh --profile web web
# 访问 http://127.0.0.1:3080/plugins,确认 dsh-opencontext 显示 "Enabled"
功能
核心工具(8 个)
| 工具 | 用途 |
|---|---|
oc_search |
在长期记忆(memory + insights + knowledge)中检索。 |
oc_remember |
用户明确要求时,持久化一条记忆。 |
oc_memory_list |
列出当前作用域的近期记忆条目。 |
oc_memory_get |
通过 id 读取一条或多条记忆。 |
oc_memory_revise |
软废弃旧条目,存储新内容作为后继。 |
oc_memory_retire |
软废弃一条记忆。 |
oc_prepare_context |
手动构建一个字节受限的 <opencontext_evidence> 上下文块。 |
oc_capture_source |
捕获任意内容源以供后续检索。 |
摘要与结果工具(3 个)
| 工具 | 用途 |
|---|---|
oc_session_summary |
在自然断点生成并存储会话摘要。 |
oc_task_outcome |
记录任务结果、决策与成就。 |
oc_recent_summaries |
列出近期会话摘要与任务结果。 |
Insights 工具(2 个,可选)
| 工具 | 用途 |
|---|---|
oc_insights_search |
检索结构化 insights(决策、偏好、结果)。 |
oc_insight_capture |
从对话中捕获结构化 insight。 |
Knowledge/RAG 工具(3 个,可选)
| 工具 | 用途 |
|---|---|
oc_knowledge_search |
对已上传文档进行 RAG 检索。 |
oc_document_upload |
上传文档到知识库。 |
oc_document_list |
列出知识库中的所有文档。 |
所有工具成功时返回 { ok: true, value },失败时返回
{ ok: false, error: { code, message } } —— 永远不向模型抛出异常。
召回流水(Recall Waterfall)
每次 agent/pre-step 事件触发一次召回:
- 从最后一条用户消息中提取查询(截断到 256 字符)。
- 调用
backend.search({ query, limit: maxRecallItems, ... }), 由requestTimeoutMs限定超时。 - 将命中格式化为一个带
<opencontext_evidence>围栏的块,字节 上限为maxBytes(默认 8000)。 - 该块作为插件来源的用户消息追加到对话,头部明确标注为 不可信的历史证据。
- 任何后端错误都会被记入警告日志,本轮对话继续进行。
自动捕获
第二个 agent/pre-step 监听器在召回之后执行,将每条用户消息写入
存储,标记为 sourceType: "user_input"。受 config.capturePrompts
控制(默认 true,可设 OPENCONTEXT_DSH_CAPTURE_PROMPTS=0 禁用)。
默认采用 fire-and-forget 模式,不会阻塞轮次;如需严格顺序,
可开启 flushOnCapture: true。
轮次结束摘要
开启 autoSummarize 后,turn/end 监听器会:
- 生成当前轮次的简要摘要
- 将其存储为
turn-summary记忆 - 若启用
captureToolOutcomes,同时捕获工具结果
工具结果捕获
开启 captureToolResults 后,tool/result 监听器会将工具调用结果
捕获为 tool-interaction 记忆,形成可检索的工具交互日志。
技能:opencontext
在 apply 时注册。让模型在每次会话开始时即了解召回/捕获约定、
信任模型与全部 16 个 oc_* 工具的语义。
命令:/oc doctor
输出 JSON 状态:
{
"ok": true,
"plugin": "dsh-opencontext",
"backend": "lib",
"scope": "local:9cd22c419df9",
"db": "/Users/you/.opencontext/memory/store.db",
"probe": { "ok": true, "mode": "lib", "details": "db=/Users/you/.opencontext/memory/store.db" },
"recentCount": 0,
"features": ["insights", "knowledge", "prompt-capture"]
}
配置
按以下顺序解析(优先级从高到低):
cordis.patch.yml中id: dsh-opencontext的config块OPENCONTEXT_DSH_*环境变量ConfigSchema中的默认值
| 字段 | 类型 | 默认值 | 环境变量 |
|---|---|---|---|
baseUrl |
string | http://127.0.0.1:8000 |
OPENCONTEXT_DSH_BASE_URL |
authorization |
string | "" |
OPENCONTEXT_DSH_AUTHORIZATION |
scopeId |
string | "" (自动) |
OPENCONTEXT_DSH_SCOPE_ID |
timeoutMs |
number | 4000 |
OPENCONTEXT_DSH_TIMEOUT_MS |
requestTimeoutMs |
number | 1000 |
OPENCONTEXT_DSH_REQUEST_TIMEOUT |
maxBytes |
number | 8000 |
OPENCONTEXT_DSH_MAX_BYTES |
capturePrompts |
bool | true |
OPENCONTEXT_DSH_CAPTURE_PROMPTS (1/0) |
flushOnCapture |
bool | false |
OPENCONTEXT_DSH_FLUSH_ON_CAPTURE (1/0) |
maxRecallItems |
number | 8 |
OPENCONTEXT_DSH_MAX_RECALL_ITEMS |
autoSummarize |
bool | false |
OPENCONTEXT_DSH_AUTO_SUMMARIZE (1/0) |
captureToolResults |
bool | false |
OPENCONTEXT_DSH_CAPTURE_TOOL_RESULTS (1/0) |
enableInsights |
bool | true |
OPENCONTEXT_DSH_ENABLE_INSIGHTS (1/0) |
enableKnowledge |
bool | true |
OPENCONTEXT_DSH_ENABLE_KNOWLEDGE (1/0) |
仅作为开关:
OPENCONTEXT_DSH_HTTP_URL— 切到 HTTP 模式(任何非空值)。 KOL 制作期间不建议启用。
信任模型
召回块为主机提供的上下文,而非指令。块头显式标注其为不可信 的历史证据;若与用户请求冲突,以用户请求为准。该块从不进入 system-prompt 角色,而是作为插件来源的用户消息追加,模型可以在 不影响系统契约的情况下选择忽略。
开发
pnpm install
pnpm typecheck
pnpm test # 108 个单元测试
pnpm build # tsc → lib/
架构
┌──────────────────────────────────────────────────────────────────────────┐
│ DSH Agent │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ agent/pre-step pipeline │ │
│ │ ┌───────────────────────────┐ ┌───────────────────────────┐ │ │
│ │ │ Recall │ │ Capture │ │ │
│ │ │ (search history) │ │ (store user input) │ │ │
│ │ └───────────────────────────┘ └───────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ turn/end & tool/result listeners │ │
│ │ ┌───────────────────────────┐ ┌───────────────────────────┐ │ │
│ │ │ Session Summ. │ │ Tool Capture │ │ │
│ │ │ (session summary) │ │ (tool output capture) │ │ │
│ │ └───────────────────────────┘ └───────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ dsh-opencontext plugin (16 tools) │ │
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │
│ │ │ Core │ │ Summary │ │ Insights │ │ Knowledge │ │ │
│ │ │ (8) │ │ (3) │ │ (2) │ │ (3) │ │ │
│ │ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ v │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ OpenContext Backend │ │
│ │ ┌───────────────────────────┐ ┌───────────────────────────┐ │ │
│ │ │ Lib Mode │ │ HTTP Mode │ │ │
│ │ │ (in-process) │ │ (daemon) │ │ │
│ │ └───────────────────────────┘ └───────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
许可证
Apache-2.0,见 LICENSE。