deepseek-harness-studio/packages/examples/ff-llm-wiki-plugin

403Star43Fork2Issue2Watching

在 DSH 侧栏挂一个入口,把完整的 LLM Wiki 知识库产品(资料导入/编译式 Wiki/知识图谱/可溯源问答)在新窗口以独立应用方式启动,DSH 主页不受影响。

语言
TypeScript
License
MIT
分支
main
ai-agentdeepseekdeepseek-harnessdeepseek-harness-studiodesktop-appdeveloper-toolsdshdsh-plugin

安装

$ dsh plugin --profile web add github:fufankeji/deepseek-harness-studio/packages/examples/ff-llm-wiki-plugin

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

这个插件在 DSH 侧栏挂一个 FF - LLM Wiki 启动入口,点击后会在系统浏览器新窗口里打开一份完整的"工业知识库"独立应用——支持资料导入、确定性编译的 Wiki、知识图谱和基于 DeepSeek 的可溯源问答。DSH 主页面、导航、主题和工作区不会被替换。

核心能力

  • 在 DSH 侧栏新增"FF - LLM Wiki"启动按钮,一键打开独立知识库应用
  • 在新窗口中启动完整的 Next.js 知识工作台(资料、Wiki、知识图谱、问答、评估、设置六大模块)
  • 后台拉起一个隔离的 API 子进程处理问答、文档处理与评估,DSH 主进程只做反向代理
  • 从 DSH 凭证中心读取 DeepSeek API Key,避免重复配置
  • 应用数据(文档、Wiki、SQLite)落盘到 DSH Home 下的插件专属目录,卸载时可统一清理
  • 启动失败时返回 503 并附带子进程最近日志,方便排查

技术实现

  • 语言: TypeScript(Host)+ 嵌入 Next.js 16 / React 19 的应用
  • 关键依赖: better-sqlite3(原生 SQLite)、@fastify/multipart(文档上传)、fastify(应用 API)、mammoth + pdf-parse(应用内解析)
  • 架构模式: 双面插件——Host 端通过 ctx.webServer.register 暴露 /api/ff-llm-wiki/{open,status} 路由,用 node:child_process.spawn 拉起独立 Node 进程跑应用 API,并用 node:http 启动静态反向代理;Client 端通过 ctx.slots.inject('sidebar.primary.action') 注入一个按钮,点击 window.open('/api/ff-llm-wiki/open') 触发 Host 启动子进程后重定向到 127.0.0.1 的本地端口
  • 入口文件: src/index.ts(Host 启动器)、src/client/Plugin.tsx(侧栏入口)

适用场景

希望把 DSH 当作统一入口,既能用 DSH 主能力、又能附带跑一份企业级知识库演示/生产系统的用户;尤其是想用现成方案演示"文档导入 → 编译式 Wiki → 知识图谱 → 可溯源问答 → 评估"完整链路、且不想自己维护第二套 UI 的团队。

前置依赖与兼容性

依赖最低版本说明
Node.js>=24package.json#engines 强制
DSH未声明插件未显式声明 dsh 最低版本,但仅作为 web 平台注入,需要 DSH Web/Desktop Bundle
DeepSeek API Key无版本要求在 DSH 凭证中心配置 DEEPSEEK_API_KEY;密钥由 DSH 凭证中心托管
原生模块better-sqlite3由嵌入应用在运行时使用,需要平台对应的预编译产物

安装方式

dsh plugin --profile web add github:fufankeji/deepseek-harness-studio/packages/examples/ff-llm-wiki-plugin

配置项

本插件无需额外配置。

插件本身不暴露 Config 字段。所有依赖项均通过 DSH 凭证中心或嵌入应用自身的环境变量提供:

间接配置来源说明
DEEPSEEK_API_KEYDSH 凭证中心应用启动时由 Host 解析并注入到子进程
DEEPSEEK_BASE_URL嵌入应用默认值默认 https://api.deepseek.com,可用嵌入应用环境变量覆盖
DEEPSEEK_MODEL嵌入应用默认值默认 deepseek-v4-flash,可设为 deepseek-v4-pro
PORT / DATABASE_PATH嵌入应用运行时应用自身的环境变量,不需要 DSH 侧关心

常见问题

Q: 这个插件会替换 DSH 主界面吗?

A: 不会。点击侧栏入口只会在系统浏览器新窗口打开独立应用,DSH 原页面、导航、主题和工作区都保持不变。

Q: 需要单独配置 DeepSeek API Key 吗?

A: 不需要。插件从 DSH 凭证中心读取 DEEPSEEK_API_KEY,在 DSH 凭证中心配好之后重启 Host,侧栏状态会显示已配置。

Q: 卸载时数据会被清理吗?

A: 会。文档、Wiki、图谱和 SQLite 数据都写入 DSH Home 下的 ff-llm-wiki 专属目录,卸载时由插件中心统一清理。

Q: 会占用固定端口吗?

A: 不会。插件通过 node:net 自带的端口探测自动挑选空闲端口,Host 同时启动一个 API 子进程和一个静态反向代理,所以不会冲突。

Q: 支持哪些模型?

A: 应用内置 deepseek-v4-flash(默认)与 deepseek-v4-pro 两种选择,在应用内的设置页可以切换并做最小推理验证。

Q: 启动失败怎么办?

A: 启动失败时路由返回 503 并把最近 4KB 子进程日志附加到错误消息;先确认 DEEPSEEK_API_KEY 已配置,然后查看控制台报错。

上手难度

入门 — 安装即可在侧栏看到入口,首次点击会复制种子数据并启动子进程,无需任何配置改动即可在演示数据上跑通完整链路。

已知问题与限制

  • 应用内的检索仍是字段加权算法,没有接入 Embedding 向量索引;知识图谱也是本地规则抽取,不是模型实体抽取(见 application/README.md:169)
  • 嵌入应用没有生产级多租户权限、鉴权、容灾与高可用,定位是单机演示/小规模内部使用
  • 嵌入应用前端没有单元测试框架,质量保障依赖 API 接口测试和浏览器真机验收
  • 插件要求 Node.js >= 24,使用更低版本 Node 会在 package.json#engines 处失败
  • better-sqlite3 是原生模块,如果宿主环境没有匹配的预编译产物,首次安装可能需要本地编译工具链
deepseek-harness-studio/packages/examples/ff-llm-wiki-plugin — DeepSeek Harness 插件 | deepseek-plugin.org