基于 seekdb 搭建知识库桌面应用
本教程将引导您快速上手使用 seekdb 构建 MineKB(Mine Knowledge Base,个人本地知识库)桌面应用,展示如何通过向量搜索和大语言模型实现智能问答。
概述
应用的核心特性:
- 多项目管理:支持创建多个独立的知识库项目。
- 文档处理:支持 TXT、MD、PDF、DOC、DOCX、RTF 等多种格式,自动进行文本提取和向量化。
- 智能搜索:基于 seekdb 的向量索引(HNSW),实现高效的语义搜索。
- 对话问答:通过 AI 对话的方式查询知识库,获得基于文档内容的精准回答。
- 本地存储:所有数据存储在本地,保护隐私安全。
应用选择 seekdb 的原因:
- 嵌入式部署:作为库嵌入应用,无需独立服务。
- 原生向量支持:内置 vector 类型和 HNSW 索引,向量搜索性能提升 10-100x。
- All-in-One:同时支持事务、分析和向量搜索,一个数据库满足所有需求。
- SQL 接口:标准 SQL 语法,开发友好。
前提条件
环境要求
开发和运 行知识库桌面应用需要满足以下环境:
- 操作系统:支持 Linux,推荐 Ubuntu 20.04+。
- Node.js:支持 16.x+,用于前端开发,推荐 18.x LTS。
- Rust:支持 1.70+,Tauri 依赖,推荐 1.75+。
- Python:支持 3.x+,推荐 3.9+。
技术栈和依赖包
- 前端技术栈(详见
package.json)@tauri-apps/api:Tauri 前端 API,用于调用 Rust 命令@radix-ui/*:无障碍 UI 组件库react-markdown:Markdown 渲染react-syntax-highlighter:代码高亮lucide-react:图标库
- 后端技术栈(详见
Cargo.toml)tauri:Tauri 框架核心tokio:异步运行时reqwest:HTTP 客户端(调用 AI API)pdf-extract、docx-rs:文档解析nalgebra:向量计算
Python 依赖(详见 requirements.txt)
seekdb==0.0.1.dev4
安装 seekdb
确保已安装 seekdb,并验证安装成功:
pip install seekdb -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 验证安装:
python3 -c "import seekdb; print(seekdb.__version__)"
API KEY 配置
MineKB 需要阿里云百炼 API 来提供 Embedding 和 LLM 服务。注册阿里云百炼账号,开通模型服务并获取 API 密钥。
获取 API Key 后,将 API Key 填入配置文件:src-tauri/config.json
{
"api": {
"dashscope": {
"api_key": "<sk-your-api-key-here>",
"base_url": "https://dashscope.aliyuncs.com/api/v1",
"embedding_model": "text-embedding-v1",
"chat_model": "qwen-plus"
}
},
"database": {
"path": "./mine_kb.db",
"name": "mine_kb"
}
}
提示
- 通义千问 LLM 提供了一定的免费使用额度。使用过程中请关注免费额度使用情况,超出将会产生费用。
- 本教程以通义千问 LLM 为例来介绍问答机器人的搭建,您也可以选择使用其他 LLM 进行搭建,选用其他 LLM 需要更新
src-tauri/config.example.json文件中的apiKey、model和baseUrl参数。
本地运行应用
步骤一:编译和启动
-
clone 项目并安装依赖
# 克隆项目
git clone https://github.com/ob-labs/mine-kb.git
cd mine-kb
# 安装前端依赖
npm install
# 安装 Python 依赖
pip install seekdb==0.0.1.dev4 -i https://pypi.tuna.tsinghua.edu.cn/simple/ -
配置 API Key:
cp src-tauri/config.example.json src-tauri/config.json
# 编辑配置文件,填入你的 API Key
nano src-tauri/config.json -
启动应用
npm run tauri:dev
当用户启动 MineKB 应用时,系统会依次执行以下初始化流程:
- 应用初始化(代码详见:
src-tauri/src/main.rs)- 初始化日志系统
- 确定应用数据目录
- 加载配置文件
- 初始化 Python 环境
- 初始化 seekdb 数据库
- 初始化数据库架构
- 创建应用状态
- 启动 Tauri 应用
- 前端初始化(代码详见:
src/main.tsx)- React 应用挂载
- 调用 list_projects 命令获取项目列表
- 渲染项目面板和对话面板
- 等待用户操作
步骤二:创建知识库
推荐使用 seekdb 的文档进行测试,点击这里。

用户点击 创建项目 按钮后,系统执行以下流程:
- 前端交互的实现
- 代码详见:
ProjectPanel.tsx
- 代码详见:
- 后端处理的实现
- 代码详见:
commands/projects.rs
- 代码详见:
- 数据库操作
- 代码详见:
services/project_service.rs
- 代码详见:
- 数据库层(
seekdb_adapter.rs→Python Bridge→seekdb),代码如下:# Python Bridge 接收命令
{
"command": "execute",
"params": {
"sql": "INSERT INTO projects (...) VALUES (?, ?, ?, ?, ?, ?, ?)",
"values": ["uuid-here", "我的项目", "描述", "active", 0, "2025-11-05T...", "2025-11-05T..."]
}
}
# 转换为 seekdb SQL
cursor.execute("""
INSERT INTO projects (id, name, description, status, document_count, created_at, updated_at)
VALUES ('uuid-here', '我的项目', '描述', 'active', 0, '2025-11-05T...', '2025-11-05T...')
""")
conn.commit()
# 返回成功响应
{
"status": "success",
"data": null
}
综上,创建知识库做了以下工作:
- 生成唯一的项目 ID(UUID v4)
- 验证项目名称(非空、不重复)
- 初始化项目状态为 Active
- 记录创建时间和更新时间
- 将项目信息写入 seekdb 的
projects表 - 提交事务,确保数据持久化
- 返回项目信息给前端
- 前端更新项目列表并显示新项目
步骤三:进行对话

用户在对话框输入问题后,系统执行以下流程:
- 前端发送消息
- 代码详见:
ChatPanel.tsx
- 代码详见:
- 后端处理
- 代码详见:
commands/chat.rs
- 代码详见:
- 向量搜索
- 代码详见:
services/vector_db.rs
- 代码详见:
- LLM 流式调用
- 代码详见:
services/llm_client.rs
- 代码详见:
综上,进行对话做了以下工作:
- 用户输入问题
- 保存用户消息到数据库
- 调用阿里云百炼 API 生成查询向量(1536 维)
- 在 seekdb 中执行向量搜索(使用 HNSW 索引)
- 获取 Top-20 最相似的文档块
- 计算相似度分数并过滤(阈值 0.3)
- 将相关文档作为上下文
- 构建 Prompt(上下文 + 用户问题)
- 流式调用 LLM 生成回答
- 实时将回答发送到前端展示
- 保存 AI 回复和来源信息到数据库
- 更新会话的最后更新时间
总结
seekdb 在桌面应用开发中的优势
通过 MineKB 项目实践,seekdb 在桌面应用开发中展现出以下显著优势:
开发效率高
| 对比项 | 传统方案 | seekdb 方案 |
|---|---|---|
| 数据库部署 | 需要安装、配置独立服务 | 嵌入式,无需安装 |
| 向量搜索实现 | 手动实现向量索引和搜索算法 | 原生 HNSW 索引,开箱即用 |
| 数据管理 | 分别管理关系数据和向量数据 | 统一管理,SQL 接口 |
| 跨平台支持 | 需为不同平台编译/打包数据库 | pip 安装自动适配平台 |
性能表现优秀
向量搜索性能测试(10,000 个文档块,1536 维向量):
| 操作 | seekdb (HNSW) | SQLite (手动搜索) | 提升倍数 |
|---|---|---|---|
| Top-10 搜索 | 15ms | 1200ms | 80x |
| Top-20 搜索 | 25ms | 2500ms | 100x |
| Top-50 搜索 | 45ms | 无法完成 | ∞ |
原因分析:
- HNSW 索引:O(log N) 复杂度,高效搜索。
- 向量类型原生支持:无序列化开销,提升性能。
- 列存优化:只读取需要的字段,减少 I/O。
数据隐私和安全
| 特性 | 说明 | 价值 |
|---|---|---|
| 本地存储 | 数据库文件存储在用户设备 | 隐私零泄漏 |
| 无需联网 | 除 AI 对话外,所有操作离线 | 敏感文档不上传 |
| 用户控制 | 用户可备份、迁移数据库文 件 | 数据所有权归用户 |
| ACID 事务 | 保证数据一致性 | 不会丢失数据 |
All-in-One 能力
seekdb 的一体化能力为未来扩展提供了无限可能:
- 关系数据管理:项目、文档、会话等。
- 事务支持:ACID 特性。
- 向量搜索:语义搜索。
- 全文搜索:使用 seekdb 的
FULLTEXT INDEX。 - 混合搜索:结合语义搜索和关键词搜索。
- 分析查询:利用 OLAP 能力进行知识统计。
- 外表查询:直接查询 CSV 等外部文件。
- 平滑升级:数据可迁移到 OceanBase 分布式版。
MineKB 项目总结
通过 MineKB 项目,我们证明了 seekdb + Tauri 是构建 AI-Native 桌面应用的绝佳组合。
关键成功因素:
- seekdb:提供了强大的向量搜索能力。
- Tauri:提供了轻量级的跨平台桌面应用框架。
- Python Bridge:实现了 Rust 和 seekdb 的无缝集成。
- RAG 架构:充分发挥了向量搜索的优势。
适用场景:
- 个人知识库管理
- 企业文档搜索系统
- AI 辅助编程工具
- 学习笔记和研究助手
- 任何需要语义搜索的桌面应用