把工作区里其余在制品一并入库,主要是工作台产品化的推进:
后端:新增 capability_definition / project / my_app_center / office_skill
接口与 action_definition / skill_definition / project / user_app_center
模型,config 加路由健康上报。
前端:新增 frontend/src/skills(Office 技能与 workbuddy 复刻)、
项目管理、应用中心、能力目录页,以及配套 api / store / config;
聊天侧新增 SpecialistChip / SpecialistPanel / SkillStrip / AppChatRail
等组件。
清理:移除旧 views/tools 下的单页工具(已并入工作台)、_frozen 冻结组件、
cmd/inspect_oa_debug 调试入口,以及两份调试笔记。
其它:文档与启动脚本同步。
(这批改动与上一提交的 SY23 工作并行进行,此前已在同一工作区内交织。)
Co-Authored-By: Claude Code <noreply@anthropic.com>
2.7 KiB
2.7 KiB
AR03 — 数据库架构设计
版本:V2.0 | 引擎:SQLite(modernc 纯Go驱动) 完整建表 SQL 请见 docs/db_schema.md
1. ER 关系总图
user ──< media_file (submitter_id / audit_by)
user ──< exam_record (user_id)
product ──< course (related_product_id)
course ──< question (course_id, optional)
media_file ──< knowledge_chunk (media_file_id)
exam_paper ──< exam_record (paper_id)
2. 表清单
| # | 表名 | 说明 | 核心字段数 |
|---|---|---|---|
| 1 | user |
用户账号 | 7 |
| 2 | product |
产品信息 | 16 |
| 3 | course |
课程内容 | 16 |
| 4 | media_file |
素材文件元数据 | 16 |
| 5 | knowledge_chunk |
AI 知识库文本块 | 6 |
| 6 | question |
题库题目 | 11 |
| 7 | exam_paper |
考试配置/组卷 | 11 |
| 8 | exam_record |
考试记录档案 | 12 |
| 9 | system_config |
系统参数配置 | 4 |
3. 索引策略
| 表 | 索引 | 类型 | 说明 |
|---|---|---|---|
user |
role, status |
BTREE | 角色筛选、状态筛选 |
product |
category, status |
BTREE | 分类筛选、状态筛选 |
course |
category, status, related_product_id |
BTREE | 同上 |
media_file |
status, submitter_id, (bind_type, bind_id), extracted |
BTREE | 审批列表、绑定查询、提取状态 |
knowledge_chunk |
media_file_id |
BTREE | 关联查询 |
question |
domain, course_id, status |
BTREE | 知识域筛选、课程筛选 |
exam_paper |
type, status |
BTREE | 考试类型筛选 |
exam_record |
user_id, paper_id, passed, submitted_at |
BTREE | 用户查记录、管理员查全部 |
system_config |
config_key |
UNIQUE | 键查值 |
4. AI 知识检索说明
Go 内 brute-force 余弦向量检索(Ollama bge-m3 embedding)+ 关键词兜底:
-- SQLite 原生,无全文索引,向量检索在 Go 层实现
-- knowledge_chunk.content 字段存储文本,向量计算由 Go net/http 调用 Ollama
检索流程(当前):
- 用户提问 → embedding 向量(bge-m3)
- Go 遍历 knowledge_chunk.content 计算余弦距离(数据量小无需 ANN)
- 匹配段落作为上下文注入 LLM Prompt
- LLM 基于上下文生成回答
5. 文件存储策略
- 数据库只存元数据,不存文件二进制
- 物理文件存储在
data/media/ - 目录结构:
data/media/ ├── upload/ # 上传文件存储(UUID 重命名) └── _preview_cache/ # 预览缓存(LibreOffice 转 PDF 后存放) - 文件命名:UUID 重命名,杜绝路径穿越
- 文件扩展名白名单:ppt / pptx / pdf / doc / docx / mp4 / png / jpg / jpeg