dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Knowledge base & RAG plugin for DeepSeek Harness (DSH): chunking, local embeddings, hybrid search, management panel
DSH 的知识库插件
English · 中文
一个深度的知识库系统,作为 DeepSeek Harness(DSH)的独立、可开源 bundle 插件。提供知识库(含分组)与文档管理、文本分块、向量化(OpenAI 兼容 / Ollama / 本地模型 / 关键词降级)、检索,以及模型可见工具与浏览器管理面板。
dsh-knowledge 把文档导入、解析、分块、检索、证据组织和模型续读整合进 DSH。它既可以零向量配置运行,也可以完全使用本地模型,不要求额外部署独立的知识库服务。
能力 · 说明 文档来源 · 文件、目录、网页和文本笔记;本地路径可持续重扫和重新索引 混合检索 · FTS5 BM25、向量召回、RRF 融合、MMR 去重以及可选重排 证据上下文 · 按文档顺序动态生成 ContextWindow,支持围绕命中位置继续阅读 本地运行 · 本地 embedding、本地 rerank、本地 OCR;也支持 OpenAI 兼容接口和 Ollama 文档处理 · 常见办公格式、扫描 PDF、PaddleOCR、Tesseract 回退及可选 MinerU 管理界面 · 知识库分组、批量导入、预览、召回测试、模型管理和索引重建
^22.19.0 || >=24.0.0>=10在安装插件之前,将以下构建许可合并到目标 profile 的 pnpm-workspace.yaml 中已有的 allowBuilds 映射。不要重复添加第二个 allowBuilds: 键,否则 YAML 会失效。这些依赖包含安装期构建;pnpm 10 默认拒绝执行时,dsh plugin add 会在登记 bundle 前退出。
allowBuilds:
esbuild: true
onnxruntime-node: true
protobufjs: true
sharp: true
tesseract.js: falsedsh plugin --profile <name> add dsh-knowledge插件安装在 profile 层。无论 DSH 来自 npm 还是源码 checkout,都使用同一条命令。安装完成后重启 web 服务,并刷新页面加载管理面板。
knowledge_search 使用知识库。不下载模型也可以使用关键词检索。扫描件 OCR、本地 embedding 和本地 rerank 只有在对应模型已下载并通过就绪检查后才启用。
其他安装方式
# GitHub Release 或 npm pack 生成的 tarball
dsh plugin --profile <name> add ./dsh-knowledge-0.5.2.tgz
# 本地源码目录,需要先完成构建
dsh plugin --profile <name> add file:/path/to/dsh-knowledge如果第一次安装因 pnpm 构建许可失败,请补全 allowBuilds 后重新运行 add。包通常已经进入 node_modules,第二次执行会继续完成 bundle 登记。
恢复 ERR_PNPM_WORKSPACE_MANIFEST_WRITER_PARSE
这表示 pnpm 无法解析 DSH profile 自己的 pnpm-workspace.yaml,发生在下载或构建本插件之前。先备份文件,再修复错误信息指出的 YAML 行:
%USERPROFILE%.dsh\profiles\\pnpm-workspace.yaml~/.dsh/profiles//pnpm-workspace.yaml不要在不清楚原有设置用途时覆盖该文件。如果 profile 没有其他有意保留的 pnpm 设置,可恢复为以下最小有效配置,再将上方的 allowBuilds 合并进去:
packages:
- .
nodeLinker: hoisted
autoInstallPeers: false
allowBuilds:
esbuild: true
onnxruntime-node: true
protobufjs: true
sharp: true
tesseract.js: false随后重新执行同一条 dsh plugin --profile add ... 命令。若修复 YAML 后出现 ERR_PNPM_IGNORED_BUILDS,这是独立的构建授权问题;仅按 pnpm 输出的确切包名补充授权,不要宽泛地允许所有脚本。
支持的文档格式与目录行为
目录导入递归扫描 txt、md、csv、html、json、pdf、docx、doc、pptx、ppt、xlsx、xls、epub 等格式,并在界面中保留可下钻的文件夹树。
重新扫描目录时会导入新增文件、重建已修改文件并移除已不存在的文件。单个文件失败不会隐藏其他成功结果,服务端和界面都会保留逐文件错误信息。
更新已导入目录的正确方式:重新导入同一路径,或在界面中对目录容器执行重扫——两者现在走同一条同步路径,都只会原地更新原来那棵树。目录来源以“知识库 + 规范化真实路径”确定身份,所以重复导入不会再新建第二棵树。目录中的文件以“目录来源 + 相对路径”确定身份;只有名称和类型都唯一的旧文件才会被认领,出现两个候选时报告 ambiguous_source,不会猜测、合并或自动删除。管理 API 的文档详情会返回目录容器的 sourcePath,客户端可据此找到该重扫哪一个容器。
ContextWindow,按 before → anchor → after 组织证据,不把桥接文本写入索引或 embedding。ContextWindow 与自动检索细节
SearchHit.text 始终保留完整 canonical anchor。contextWindow 默认不跨标题路径;超长锚点围绕查询命中按句子边界裁剪,相邻 chunk 的重复前后缀会被移除。旧字段 siblingContext 在 0.3.x 中继续兼容,但新调用方应优先使用 contextWindow。
knowledge_get_document 支持普通 chunkOffset / chunkLimit 分页,也支持通过 anchorChunkId 或 anchorIndex 进入锚点模式。锚点模式可控制 before、after、maxTokens、focus 和 crossHeading。
自动检索的首 Token 路径不会启动本地 reranker;远程 rerank 最多调用一次,并共享 4 秒总预算。取消、超时或 provider 故障不会污染注入记忆,也不会把检索范围扩大到无关知识库。
v0.5.2 已修复 #51:证据和读取片段裁剪不会拆开 emoji 等字符的 UTF-16 代理对;模型可见文本中的既有孤立代理项会替换为 U+FFFD,避免上游 JSON 解析失败。存储文本与字符偏移保持原样,已损坏的会话历史不会自动修复。
chunkSize 与 chunkOverlap 使用 Token 预算;长文本按标题、代码、段落、句读、列表和换行的优先级寻找断点。/embeddings、Ollama 和 transformers.js 本地模型。v0.5.1 修复(issue #42): 本地模型缓存目录的「浏览/打开目录」与 MinerU 安装目录选择兼容 DSH 0.2 的新接口及旧版接口。取消选择保留原输入;宿主缺少对应能力时,缓存目录显示提示,MinerU 隐藏选择按钮,路径仍可手动填写。
「打开目录」在输入为空时使用实际缓存目录,由后端展开 ~,并可创建尚不存在的目标目录。此操作不保存配置、不移动模型,也不启动下载。
v0.5.2 修复(#47 / #49): 目录操作按需查询可选的 remote.session 服务,避免注入门禁导致设置页空白,也能跟随宿主服务的晚注册或替换。本地文本模型运行时升级为 Transformers.js 4.3.1 / ONNX Runtime 1.30.0,锁定依赖中的 sharp 0.35.5 修复了三项高危告警。旧模型权重保留,旧运行时的健康记录需在设置中重新验证;详情见 安全策略。
本地模型运行方式
默认本地 embedding 模型为 onnx-community/Qwen3-Embedding-0.6B-ONNX,约 585 MB、1024 维。它在带版本 IPC 的独立 child process 中运行;空闲时可释放 ONNX session,崩溃或硬超时后只重建干净的子进程,无需重启 DSH。下载使用模型专属 staging 目录,只有隔离加载和真实向量 probe 成功后才会提升到正式缓存,并写入带文件指纹的 readiness marker。
rerankModel: local:Xenova/bge-reranker-base 在另一个独立 child process 中运行,与 embedding process 生命周期完全隔离。搜索不会隐式下载 rerank 模型;模型必须先在本地模型页面下载并通过健康检查。自定义 Hugging Face ONNX reranker 属于实验性能力,需要通过单 logit 能力验证和正负样例自检。
本地模型默认缓存在 /cache/dsh-knowledge/local-models。下载端点可通过界面的 hfEndpoint 或环境变量 HF_ENDPOINT 调整;OCR 默认使用 hf-mirror.com,海外用户可改为 https://huggingface.co。
下载不与发起它的那一次 HTTP 请求绑定:请求返回后传输在后台继续,浏览器关闭或客户端超时都不会取消下载,进度通过本地模型状态持续上报。要停止下载必须显式调用取消;取消只中止进行中的传输,已完成并通过校验的模型不会被删除(删除请用「删除」)。下载的请求预算按进度重置,因此慢速链路不会被「总时长」误杀,只有长时间无进度才会被判为卡死。
插件向模型提供 14 个工具。所有读取、写入和自动检索都遵守“已启用知识库”边界;空或失效选择匹配零个知识库,不会静默扩大到全库。永久删除必须经过宿主确认。
查看全部工具
knowledge_searchknowledge_list_basesknowledge_create_baseknowledge_delete_baseknowledge_add_documentknowledge_list_documentsknowledge_delete_documentknowledge_import_urlknowledge_refresh_urlknowledge_statsknowledge_get_documentknowledge_read_documentknowledge_reindex_documentknowledge_reindex_baseknowledge_search 返回 citations、chunkIndex 和有序 ContextWindow。knowledge_read_document 支持字符区间读取和正则定位,knowledge_get_document 支持分页及围绕检索锚点续读。
HTTP POST /knowledge/search 在 filter 内接受 excludeDocIds 和 titleExcludes;knowledge_search 工具使用同名顶层参数。例如,只检索正文、排除书目与处理记录:
{
"query": "方剂用法",
"topK": 5,
"filter": {
"titleExcludes": ["书目信息", "目录", "处理记录"]
}
}以上是 HTTP 请求体。工具参数为:
{
"query": "方剂用法",
"topK": 5,
"titleExcludes": ["书目信息", "目录", "处理记录"]
}excludeDocIds 按文档 ID 精确排除,可由 GET /knowledge/bases//documents 或 knowledge_list_documents 取得 ID。规范字段名为 excludeDocIds,不支持 notDocIds 别名。titleExcludes 是字符串数组。每项去除首尾空白后按大小写不敏感的普通子串匹配,任一非空项命中即排除;不解释正则表达式。docIds、titleIncludes、sourceTypes、updatedAfter 和 updatedBefore 叠加;包含与排除重叠时,排除优先。空排除数组、空白标题项和未知 ID 无影响;docIds: [] 仍匹配零篇。400 invalid_request;工具按参数 schema 校验。省略 baseId 的 HTTP 请求搜索全部库,工具仍遵守已启用知识库范围;限定单库时传入真实 baseId,不要传空字符串。这些条件仅作用于本次请求,无需数据库迁移、重新索引或移动书籍;未传排除条件的请求保持原有行为。
storageDomain 持久化。/storages/knowledge-chunks.sqlite,可通过 chunkStorePath 调整。EPERM、EBUSY、EACCES 按 20/50/100/200/400 ms 有界重试,最多写入 6 次。持续 I/O 错误会明确报错并保留之前的元数据。resumeInterruptedOnStartup;宿主通用 rename 问题仍需上游修复。knowledge.json 包含库名、文档记录和配置,不是可随意删除的缓存;仅备份 SQLite 并不完整,备份应同时保留 storage domain 元数据、SQLite 和 knowledge-raw。U+FFFD,避免上游 JSON 解析错误。remote.session,恢复本地模型设置与目录操作,兼容宿主服务的晚注册及替换。查看 v0.5.2 发布说明 · 查看 CHANGELOG
filter 和 knowledge_search 新增 excludeDocIds、titleExcludes,可与包含条件叠加,排除条件在候选池与 TopK 截断前生效。查看 v0.5.1 发布说明 · 查看 CHANGELOG
本版本新增结构化证据及处理能力。已有数据的升级兼容性以发布候选的独立实测结果为准;托管 MinerU 默认不下载模型,只有用户显式预检并确认安装才会创建独立环境。
查看 v0.5.0 发布说明 · 查看 CHANGELOG
has no source text to reindex,从界面和 API 都无法脱困。现在导入、单文档重建与启动恢复走同一条提取链,重建会重新尝试 MinerU;双重失败时同时报出 MinerU 与本地解析两个原因,而不是只把 MinerU 的真实原因写进日志。rawTextLimit 钳制、未知知识库的统计接口返回 404、不再产生空分块、context.ts 不再被重复打包、stress 脚本纳入类型检查;检索基准改用临时 DSH_HOME,不再读写开发者真实 profile。0.4.1 不迁移数据库、不强制重建索引、不重新下载模型。唯一可感知的行为变化是:未知知识库的统计接口现在返回 404,而不是一个全 0 的 200。