WeKnora
Tencent
Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Soren-ABT/dsh-knowledge
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
DSH 的知识库插件
一个深度的知识库系统,作为 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: false
dsh 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.1.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\<profile>\pnpm-workspace.yaml~/.dsh/profiles/<profile>/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 <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。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 故障不会污染注入记忆,也不会把检索范围扩大到无关知识库。
chunkSize 与 chunkOverlap 使用 Token 预算;长文本按标题、代码、段落、句读、列表和换行的优先级寻找断点。/embeddings、Ollama 和 transformers.js 本地模型。v0.5.1 修复(issue #42): 本地模型缓存目录的「浏览/打开目录」与 MinerU 安装目录选择兼容 DSH 0.2 的新接口及旧版接口。取消选择保留原输入;宿主缺少对应能力时,缓存目录显示提示,MinerU 隐藏选择按钮,路径仍可手动填写。
「打开目录」在输入为空时使用实际缓存目录,由后端展开 ~,并可创建尚不存在的目标目录。此操作不保存配置、不移动模型,也不启动下载。
默认本地 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 能力验证和正负样例自检。
本地模型默认缓存在 <DSH_HOME>/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/<baseId>/documents 或 knowledge_list_documents 取得 ID。规范字段名为 excludeDocIds,不支持 notDocIds 别名。titleExcludes 是字符串数组。每项去除首尾空白后按大小写不敏感的普通子串匹配,任一非空项命中即排除;不解释正则表达式。docIds、titleIncludes、sourceTypes、updatedAfter 和 updatedBefore 叠加;包含与排除重叠时,排除优先。空排除数组、空白标题项和未知 ID 无影响;docIds: [] 仍匹配零篇。400 invalid_request;工具按参数 schema 校验。省略 baseId 的 HTTP 请求搜索全部库,工具仍遵守已启用知识库范围;限定单库时传入真实 baseId,不要传空字符串。这些条件仅作用于本次请求,无需数据库迁移、重新索引或移动书籍;未传排除条件的请求保持原有行为。
storageDomain 持久化。<DSH_HOME>/storages/knowledge-chunks.sqlite,可通过 chunkStorePath 调整。filter 和 knowledge_search 新增 excludeDocIds、titleExcludes,可与包含条件叠加,排除条件在候选池与 TopK 截断前生效。本版本新增结构化证据及处理能力。已有数据的升级兼容性以发布候选的独立实测结果为准;托管 MinerU 默认不下载模型,只有用户显式预检并确认安装才会创建独立环境。
has no source text to reindex,从界面和 API 都无法脱困。现在导入、单文档重建与启动恢复走同一条提取链,重建会重新尝试 MinerU;双重失败时同时报出 MinerU 与本地解析两个原因,而不是只把 MinerU 的真实原因写进日志。rawTextLimit 钳制、未知知识库的统计接口返回 404、不再产生空分块、context.ts 不再被重复打包、stress 脚本纳入类型检查;检索基准改用临时 DSH_HOME,不再读写开发者真实 profile。0.4.1 不迁移数据库、不强制重建索引、不重新下载模型。唯一可感知的行为变化是:未知知识库的统计接口现在返回 404,而不是一个全 0 的 200。
查看 v0.4.1 GitHub Release · 查看 CHANGELOG · v0.4.1 发布说明
partial 并保留已完成的同步。ambiguous_source,不猜测、不合并、不自动删除。sourcePath 对管理 API 只读暴露,且不会出现在模型可见的检索结果中。recursive 确认,并提供 delete-impact 预检,列出将被删除的目录、文件、分块和原始快照。本次升级不迁移数据库、不自动重建索引、不清理历史目录、不重新下载模型,也不改变既有字段与调用签名;新增的同步结果、sourcePath、删除影响预检与 recursive 参数均为加法接口。唯一收紧的是:非空目录不再允许被静默级联删除。
查看 v0.4.0 GitHub Release · 查看 CHANGELOG
chunkIndex 或锚点 ID 继续读取上下文或文档正文。dsh-knowledge 的检索目标不只是返回一组 Top K 文本,而是生成一条可解释、可降级、可继续阅读的证据链。显式搜索的主路径如下:
当前查询
└─ Query Planner:主查询 + 可选查询变体
├─ SQLite FTS5 / BM25 词法召回
└─ embedding / cosine 向量召回
└─ 加权 RRF 融合
└─ 可选 MMR 去冗余
└─ 可选 remote/local cross-encoder rerank
└─ Context Composer
├─ 有序、限额的模型可见证据
└─ anchorChunkId / chunkIndex 锚点续读
| 阶段 | 实现 | 设计目的 |
|---|---|---|
| Query Planner | 主查询始终来自当前消息;多查询变体先分别召回,再统一融合 | 避免历史覆盖当前问题,同时提高换说法查询的覆盖率 |
| 词法召回 | SQLite FTS5 trigram 索引、BM25 排序;查询侧识别 CJK 二元组与拉丁词 | 无 embedding、模型未下载或远程服务不可用时仍可搜索 |
| 向量召回 | 对查询 embedding 后执行余弦相似度检索,并校验向量维度 | 补充关键词未重合的语义命中 |
| RRF 融合 | score(d) = Σᵢ wᵢ / (60 + rankᵢ(d)),向量路权重由 rrfVectorWeight 控制 |
只融合名次,不直接混合量纲不同的 BM25 与 cosine 原始分数 |
| MMR | 在相关度与已选结果的向量相似度之间取舍 | 减少 Top K 中语义重复的片段 |
| Rerank | 对有界候选执行远程 API 或本地 cross-encoder;多查询最终只重排一次 | 让成本和延迟与候选池相关,而不是随查询变体重复增长 |
| 阈值 | 只对可比较的 vector 或 rerank relevance 分数应用 | 避免用同一个阈值错误过滤 BM25/RRF 排名分数 |
同分结果保留原召回顺序。rerank 必须返回与候选一一对应、有限且位于 [0, 1] 的分数;缺失、越界、数量不一致或协议不匹配都被视为降级,而不是成功。
分块负责稳定索引,Context Composer 负责模型实际看到的证据。插件不会把前后块永久拼入每个 chunk,也不会为桥接文本重复生成 embedding;它会在命中发生后批量读取相邻范围,并围绕 anchor 动态组装:
before → anchor → after,默认不跨越不同 heading path。SearchHit.text 保持完整 canonical anchor;ContextWindow 只描述本次查询实际选择的窗口。anchorChunkId 和 chunkIndex。模型需要更多上下文时,可以围绕同一锚点续读,而不是重新猜测文档位置。| 使用位置 | 固定预算 |
|---|---|
| Rerank pair | query 最多 128 Tokens、evidence 最多 352 Tokens、合计最多 480 Tokens |
显式 knowledge_search |
每个 hit 目标 768 Tokens,整次模型可见输出最多 8192 Tokens |
| 自动检索背景 | 每个 hit 最多 180 Tokens,完整背景最多 640 Tokens |
| 锚点续读 | 默认 1600 Tokens,可配置 128–4096 Tokens |
自动检索采用 current-turn-first 的查询规划:当前消息最长保留 200 字符;只有消息不超过 40 字符,并含有“这个、上述、继续、第 N 步”等指代表达或缺少足够主题词时,才使用最近最多两条用户消息生成第二个历史增强查询。两个查询分别进行词法召回,再以 RRF 融合,历史不会替换当前问题。
整个首 Token 前路径共享 4 秒 wall-clock deadline。service 内部 rerank 被明确跳过,本地 reranker 调用次数固定为零;如果配置了远程 rerank,最多调用一次且不重试。取消立即退出,超时或 provider 错误则保留词法排序并停止注入,不会重复获得新的超时预算。
已经注入的 chunk 会在相关性判断和知识库席位分配前移除。同主题五分钟内最多补充一条新证据,新主题最多注入三条;每库的 autoRetrieveWeight 限制它能占用的席位。纯数字 ID 和型号、版本号、错误码走严格 identifier 通道,最终模型可见文本必须包含完整且边界正确的 identifier,否则不注入。
检索内容在注入时明确标记为不可信参考资料,不能覆盖当前用户指令、权限边界或工具规则。只有背景实际折叠成功后,去重和节流状态才会提交。
| 风险 | 处理方式 | 对调用方的结果 |
|---|---|---|
| 空或失效的知识库/文档过滤 | undefined 才表示不限制;空集合明确匹配零文档,SQLite 词法和向量路均 fail-closed |
不会因过滤错误意外搜索全部资料 |
| 远程 rerank 超时或响应异常 | 共享 deadline、严格索引和分数校验、结构化 rerank 状态 |
返回原始召回结果,不误用 rerank 阈值 |
| 本地 embedding 或 rerank 卡死、崩溃 | 两个独立 child process、版本化严格 IPC、硬超时终止、embedding 单次干净恢复、生命周期分离 | 只恢复或降级受影响的操作,不必重启 DSH,也不连带影响另一条本地模型链路 |
| 本地模型文件不完整或不兼容 | 下载时记录权重文件的期望字节数并在落盘后比对;本地加载失败则隔离删除该缓存,下次重新下载。取消下载只中止进行中的传输,绝不动已完成并通过校验的模型 | 截断的权重不会再被当成「已下载」而永久失败;搜索不隐式下载,也不会把「目录里有 ONNX」误判为可用 |
| 连续本地 rerank 故障 | 队列总上限 16;连续 3 次 timeout/crash/runtime/invalid-response 后熔断 5 分钟,并限制半开探测 | 避免故障模型持续占用进程和延迟预算 |
| 替换重建或目录扫描部分失败 | 新 raw source、解析结果和索引成功后才替换已提交来源;逐文件保留结果 | 单个失败不破坏旧版本,也不掩盖同批成功项 |
| 插件发布物缺文件或跨平台差异 | Node 22.19/24/26 质量门槛、Windows/Linux/macOS 原生测试、Windows/Linux tarball 安装启动测试、手动触发的真实本地模型 smoke | npm tarball 与源码构建均受到自动化发布检查 |
这些约束的共同原则是:范围错误时宁可返回空,排序增强失败时宁可保留基础召回,涉及已提交资料时宁可保留旧版本。降级原因会通过结构化状态或界面提示暴露,而不是静默伪装成成功。
一个 bundle 挂载三个插件行。本地 embedding、本地 rerank 与 OCR 推理分别运行在可终止、可重建的独立 child process。mupdf 页面渲染仍在 host 中同步执行,受页面尺寸和光栅预算约束。
| 组件 | 平台 | 职责 |
|---|---|---|
knowledge(ctx.knowledge) |
host | 存储、分块、embedding/解析调度、检索、OCR 调度及 /knowledge/* HTTP 服务 |
tool-knowledge |
host | 注册并执行 14 个模型工具 |
ui-knowledge |
client | 侧边栏入口、工作区管理面板及同源 API 调用 |
embed-process |
child process | transformers.js 本地 embedding 推理;严格 IPC、staging/readiness probe 与可恢复的原生模型生命周期 |
ocr-process |
child process | PaddleOCR、OpenCV 和 Tesseract 识别;串行推理、超时终止及退出感知 |
rerank-process.mjs |
child process | 本地 cross-encoder 重排、超时隔离和进程级恢复 |
业务状态中的 bases、documents 和全局配置位于 knowledge storage domain;chunk 与可选 embedding 位于插件自己的 SQLite 存储;文件原始字节位于 SQLite 同级的 knowledge-raw 目录。
dsh-knowledge 的定位是“一体化文档知识库”。下面的对照用于说明设计边界:截至 2026-09-04,内容依据各项目默认分支的公开 README;“未在 README 中公开说明”不等同于该项目绝对不支持,对方项目更新后本表也可能过时。
| 项目 | 公开定位与主要设计 | 与 dsh-knowledge 的边界差异 |
|---|---|---|
| dsh-knowledge-base | 通用文档库,提供多格式导入、文件夹 UI、FTS5 trigram 与 BM25 | dsh-knowledge 在此基础范围外还覆盖向量/RRF/MMR/rerank、自动证据注入、ContextWindow、本地 OCR 与模型管理;对方更轻量 |
| Mindspace Local RAG | 技术完整的本地混合 RAG:BM25+、向量、RRF、父子分块、来源续查、文档修订与 compaction summary | Mindspace 明确坚持模型按需调用、刻意不做 rerank;其修订/回滚和会话摘要治理更专注。dsh-knowledge 更强调完整管理 UI、复杂格式/OCR、本地 cross-encoder 与可选自动注入 |
| dsh-plugin-rag | 监听 DSH session 事件,增量维护可检索的跨会话语义记忆,向量保存在本地 JSON | 核心对象是会话表面而非用户文档;dsh-knowledge 处理文档来源、解析、重建、引用和锚点阅读,两者可以承担不同层次的记忆 |
| dsh-ragflow | 将 DSH 工具连接到已有 RAGFlow dataset,提供清晰的 provider/seam/tool/config 分层 | RAGFlow 负责建库和解析,插件公开说明自身仅做 retrieval;dsh-knowledge 无需另一套知识库服务即可完成导入到证据输出的闭环 |
| dsh-plugin-kb4rag | 面向论文写作,使用 Python 离线提取/建库、Ollama embedding 和 Node Float32Array Top K | 设计简单、运行时检索依赖少;dsh-knowledge 提供运行时导入/重建、混合召回、OCR、管理界面和多级证据续读 |
| dsh-rag-kb | Ollama 向量检索、多知识库、JSON 持久化和可拖拽悬浮 UI | dsh-knowledge 使用 SQLite/FTS5 与多阶段排序,并进一步覆盖来源事务、本地模型健康体系、复杂 PDF OCR 和发布验证 |
在上述已检查项目中,没有单个项目在公开 README 中同时描述以下组合:
因此,dsh-knowledge 的主要差异不是“又实现了一个向量搜索”,而是把资料进入系统之后直到模型取得可引用、可续读证据之间的工程环节放在同一个 DSH 原生 bundle 中,并为失败路径定义了可观察的行为。
b150a55(2026.8.21)上开发并验证。若更新版本出现问题,请在 Issue 中附上 DSH 提交号。^22.19.0 || >=24.0.0。.doc、.ppt、.xls 依赖 @firecrawl/anydoc 的平台原生二进制。部署默认值位于 cordis.patch.yml 的 knowledge 行。管理面板可以在运行时覆盖并持久化这些值;大多数检索和文档设置还可以按知识库覆盖。
| 字段 | 默认 | 说明 |
|---|---|---|
embeddingProvider |
none |
openai、ollama、local 或 none |
embeddingBaseUrl |
'' |
embedding API 基址;Ollama 空值回退到本地标准端点 |
embeddingModel |
'' |
远程模型名或 Hugging Face 本地模型仓库 ID |
embeddingApiKey |
'' |
也可通过 KNOWLEDGE_API_KEY 设置 |
rerankModel / rerankBaseUrl / rerankApiKey |
'' |
远程或 local: 重排;空模型表示关闭 |
localRerankTimeoutMs |
60000 |
本地重排总预算,范围 10,000–300,000 ms,包含排队时间 |
smartChunk |
true |
标题/段落感知分块;关闭后只使用分隔符 |
chunkSeparator |
\n\n |
smartChunk 关闭时的分隔符 |
chunkSize |
800 |
分块 Token 目标预算 |
chunkOverlap |
100 |
相邻分块重叠 Token 预算 |
topK |
4 |
默认检索结果数,允许 1–50 |
searchMode |
auto |
auto、hybrid、vector 或 lexical |
similarityThreshold |
0 |
结果最低相似度,范围 0–1 |
mmrDiversity |
0 |
MMR 多样性,0 表示关闭 |
rrfVectorWeight |
1 |
hybrid 模式中向量召回的 RRF 权重 |
embeddingBatchSize |
32 |
每批 embedding 文本数 |
siblingChunks |
1 |
每侧相邻 chunk 数,范围 0–3;0 仍生成 anchor-only 窗口 |
semanticChunk |
false |
合并相邻相似语义段落 |
semanticChunkThreshold |
0.75 |
语义分块余弦阈值 |
chunkTokenLimit |
0 |
分块 Token 硬上限;0 表示不限制 |
conflictStrategy |
rename |
同名导入使用 keep、replace 或 rename |
urlRefreshHours |
0 |
URL 自动刷新间隔;0 表示关闭 |
imageCaptionProvider |
off |
off、openai 或 ollama |
imageCaptionModel |
'' |
图表描述使用的视觉模型 ID |
imageCaptionBaseUrl |
'' |
图表描述 API 基址 |
imageCaptionApiKey |
'' |
OpenAI 兼容视觉服务密钥 |
hfEndpoint |
'' |
Hugging Face 下载端点或镜像 |
mineruPythonIndexUrl |
https://pypi.org/simple |
托管 MinerU 隔离环境使用的 Python 包源 |
documentProcessorProvider |
builtin |
builtin 内置解析、mineru 云 API、mineru-local 自部署 MinerU 4 V1(Basic 本地托管为实验性) |
mineruApiKey |
'' |
MinerU 模式需要的 API Key |
mineruApiHost |
'' |
空值使用 https://mineru.net |
resumeInterruptedOnStartup |
true |
启动时恢复中断的导入;自动解析恢复最多 3 次,失败后保留来源供手动重建 |
autoRetrieve |
true |
用户消息进入时自动检索并注入相关背景 |
injectUsagePrompt |
true |
每次请求仅列出可用库名;可在每库高级设置中关闭,不影响工具和自动检索 |
autoRetrieveWeight |
3 |
每库自动注入席位上限,范围 0–5;0 表示排除 |
localModelCacheDir |
'' |
空值使用 <DSH_HOME>/cache/dsh-knowledge/local-models |
localWorkerIdleTimeoutMs |
60000 |
本地 embedding process 空闲释放模型 session 的时间;0 表示常驻 |
chunkStorePath |
'' |
空值使用 <DSH_HOME>/storages/knowledge-chunks.sqlite |
knowledge:usage 不再重复 knowledge_search 的行为指令,只提供库名;部署配置或全局覆盖可设置 injectUsagePrompt: false,每库配置可以单独覆盖。自动检索消息使用插件自己的 dsh-knowledge 来源名称,符合 DSH v4 的来源准入要求。桌面面板通过 Window Controls Overlay 几何和 CSS 标题栏环境变量动态避让窗口按钮,关闭按钮、知识库开关和通知随面板一起进入安全区。
按库设置中的空字段继承全局配置。localModelCacheDir、localWorkerIdleTimeoutMs 和 chunkStorePath 是进程级设置。API Key 以明文保存在本地机器,请保护 profile 数据目录。
仓库提供两个无额外依赖的脚本,可针对自己的知识库复跑检索和 RAG 上下文指标:
# Hit@k、Recall@k、MRR
node scripts/eval-retrieval.mjs --file scripts/eval-questions.example.json --base <baseId> --mode hybrid
# Hit@k、句子级 Context Recall(RAGAS 风格近似,无需 LLM)、MRR
node scripts/eval-rag.mjs --file scripts/eval-rag.example.json --base <baseId> --topK 5
复制示例 JSON,替换成自己的问题、预期文档标题和参考答案后运行。仓库内固定合成语料用于防止版本回归,其结果不代表所有私有文档、语言或模型配置都能获得相同准确率。
源码开发依赖同级目录中的公开 DeepSeek Harness monorepo,devDependencies 使用 link:../dsh/...:
pnpm install --config.auto-install-peers=false
pnpm run check
pnpm run build
pnpm test:分块、检索、配置、存储和服务测试。pnpm run typecheck:执行 tsc --noEmit。pnpm run build:构建 host ESM、浏览器 client bundle 和类型声明。npm run release:check -- --expected-version <version>:执行发布前完整门槛。mineru 云模式需要 API Key;mineru-local 使用独立服务地址和可选的服务令牌,不会自动降级到云 API。自部署服务不等于完全离线:文件会发送到配置的服务及其上传存储地址。安全问题请按照 SECURITY.md 通过 GitHub 私密漏洞报告通道提交。不要在公开 Issue 中发布利用细节、凭据、私人文档或未脱敏日志。
普通功能缺陷和使用问题可以通过 GitHub Issues 报告。
AGPL-3.0。项目的 PDF 页面渲染依赖 mupdf(AGPL-3.0),因此采用 AGPL-3.0 以保持分发许可一致。项目也与设计参考 Cherry Studio 使用相同许可证,但代码为独立实现,不包含 Cherry Studio 源码。
感谢 dsh-interconnect、dsh-deeptutor、awesome-dsh-plugin 以及为项目提交代码和问题报告的社区贡献者。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: rag。