chore: 工作台产品化进行中的改动

把工作区里其余在制品一并入库,主要是工作台产品化的推进:

  后端:新增 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>
This commit is contained in:
eaiadmin
2026-09-17 21:32:35 +08:00
co-authored by Claude Code
parent 8b136d4a10
commit 16d63de4e1
180 changed files with 22283 additions and 13850 deletions
+24 -21
View File
@@ -1,9 +1,9 @@
# eai_agentplatform_app 博昇内部培训平台 — 产品需求文档
# eai_agentplatform — 产品需求文档
> **版本:V1.1 最终版(V1 培训底座基线)| 纯本地化部署 | 极简架构 | 全功能闭环**
> **最后更新:2026-08-15**
> **版本:V1.3 | 部署模式:纯本地化 · Go 单二进制 + SQLite · systemd**
> **最后更新:2026-08-16**
>
> **文档状态:V1 基线,已升级。** 本项目已于 2026-08 升级为「数字员工平台」(对外以「专员」为能力单元,分通用数字员工 / 行业专属数字员工),当前产品主轴、分层架构与目标态见 [01_System_Overall/SY03](01_System_Overall/SY03_Knowledge_Centric_Agent_Platform_Strategy.md) 及 SY04–SY17。本文档描述的是已交付的 V1 培训底座(学习/考试/AI 答疑闭环),其中 §7「明确禁止」已随 V1.6 起部分放开,实际以 `docs/changelog.md` 为准。
> **文档状态:** 本文档描述已交付的 V1 培训底座(学习/考试/AI 答疑闭环),产品已升级为「数字员工平台」。当前产品主轴、分层架构与目标态见 [01_System_Overall/SY03](01_System_Overall/SY03_Knowledge_Centric_Agent_Platform_Strategy.md) 及 SY04–SY17。实际以 `docs/changelog.md` 为准。
---
@@ -11,13 +11,13 @@
### 1.1 项目定位
博昇 纯内网本地化、内部专属员工培训系统。用于新人入职培训、公司认知、产品知识学习、销售能力培训、统一考试验收。配套全局 AI 助教 PathCoach,提供答疑、产品查询、销售情景演练。
eai_agentplatform — 纯内网本地化、内部专属数字员工培训平台。用于新人入职培训、公司认知、产品知识学习、销售能力培训、统一考试验收。配套全局 AI 助教 PathCoach,提供答疑、产品查询、销售情景演练。
### 1.2 核心设计原则(强制)
- 100% 本地化部署,不上云、无 OSS、无 MinIO、不依赖公网云服务
- AI 所用 LLM 必须为内网可访问地址(本地 Ollama / vLLM / 内网统一 LLM 网关),严禁直连公网 AI API
- 极致极简,杜绝所有冗余功能、统计、学情分析、复杂权限
- 功能以业务价值为准,杜绝为加而加的冗余功能;权限保持精简(employee/admin 两级)
- 所有产品数据严格对齐《博昇产品与渠道合作表 V1.0》
- 所有课件支持:PPT / PDF / Word / MP4 视频 / 图片
- 所有上传素材必须审批通过才可生效、进入知识库、页面展示
@@ -28,11 +28,11 @@
| 层级 | 技术 |
|------|------|
| **前端** | Vue3 + Vite + Element Plus + 本地 pdf.js(无 CDN)+ 原生 video |
| **后端** | Go + Gin + GORM(原 V1.1 为 FastAPI,已于 V1.2 重写)|
| **数据库** | MySQL 8.0 + FAISS 向量检索 |
| **后端** | Go + Gin + GORM + SQLite(modernc 纯Go驱动)|
| **数据库** | SQLite 单文件 `data/eai_agentplatform.db` + Go 原生 brute-force 向量检索(余弦)+ 关键词兜底 |
| **认证** | JWT(golang-jwt)+ bcrypt 密码哈希 |
| **PDF 提取** | LibreOffice + pdftotext(裸进程)|
| **依赖服务** | LibreOffice(PPT/Word → PDF 预览)+ 内网 LLM 服务(OpenAI 兼容接口)|
| **依赖服务** | LibreOffice(PPT/Word→PDF 预览)+ 内网 LLM 服务(OpenAI 兼容接口)|
### 1.4 硬性技术限制
@@ -120,19 +120,23 @@
## 4. 知识库课件体系
### 素材来源
- **员工提交素材建议**(弹窗提交,无独立页面)
- **管理员直接上传**(自动通过)
### 素材状态
`pending`(待审批)→ `approved`(已通过)→ `rejected`(已驳回)
### 核心规则
- 未审批 / 驳回素材前台完全不可见、不解析、不进 AI
- 审批通过才执行:文档转 PDF + 文本提取入库
- 视频(MP4)审批通过后仅支持在线预览,不提取文本
### 转换与提取管线
PPT/Word → LibreOffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写入 knowledge_chunk
PPT/Word → LibreOffice 转 PDF → pdftotext 提取文本 → 按段落切片写入 knowledge_chunk
---
@@ -141,8 +145,8 @@ PPT/Word → LibreOffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写
- **位置:** 全局常驻右侧,可收起
- **自动上下文:** 打开产品 / 课程 → 自动带入当前页面全部资料
- **快捷按钮:** 客户情景演练 | 查询佣金/规则 | 产品对比
- **AI 底座:** OpenAI 兼容接口(内网 Ollama / vLLM / LLM 网关)
- **知识检索:** MySQL 全文索引(关键词)+ FAISS 向量检索(语义)双路混合召回
- **AI 底座:** OpenAI 兼容接口(内网 Ollama / vLLM / 内网网关)
- **知识检索:** Go 原生 brute-force 向量检索(余弦)+ 关键词兜底(对齐 D07/D13)
- **能力边界:** 仅解答公司、产品、佣金、销售话术、业务规则,禁止闲聊和编造数据
---
@@ -158,7 +162,6 @@ PPT/Word → LibreOffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写
## 7. 明确禁止开发的功能(V1.1 约束,部分已随平台升级放开)
- ~~无学习进度仪表盘、无学情分析、无能力档案~~ → V1.6 起已实现(积分/排行榜/证书/学习档案/能力雷达)
- ~~无向量检索~~ → 已采用 MySQL + FAISS 混合检索
- 无复杂权限、无多级角色、无多租户洋葱模型 → 仍保持
- 无视频转码、无语音转写(ASR)→ 仍保持
- 无外网依赖、严禁直连公网 AI API → 仍保持
@@ -174,9 +177,9 @@ PPT/Word → LibreOffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写
| **user** | id, username, password_hash, full_name, role(employee/admin), status(active/disabled) |
| **product** | id, code, name, category, tags, description, pricing, commission_recommend, commission_negotiate, public_course_bonus, version_risk, report_rules, status |
| **course** | id, code, name, category, target_customers, forbidden_customers, scripts, sales_process, objection_handling, delivery_pitfalls, report_rules, related_product_id |
| **media_file** | id, filename, stored_name, stored_path, file_ext, file_size, status(pending/approved/rejected), source, submitter_id, bind_type, bind_id, extracted |
| **knowledge_chunk** | id, media_file_id, source_type, source_id, chunk_index, content |
| **question** | id, domain, course_id, type(single/multiple/judge), stem, options(JSON), answer(JSON), explanation, status |
| **media_file** | id, filename, file_path, file_size, file_type, status(pending/approved/rejected), source, submitter_id, bind_type, bind_id, extract_status |
| **knowledge_chunk** | id, media_file_id, knowledge_source_id, source_type, source_id, chunk_index, content |
| **question** | id, domain, course_id, type(single/multiple/judge/essay), stem, options(JSON), answer(JSON), explanation, status |
| **exam_paper** | id, name, type(self_test/formal), domain, question_count, total_score, pass_score, duration_minutes, randomize |
| **exam_record** | id, user_id, paper_id, exam_name, score, total_score, pass_score, passed, correct_count, wrong_count, detail_json |
@@ -186,11 +189,11 @@ PPT/Word → LibreOffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写
```
Nginx(反代 + 前端 Vue 静态打包)
→ FastAPI 后端服务
→ MySQL 数据库
→ LibreOffice 文档转换容器
→ eai_agentplatform-server(Go 单二进制 :8080)
→ SQLite 单文件 data/eai_agentplatform.db
→ LibreOffice + pdftotext(裸进程)
→ 内网 LLM 服务(Ollama / vLLM / 内网网关)
→ 文件存储:本地磁盘 data/media
→ 文件存储:data/kb_data
```
完全无外网、无云服务。
完全无外网、无云服务、无 Docker、无 MySQL、无 FAISS。