跳到主要内容

基于 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-extractdocx-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 文件中的 apiKeymodelbaseUrl 参数。

本地运行应用

步骤一:编译和启动

  1. 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/
  2. 配置 API Key:

    cp src-tauri/config.example.json src-tauri/config.json
    # 编辑配置文件,填入你的 API Key
    nano src-tauri/config.json
  3. 启动应用

    npm run tauri:dev

    minekb-1

当用户启动 MineKB 应用时,系统会依次执行以下初始化流程:

  • 应用初始化(代码详见:src-tauri/src/main.rs
    • 初始化日志系统
    • 确定应用数据目录
    • 加载配置文件
    • 初始化 Python 环境
    • 初始化 seekdb 数据库
    • 初始化数据库架构
    • 创建应用状态
    • 启动 Tauri 应用
  • 前端初始化(代码详见:src/main.tsx
    • React 应用挂载
    • 调用 list_projects 命令获取项目列表
    • 渲染项目面板和对话面板
    • 等待用户操作

步骤二:创建知识库

推荐使用 seekdb 的文档进行测试,点击这里

minekb-2

用户点击 创建项目 按钮后,系统执行以下流程:

  • 前端交互的实现
    • 代码详见:ProjectPanel.tsx
  • 后端处理的实现
    • 代码详见:commands/projects.rs
  • 数据库操作
    • 代码详见:services/project_service.rs
  • 数据库层(seekdb_adapter.rsPython Bridgeseekdb),代码如下:
    # 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
    }

综上,创建知识库做了以下工作:

  1. 生成唯一的项目 ID(UUID v4)
  2. 验证项目名称(非空、不重复)
  3. 初始化项目状态为 Active
  4. 记录创建时间和更新时间
  5. 将项目信息写入 seekdb 的 projects
  6. 提交事务,确保数据持久化
  7. 返回项目信息给前端
  8. 前端更新项目列表并显示新项目

步骤三:进行对话

minekb-3

用户在对话框输入问题后,系统执行以下流程:

  • 前端发送消息
    • 代码详见:ChatPanel.tsx
  • 后端处理
    • 代码详见:commands/chat.rs
  • 向量搜索
    • 代码详见:services/vector_db.rs
  • LLM 流式调用
    • 代码详见:services/llm_client.rs

综上,进行对话做了以下工作:

  1. 用户输入问题
  2. 保存用户消息到数据库
  3. 调用阿里云百炼 API 生成查询向量(1536 维)
  4. 在 seekdb 中执行向量搜索(使用 HNSW 索引)
  5. 获取 Top-20 最相似的文档块
  6. 计算相似度分数并过滤(阈值 0.3)
  7. 将相关文档作为上下文
  8. 构建 Prompt(上下文 + 用户问题)
  9. 流式调用 LLM 生成回答
  10. 实时将回答发送到前端展示
  11. 保存 AI 回复和来源信息到数据库
  12. 更新会话的最后更新时间

总结

seekdb 在桌面应用开发中的优势

通过 MineKB 项目实践,seekdb 在桌面应用开发中展现出以下显著优势:

开发效率高

对比项传统方案seekdb 方案
数据库部署需要安装、配置独立服务嵌入式,无需安装
向量搜索实现手动实现向量索引和搜索算法原生 HNSW 索引,开箱即用
数据管理分别管理关系数据和向量数据统一管理,SQL 接口
跨平台支持需为不同平台编译/打包数据库pip 安装自动适配平台

性能表现优秀

向量搜索性能测试(10,000 个文档块,1536 维向量):

操作seekdb (HNSW)SQLite (手动搜索)提升倍数
Top-10 搜索15ms1200ms80x
Top-20 搜索25ms2500ms100x
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 桌面应用的绝佳组合。

关键成功因素:

  1. seekdb:提供了强大的向量搜索能力。
  2. Tauri:提供了轻量级的跨平台桌面应用框架。
  3. Python Bridge:实现了 Rust 和 seekdb 的无缝集成。
  4. RAG 架构:充分发挥了向量搜索的优势。

适用场景:

  • 个人知识库管理
  • 企业文档搜索系统
  • AI 辅助编程工具
  • 学习笔记和研究助手
  • 任何需要语义搜索的桌面应用