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:lemoncat7/dsh-knowledge
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
当前版本 2.13.1,已验证宿主 DSH 0.2.0-rc.2(宿主仍为 RC)。Node.js ^22.19.0 或 >=24.0.0。详见 兼容说明 和 发布说明。
dsh-knowledge 是面向 DeepSeek Harness 的知识库插件。它不修改 DSH Agent Loop,同一个插件既能使用本地 SQLite,也能连接远程中央知识库。
插件正式版,已在 DSH 0.1.7-rc.2 构建与测试验证,覆盖 0.1.6-alpha.2 起的宿主破坏性变更:图标渲染崩溃、回合尾回写状态条注册抛错、停靠侧栏「待打开」恒被取消、连接设置卡片静默消失、会话消息 source 校验失败(共五项),逐一修复;开发依赖 11 个客户端包升至 0.1.7-rc.2。0.1.5 及更早宿主请继续使用 2.10.1(图标改名为单向迁移)。数据库无变更。本次 Linux / Node.js 22 验证 186 项测试全部通过,宿主实际回写、召回与设置注册已补充验证。详见 更新说明 和 DSH 0.1.7 兼容说明。
插件正式版,已在 DSH 0.1.5-rc.1 本地构建部署验证。知识文档支持折叠分组、拖拽及批量归类,新文档必选分组,自动回写优先复用已有分组。普通会话和伙伴会话共用分组查询与修改工具,并遵守挂载、项目、标签和审核权限。
186 项自动测试及浏览器分组回归通过。远程模式需同时升级知识服务;数据库升级至 schema 15,回退前应恢复升级前备份。详见 更新说明 和 分组使用说明。
插件正式版,已在 DSH 0.1.5-rc.1 验证,保留旧版回退。支持笔记选文摘录到知识库、来源引用和按目录浏览目标文档。详见 更新说明。
正式版,适配 DSH 0.1.2-rc.1。163 项测试及分组、挂载的桌面与手机浏览器回归通过。
“知识库与挂载 → 我的知识库”支持按家里助手、工作、个人等自定义分组。 点击“新建分组”选择知识库并命名;组标题可折叠、重命名,知识库编辑里的“所属分组”可选择已有名称、输入新名称或留空移回“未分组”。同名分组合并显示,空分组自动消失,搜索支持分组名并展开匹配项。 分组持久化在知识服务,独立于标签、内容及挂载权限;折叠偏好保存在当前浏览器。远程模式需要同时升级知识服务。数据库自动升级至 schema 14,回退旧插件前应恢复升级前备份。
挂载列表、设置弹窗及批量挂载确认统一显示“分类 / 知识库名”;列表先按分类、再按库名自然排序,未分组置后,搜索支持分类名,选择状态与挂载配置不受影响。
正式版,适配 DSH 0.1.2-rc.1。
expectedVersion。正式版,适配 DSH 0.1.2-rc.1。
适配 DSH 0.1.2-rc.1。
正式版 2.6.0 适配 DeepSeek Harness 0.1.2-rc.1,需要 Node.js 22.19+ 或 24+。浏览器端使用该版本的 Session Controller、Renderer、Chat、Settings 与 Theme 插槽接口。
2.6.0 将轮后回写改为本机持久化队列:先保存本轮快照,再释放会话结束流程,不再等待提取模型或远程写入。失败可在原回答下重试;重启和后续对话不会覆盖未完成任务。状态显示等待回写/回写中/成功及目标文档/失败与原因。远程直接写入需要中央服务同时升级到 2.6.0,旧服务不支持幂等回执时会明确报错并保留计划,不冒险重复写入。
知识工作区的“回写任务”,以及回答下方的“管理回写”,可查看本机持久化队列。按创建先后倒序显示,最新任务在前,每页最多 50 条,可按会话筛选,查看创建日期时间、尝试次数、下次重试时间、阻塞任务、失败原因及完成后的目标文档。旧记录未保存创建时间时明确标注,不用迁移时间冒充。即使连接中央知识库,这里管理的也是当前 DSH 客户端的队列。
前端回写状态自动轮询,修复浏览器原生 fetch 的接收者绑定问题;读取失败会明确显示正在重连,不把查询失败误报为写入失败。139 项自动化测试通过,并验证真实 Chromium 中的状态请求、目标文档链接及桌面/手机/平板展示。
2.5.1 修复知识目录的长文件名撑宽列表、遮挡结束状态的问题:名称按剩余空间省略,悬停可查看完整名称和路径,“已解决/已收集完成”标签完整保留。不改变文档内容、权限、配色或动画。
2.5.0 支持在用户明确确认问题解决或收集结束后,由 Agent 或轮后提取更新知识文档状态。整篇结束保留正文与历史并封存,局部问题仅修订对应段落;继续遵循挂载权限、审核模式、敏感内容审查及版本冲突保护。远程客户端与中央服务应同时升级。
2.3.6 包含长对话回写前检索触发 HTTP 400 / 431 的修复,并补全干净构建所需的依赖锁文件:自动检索使用有界关键词,长查询通过 POST 传输。使用远程知识库时,请同时更新发起回写的客户端;只更新中央服务不能修复旧客户端发送的超长 GET URL。更新并重启后,可重试之前失败的回写。
当前版本提供可部署的多知识库、按需检索工具、本地与远程中央服务、文档型 Web 管理台,以及全局回写策略与安全直写协调:
create / update / conflict / skip 文档变更决策;更新会明确区分“补充新内容”和“修订过时原文”,不再用追加文本冒充原文修改。knowledge_base_search 找库 → knowledge_search 搜索指定库 → knowledge_read 读取文档”的顺序核对完整内容。knowledge_write,在回答结束后由独立提取调用处理,真实回写状态显示在回答下方。knowledge_document_status 更新对应知识状态,也支持回答后的自动提取。工具先搜索并读取目标文档,提交当前版本、用户确认原话和结论;仅解决其中一个问题时只修订对应段落,整篇保持开放。整篇结束保留正文和结论、生成历史版本并停止后续回写,可在界面重新打开。knowledge_base_create 和 knowledge_base_update 创建或修改知识库,包括描述、标签、回写策略与专用回写模型;工具内部跟随当前 Provider 自动写入本地 SQLite 或远程中央服务,模型不传也不猜存储位置。knowledge_base_create 默认不保存专用 provider/model,回写沿用本机覆盖设置,否则跟随每次会话;即使连接远程知识库,也不复制远端模型配置。只有明确指定 useCurrentSessionModel: false 时,才要求并校验成对的专用模型参数。默认模式下旧调用夹带的模型字段会被忽略,并在结果中说明。local 或 remote。read / propose / write / admin 权限及吊销。Ctrl/Cmd + F 快捷键;每次保存会形成按需读取的页面历史,可预览、比较并恢复为新版本。笔记默认不参与知识检索、自动召回或 AI 回写。trustedShareOrigins 和远程访问插件的可信 Origin 配置继续兼容。note:// 引用会在升级时安全回填为结构化关系。knowledge_note_list / search / read / create / update / move / delete 浏览和维护笔记工作区;所有目标都使用当前会话签名句柄,远程操作继续服从令牌权限,删除被知识文档引用的笔记会被拒绝。knowledge_note_references 单独负责查看、添加或移除知识文档与笔记的结构化关联,并在执行时重新检查知识挂载范围、写入模式和文档封存状态。从 npm 安装正式版:
dsh plugin --profile web add @lemoncat7/dsh-knowledge
需要固定本次正式版本时:
dsh plugin --profile web add @lemoncat7/dsh-knowledge@2.5.1
也可以从 GitHub Releases 下载对应版本的完整预构建包后安装:
dsh plugin --profile web add ./lemoncat7-dsh-knowledge-2.3.2.tgz
卸载:
dsh plugin --profile web remove @lemoncat7/dsh-knowledge
插件是标准 DSH profile bundle:package.json 的 dsh.bundle.patch 指向 cordis.patch.yml。安装后不需要单独运行知识库容器。
安装或更新后请重启对应的 DSH profile。Web 版重启命令:
pnpm dsh web
本仓库符合 DSH 社区目录的安装要求:声明了 dsh.bundle、发布了 npm 预构建包,并使用 GitHub dsh-plugin Topic。目录收录完成后,可在 DSH 的插件市场搜索 dsh-knowledge 或“知识库”,安装源为 @lemoncat7/dsh-knowledge。
插件商店的数据来自 awesome-dsh-plugin.com,不是单靠 npm 标签自动生成。若商店尚未刷新,可先使用上面的 npm 命令安装。
默认配置使用 DSH 持久目录中的 SQLite 文件:
- id: knowledge
name: '@lemoncat7/dsh-knowledge'
config:
backend: local
databasePath: !!js dshHomePath('knowledge/knowledge.sqlite')
extractionEnabled: true
defaultScope: project
autoRecallLimit: 3
autoRecallMinScore: 0.2
recallMaxChars: 5000
exposeApi: false
exposeWeb: true
本地管理台默认开启。它使用独立的同源管理接口,不要求开放远程 API,也不要求输入访问令牌;侧栏“知识库”安装后即可使用。任何能访问 DSH Web 的用户都具有本地管理权限,因此把 DSH 暴露到公网时,应继续使用反向代理登录保护整个 DSH 站点。
提取模型默认沿用刚完成回答的 provider/model。可在单个知识库中设置专用回写模型;“本机回写模型”是当前客户端的最高优先级覆盖,适合中央知识库在不同客户端使用不同模型。实际优先级为:本机覆盖 → 知识库专用模型 → 当前会话模型 → 以下兼容性后备配置:
extractionProvider: deepseek-official
extractionModel: deepseek-chat
独立模型必须先在 DSH 的模型设置中注册。不论使用 Kimi 还是其他会话模型,首次超限后都会保持原 provider/model,用精简提示和低推理重试,不会暗中换模型。
提取输出达到模型上限时会自动用双倍预算重试一次(最高 8192 tokens)。其他提取失败会将幂等任务标为 failed,失败任务最多可重新领取两次,并在回答下方记录回写通知,不会阻断下一轮。
需要作为中央知识库时,进入“知识库 → 访问管理”,点击“开启远程 API”。开关会持久化,页面会显示其他客户端应填写的完整 API 地址;然后为每台客户端创建独立令牌。已撤销令牌可以永久删除。
部署自动化仍可通过配置直接启用认证 API:
backend: local
databasePath: !!js dshHomePath('knowledge/knowledge.sqlite')
exposeApi: true
apiToken: !!js process.env.DSH_KNOWLEDGE_API_TOKEN
apiPrefix: /knowledge-api/v1
exposeWeb: true
webPath: /knowledge
DSH_KNOWLEDGE_API_TOKEN 至少 24 个字符。该值只用于创建或恢复 bootstrap admin 身份;数据库只保存摘要。服务端没有 TLS,非回环部署必须放在 HTTPS 反向代理之后。
启用后访问 http://<DSH 地址>:<端口>/knowledge。本地管理台使用同源管理权限;开放给其他客户端的 apiPrefix 仍强制要求 Bearer Token。管理台和 API 均由 DSH 自身 WebServer 提供,不需要额外容器。
管理台功能:
知识库的 description 同时用于读取和回写路由:它以轻量目录形式告诉模型每个挂载库覆盖什么主题,knowledge_base_search 也用它匹配当前信息需求;文档正文不会随目录注入。主模型不执行内容回写,所有回答都在完整结束后进行一次独立的严格提取,同时判断长期价值、目标知识库、重复、更新与冲突;用户明确要求保存时也走同一条回答后链路。挂载只表示“可选”,不代表每次回答都要写入。extractionInstructions 用于匹配后继续限定具体收录规则。
笔记工具与知识回写相互独立。当前用户消息只要明确提到“笔记文档”“笔记目录”或“笔记工作区”,AI 就可以按该消息的要求查看和维护笔记,不需要固定授权句式;永久删除仍必须在当前消息中明确提出,并且授权不会从历史消息延续。工具会先用 knowledge_note_list 浏览目录或按名称搜索,也可用 knowledge_note_search 查找非目录节点;随后把返回的精确句柄传给 knowledge_note_read / update / move / delete。knowledge_note_create 未指定父目录时写入笔记根目录,指定目录时必须使用 knowledge_note_list 返回的文件夹句柄。本地和远程模式由当前 Provider 决定,工具不接受也不猜测存储位置。管理台中的笔记文档和普通文件均可从目录列表或打开后的工具栏下载。
创建示例:
{
"draft": {
"name": "DSH 项目规范",
"description": "只匹配 DSH 插件开发、架构决策和部署规范相关对话",
"defaultTags": ["dsh", "project-rule"],
"extractionInstructions": "只收录已确认且可跨会话复用的结论"
}
}
局部修改标签或描述时使用 PATCH /knowledge-bases/:id,请求体为 {"patch":{"description":"...","defaultTags":["..."]}}。
主要 API:
| Method | Path | Permission | Purpose |
|---|---|---|---|
| GET | /health |
public | 健康检查 |
| GET/PUT | /settings |
read/admin | 读取或修改全局回写策略 |
| GET / POST | /search |
read | FTS 检索;长查询使用 POST JSON 请求体,字段为 text、limit、projectId、knowledgeBaseIds、includeTags、excludeTags、types |
| GET/POST | /knowledge-bases |
read/write | 知识库列表和创建 |
| GET/PUT/PATCH | /knowledge-bases/:id |
read/write | 详情、完整替换和局部修改 |
| POST | /knowledge-bases/:id/archive |
admin | 归档并关闭相关挂载 |
| POST | /knowledge-bases/:id/restore |
admin | 恢复已归档知识库 |
| DELETE | /knowledge-bases/:id |
admin | 永久删除已归档知识库及全部关联数据 |
| GET/POST/DELETE | /mounts |
read/write | 挂载查询、更新和删除 |
| POST | /mounts/bulk |
write | 事务型批量挂载与取消 |
| GET | /mounts/resolve |
read | 解析项目继承与会话覆盖 |
| GET | /documents |
read | 按知识库或正文搜索 Markdown 文档 |
| GET | /document-index |
read | 分页读取不含正文的文档目录;支持 knowledgeBaseId、q、limit 和 cursor |
| GET | /documents/:id |
read | 读取单篇 Markdown 文档 |
| POST | /documents/:id/finalize |
write | 标记为已解决或已收集完成并封存 |
| POST | /documents/:id/reopen |
write | 重新打开封存文档 |
| GET | /notes |
read | 懒加载目录子节点,或使用 q 搜索全部笔记文档 |
| POST | /notes/folders |
write | 在任意层级创建目录 |
| POST | /notes/documents |
write | 创建可编辑的 Markdown 笔记文档 |
| POST | /notes/files |
write | 上传原始文件;名称和父目录通过查询参数传入 |
| GET/PATCH/DELETE | /notes/:id |
read/write/admin | 读取元数据、重命名或移动、递归删除 |
| POST | /notes/:id/copy |
write | 复制文档、文件或完整目录树 |
| GET/PUT | /notes/:id/content |
read/write | 读取文件内容,或保存 Markdown 与受支持的文本文件;支持 ?download=1 |
| GET | /notes/:id/references |
read | 列出引用该节点或其目录后代的知识文档 |
| GET | /notes/shares |
admin | 列出当前笔记工作区的分享记录 |
| POST/DELETE | /notes/:id/share |
admin | 创建或停止文档/目录的只读分享 |
| POST | /notes/import-share/inspect |
read | 校验分享链接并读取有大小上限的清单,不写入内容 |
| POST | /notes/import-share |
write | 从分享链接复制文档或完整目录到指定笔记目录 |
| GET | /shared/:token |
public | 打开只读分享页;目录分享只允许访问对应子树 |
| GET | /shared/:token/content |
public | 读取分享范围内的文件内容,支持 noteId 与 download=1 |
| GET | /shared/:token/manifest |
public | 返回供导入使用的只读目录清单与内容摘要 |
| GET/POST | /entries |
read/write | 列表和直接创建 |
| GET/PUT/DELETE | /entries/:id |
read/write/admin | 详情、更新、彻底删除 |
| GET/POST | /entries/:id/note-references |
read/write | 查看或添加结构化笔记关联 |
| DELETE | /entries/:id/note-references/:noteId |
write | 移除一项笔记关联 |
| GET | /entries/:id/versions |
read | 版本历史 |
| GET/POST | /candidates |
read/propose | 候选列表和提交 |
| POST | /candidates/direct |
propose + write | 原子直写、兼容合并、重复跳过和冲突转审 |
| POST | /candidates/:id/review |
write | 审核候选 |
| GET/POST/DELETE | /tokens |
admin | 客户端令牌管理 |
路径均位于配置的 apiPrefix 下。创建令牌时,原始令牌只在响应中返回一次。
笔记文件上传使用请求体原始字节,不使用 Base64 或 multipart;单文件上限为 64 MiB。目录和文件元数据与知识 SQLite 分开保存在 notes/notes.sqlite,内容按稳定编号保存在 notes/objects/。知识库删除或归档不会删除笔记;仍被知识文档引用的节点及其上级目录默认禁止删除。
先在中央实例的“知识库 → 客户端令牌”中为每台客户端分别创建令牌。普通 DSH 客户端建议选择 read + propose。write 是当前中央服务的全局写权限,同时允许直接写入知识、管理知识库、挂载和笔记;只在客户端确实需要这些能力时授予。令牌原文只显示一次。
其他 DSH 客户端安装本插件后,打开“设置 → 插件 → 知识库连接”,选择“远程”,填写中央实例的知识库 API 地址和客户端令牌,再点“验证并连接”。插件会先验证地址和令牌,成功后立即热切换,并把连接持久化到 DSH 数据目录;令牌不会在页面或控制接口中回显,只能覆盖。
侧栏“知识库”入口会先通过控制接口确认当前实例是否启用了管理台,确认后才加载管理页面。管理台默认随本地模式启用;只有 profile 显式设置 exposeWeb: false 时才关闭。入口不会把未注册的 /knowledge 误交给 DSH Web 主页面,因此不会触发 dsh-plugin-desktop 参数错误。
如需用配置文件或环境变量部署,也可以直接设置 Provider:
- id: knowledge
name: '@lemoncat7/dsh-knowledge'
config:
backend: remote
remoteUrl: 'https://knowledge.example.com/knowledge-api/v1'
remoteToken: !!js process.env.DSH_KNOWLEDGE_REMOTE_TOKEN
extractionEnabled: true
远程地址必须是 HTTPS;只有 localhost 和回环 IP 的测试地址允许 HTTP。普通客户端建议只分配 read + propose 权限。
远程客户端连接的是中央库,不会复制或同步一份本地数据库;断网时无法召回或回写。侧栏管理台仍在当前 DSH 内打开,插件通过同源代理携带已保存的远程令牌访问中央 API,不使用跨域 iframe,也不会把令牌交给浏览器。远程模式隐藏“访问管理”,API 开关和客户端令牌仍由中央 DSH 管理。每台客户端仍需用自己的项目/会话标识挂载所需知识库。
要求 Node.js ^22.19.0 || >=24.0.0。
npm install
npm test
npm run pack:check
推荐使用 Node 24 Docker 环境编译、测试并输出 tarball:
docker build \
--build-arg NODE_IMAGE=docker.1ms.run/library/node:24-bookworm-slim \
--target artifact \
--output type=local,dest=dist .
架构和一致性设计见 docs/architecture.md,首版产品边界见 docs/requirements.md,文档型演进设计见 docs/document-knowledge-design.zh-CN.md。
本项目采用 MIT License。
已挂载、可召回的知识文档引用了笔记后,AI 可以通过 knowledge_note_references list 取得笔记句柄,携带 knowledgeHandle 调用 knowledge_note_read 和 knowledge_note_update 读取、追加或替换笔记正文,无需新开关或每轮用户消息。每次调用检查当前挂载范围和实际引用关系;解除引用或关闭召回挂载后失效。知识库的只读挂载仍保护知识文档本身,不阻止其引用笔记的正文更新。此权限不包含笔记创建、删除、移动、重命名或引用关系变更;远端服务原有访问权限继续生效。
伙伴轻量关注只使用手动指定的记录位置,不处理依据中的笔记引用。宿主通过 dshKnowledgeNoteRecording 读取、校验并更新指定笔记。
knowledge_note_read 返回 note.version。knowledge_note_update 的正文追加、替换必须携带 expectedVersion;版本过期需重新读取和合并,重命名不需要正文版本。在「知识库 → 工作记录 → 工作日报」使用,无需独立日报插件。适配 DSH 0.1.7-rc.2。 采集默认关闭;支持全部项目、选择当前/已记录项目、手写路径,以及从 DSH 已配置模型中选择整理模型。 支持日期、补记、来源核对、编辑、导出、历史版本和持久化重试;日报数据独立存储,不混入知识文档。 试用版升级会复用原 worklog/worklog.sqlite;部署时应先移除旧 dsh-worklog bundle 注册,保留数据库,防止双重执行。
日报跟随知识库连接:本地模式的 DSH 是日报存储/整理节点;远程模式仅采集和补传,浏览、编辑、模型列表和定时配置均来自已连接的中央知识库。中央与采集端都需要升级到支持统一日报的版本,中央需开启知识库远程 API。旧中央不支持时显示升级提示,不悄悄切回本地日报。
read,来源上传/补记/整理需要 write,中央设置和历史日报迁移需要 admin。本机网页入口仍需 Host 登录认证。这里是同一中央的共享工作记录,不是按令牌隔离的私人日记,勿给不可信人员中央读取权限。来源跨实例汇总,但不会尝试在本机打开其他实例的会话。补传状态在页面显示;中央离线时明确报错,本机采集设置仍可修改。
在「采集设置 → 中央整理 → 定时整理」开启,选择每日时间(默认建议 23:00),按中央设置中的 IANA 时区运行。默认关闭;保存后从下一个设定时间开始,浏览器无需保持打开,但中央 DSH 服务必须运行。
每次整理目标为该日期截至执行时的已采集/补记素材,使用同一模型设置及持久任务队列。采集开关与整理开关独立:关闭采集后,仍可定时整理手工补记。不覆盖人工编辑的正文;无新素材不调用模型;到点后新增的素材可手动更新日报。既有任务运行时等待其结束再判断是否需要整理。
每日触发标记与任务入队在同一事务中持久化;服务重启只补最近一次错过的日期,不批量回填历史。网络失败沿用最多三次自动尝试,失败后在对应日期手动重试。设置中显示最近一次定时检查结果。修改执行时间或时区从新设置的下一次时间生效;关闭定时不取消已入队任务,可在日报页面单独取消。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: rag、sqlite。