feat: 新增知识库选项卡与完整操作界面——库管理、多格式文档上传(文本/PDF)、自动分块、FTS 全文检索、预览/重切/删除、结果复制
This commit is contained in:
+15
-3
@@ -12,8 +12,8 @@
|
||||
|
||||
```
|
||||
xianren_studio/
|
||||
├── apps/desktop/ Tauri 桌面壳(Rust 命令层、tauri.conf.json、推荐模型/预制智能体/预制工作流默认 JSON、工作流执行引擎 workflow.rs、邮件发送 mail.rs)
|
||||
├── crates/core/ 领域核心:SQLite(模型注册表、智能体、工作流、定时计划、会话、消息、设置)
|
||||
├── apps/desktop/ Tauri 桌面壳(Rust 命令层、tauri.conf.json、推荐模型/预制智能体/预制工作流默认 JSON、工作流执行引擎 workflow.rs、邮件发送 mail.rs、文档提取 knowledge.rs)
|
||||
├── crates/core/ 领域核心:SQLite(模型注册表、智能体、工作流、知识库、定时计划、会话、消息、设置)
|
||||
├── crates/engine/ llama-server 生命周期 + 流式/非流式聊天(本地与远程 OpenAI 兼容)
|
||||
├── crates/download/ 分片断点续传下载器
|
||||
├── crates/api/ OpenAI 兼容本地 API 服务(axum)
|
||||
@@ -48,7 +48,7 @@ apps/desktop/src/commands.rs ← 所有 Tauri 命令(invoke_handler 注册于
|
||||
```
|
||||
ui/src/
|
||||
├── main.tsx 入口
|
||||
├── App.tsx 导航栏、路由(9 个页面)、全局事件订阅(引擎/下载/模型/建议/定时计划/会话)
|
||||
├── App.tsx 导航栏、路由(10 个页面)、全局事件订阅(引擎/下载/模型/建议/定时计划/会话)
|
||||
├── api.ts Tauri invoke 封装 + 全部请求/事件 TypeScript 类型
|
||||
├── store.ts zustand 全局状态(见下)
|
||||
├── styles.css 全局样式
|
||||
@@ -59,6 +59,7 @@ ui/src/
|
||||
├── AgentChatPage.tsx 智能体会话页(按路由加载智能体并渲染 ChatPage 智能体模式)
|
||||
├── WorkflowsPage.tsx 工作流列表(预制/自定义分组、新建/删除/恢复预制)
|
||||
├── WorkflowCanvasPage.tsx 工作流画布(节点拖入/拖拽/连线、滚轮缩放、空白平移、节点/连线右键菜单、导入导出、运行与结果展示)
|
||||
├── KnowledgeBasePage.tsx 知识库(库管理、文档上传/预览/重切、FTS 检索与复制引用)
|
||||
├── ModelsPage.tsx 模型管理(本地部署 + 在线 API 启用开关)
|
||||
├── ModelPlazaPage.tsx 模型广场(HF/ModelScope 搜索与下载)
|
||||
├── TasksPage.tsx 任务(下载/部署进度)
|
||||
@@ -109,6 +110,7 @@ ui/src/
|
||||
| 工作流 | `list_workflows`、`add_workflow`、`update_workflow`、`remove_workflow`、`set_workflow_enabled`、`restore_preset_workflows`、`run_workflow` |
|
||||
| 定时计划 | `list_scheduled_tasks`、`add_scheduled_task`、`update_scheduled_task`、`remove_scheduled_task`、`set_scheduled_task_enabled`、`run_scheduled_task_now` |
|
||||
| 邮件 | `mail_test`(用当前 SMTP 配置发送测试邮件) |
|
||||
| 知识库 | `list_knowledge_bases`、`add_knowledge_base`、`update_knowledge_base`、`remove_knowledge_base`、`list_kb_documents`、`get_kb_document`、`kb_import_documents`、`remove_kb_document`、`kb_rechunk_document`、`kb_search` |
|
||||
| 应用/设置 | `app_info`、`autostart_status`、`autostart_set`、`settings_get`、`settings_set` |
|
||||
| 模型 | `list_models`、`import_model`、`remove_model`、`set_model_enabled`、`scan_models`、`add_remote_model` |
|
||||
| 模型广场 | `search_models`、`list_model_files`、`list_recommended_models`、`import_recommendations`、`fetch_model_page` |
|
||||
@@ -139,6 +141,8 @@ ui/src/
|
||||
- `autostart_status` / `autostart_set`:查询 / 设置开机启动(`tauri-plugin-autostart` 的 `ManagerExt`)。
|
||||
- `run_scheduled_task_once`:大模型执行完成后,若任务开启邮件,按内容模式发送——固定模式用填写的主题/正文,LLM 模式用智能体回答作正文(主题留空取回答首行);邮件发送失败时任务标记失败但保留回答内容。
|
||||
- `send_task_email` / `load_smtp_config` / `split_recipients`:读取设置页「邮件」SMTP 配置、拆分多收件人并调用 `mail.rs` 发送。
|
||||
- `kb_import_documents`:base64 解码 → `knowledge.rs::extract_text` 提取文本(文本类直接 UTF-8,PDF 走 pdf-extract)→ `kb_db::chunk_text` 切块(按知识库 chunk_size/overlap)→ `insert_document_with_chunks` 事务写入文档与分块,逐文件返回成功/失败结果。
|
||||
- `kb_search` / `kb_rechunk_document`:检索走 `kb_db::search`(FTS5 trigram + BM25,短查询回退 LIKE);重切按知识库最新分块设置重建该文档分块与索引。
|
||||
|
||||
**邮件发送模块(`apps/desktop/src/mail.rs`):**
|
||||
|
||||
@@ -180,6 +184,10 @@ ui/src/
|
||||
| `message_versions` | `content`、`tokens_out`、`seq` | 重新生成前的旧版本 |
|
||||
| `skills` | `name`、`description`、`content`、`enabled` | 技能工具库 |
|
||||
| `mcp_servers` | `name`、`description`、`url`、`auth_token`、`enabled` | MCP 服务配置 |
|
||||
| `knowledge_bases` | `name`、`description`、`chunk_size`、`chunk_overlap` | 知识库及分块设置 |
|
||||
| `kb_documents` | `kb_id`(级联删除)、`name`、`file_type`、`file_size`、`char_count`、`chunk_count`、`content`(提取后的纯文本) | 知识库文档;删除/重切分块由 FTS 触发器同步 |
|
||||
| `kb_chunks` | `kb_id`、`document_id`(级联删除)、`seq`、`content` | 文档分块 |
|
||||
| `kb_chunks_fts` | FTS5 虚拟表(contentless-delete + trigram 分词) | 全文检索索引,由 `kb_chunks` 触发器维护 |
|
||||
|
||||
迁移清单(`ensure_column`):`models.kind/base_url/api_key/api_model/enabled`、`messages.elapsed_ms/first_token_ms/images_json/model_id`、`conversations.pinned/favorite/tools_json/agent_id`。
|
||||
|
||||
@@ -209,6 +217,10 @@ ui/src/
|
||||
|
||||
计划任务 CRUD 与运行状态落库:`list/get/insert/update/delete/set_enabled`(停用时清空 `next_run_at`,启用时重新计算)、`mark_running` / `finish_run`(写执行结果并推进下次执行时间)、`list_due`(到点且未运行中的启用计划)、`reset_stale_running`(应用重启后把中断的「运行中」标记为失败);任务行含邮件配置字段(`email_enabled/email_to/email_mode/email_subject/email_body`)。
|
||||
|
||||
### 5.9 `knowledge_base.rs`
|
||||
|
||||
知识库 CRUD(`list/get/insert/update/delete`)、文档 CRUD(`list/get/get_detail`)、`insert_document_with_chunks`(文档 + 分块同事务写入,FTS 触发器自动建索引)、`delete_document`(级联删除分块并同步索引)、`rechunk_document`、`chunk_text`(按字符切块 + 重叠)、`search`(FTS5 trigram BM25 排序,查询 <3 字或 MATCH 失败回退 LIKE)。
|
||||
|
||||
---
|
||||
|
||||
## 6. 引擎与远程调用(`crates/engine`)
|
||||
|
||||
Reference in New Issue
Block a user