基于 Spring Boot + Vue 的本地知识库管理系统,支持文章录入、LLM 自动归类、同主题聚合为知识、全量版本管理与变更 diff 展示。
mysql -u root -p < backend/src/main/resources/schema.sql
或在 MySQL 客户端中执行 backend/src/main/resources/schema.sql 全部内容。
如需修改数据库连接,编辑 backend/src/main/resources/application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/knowledge_extractor?...
username: root
password: your_password
run.bat # 构建 + 启动(端口 7945)
run.bat build # 仅构建
chmod +x run.sh
./run.sh # 构建 + 启动
./run.sh build # 仅构建
浏览器打开 http://localhost:7945
首次访问会跳转到 /setup 页面,设置管理员账号并配置 LLM。
| 层 | 技术 |
|---|---|
| 后端 | Spring Boot 3.2 + MyBatis Plus + MySQL 8 + JWT (jjwt) + Jsoup + DiffMatchPatch |
| 前端 | Vue 3 + Vite + Element Plus + Pinia + Vue Router + marked + diff-match-patch |
| 部署 | 合并部署(前端构建产物直出后端 static),端口 7945 |
knowledge-extractor/
├── backend/ Spring Boot 后端
├── frontend/ Vue 3 前端
├── docs/ 设计文档
│ ├── 01-requirements.md 需求与决策记录
│ ├── 02-architecture.md 架构设计
│ ├── 03-skill-constraints.md 技能约束备忘录
│ └── 04-llm-prompts.md LLM Prompt 设计
├── run.bat / run.sh 一键构建脚本
├── .gitattributes
└── README.md
详细设计请查看 docs/ 目录下 4 份文档。
系统使用 OpenAI 兼容协议,已测试可用的服务商:
| 服务商 | base_url | model 示例 |
|---|---|---|
| OpenAI | https://api.openai.com/v1 |
gpt-4o-mini |
| DeepSeek | https://api.deepseek.com/v1 |
deepseek-chat |
| 智谱 GLM | https://open.bigmodel.cn/api/paas/v4 |
glm-4-flash |
| Moonshot | https://api.moonshot.cn/v1 |
moonshot-v1-8k |
| 通义千问 | https://dashscope.aliyuncs.com/compatible-mode/v1 |
qwen-plus |
| 本地 Ollama | http://localhost:11434/v1 |
llama3.1:8b |
任何兼容 OpenAI /v1/chat/completions 协议的服务均可使用。
录入文章(md/txt/链接)
↓
LLM 归类
├── 匹配已有标签(0~5 个)
├── 建议新增标签(最多 2 个,含父路径)
└── 归纳主题名
↓
LLM 聚合判定
├── 并入已有知识 → 生成增补内容 + diff
└── 新建知识 → 生成初版全文 + diff
↓
知识库展示
└── 时间轴查看每次变更(描述 + diff + 关联原文章)
Q:忘记管理员密码怎么办?
直接操作数据库重置:
-- 用 BCrypt 工具生成新密码 hash(如密码 "123456")
UPDATE sys_user SET password_hash = '$2a$10$xxx', salt = '$2a$10$xxx' WHERE username = 'admin';
Q:如何修改 JWT 密钥?
编辑 backend/src/main/resources/application.yml 的 jwt.secret 字段(至少 32 字节)。
Q:前端如何修改后再部署?
只需重新执行 run.bat 或 run.bat build,Vite 会自动把最新前端打包到后端 static 目录。
Q:链接抓取失败怎么办?
在文章录入页选择"链接"类型时,若抓取失败,系统会提示错误。可改用 md 类型手动粘贴正文。