init: 数字员工平台初始代码
包含前端(Vue3 + VueFlow 画布)、后端(Go)、文档体系。 - 工作台画布:节点拖放、连线模式、右键菜单、AI 助手 - 后端:连接器 API、专员种子数据 - 导航:左侧导航、工坊、市场、控制台
This commit is contained in:
@@ -0,0 +1,493 @@
|
||||
eaisalestrain_app 博昇内部培训平台
|
||||
最终完整定稿 PRD(可直接交付 AI 生成前后端代码)
|
||||
版本:V1.1 最终版 | 纯本地化部署 | 极简架构 | 全功能闭环
|
||||
|
||||
> **⚠️ 本文档为 V1.1 设计期历史快照。** 项目已升级为「数字员工平台」(对外以「专员」为能力单元,见 `01_System_Overall/SY03` 及 SY04–SY17);技术栈已重写为 Go + Gin + GORM + MySQL 8.0 + FAISS;「不做向量检索 / 无学情分析」等约束已随 V1.6 起放开,以 `docs/changelog.md` 为准。
|
||||
|
||||
修订记录
|
||||
V1.0 → V1.1(修复内部不自洽):
|
||||
1. 明确 AI LLM 底座为「内网可访问地址(OpenAI 兼容接口)」,消除「无外网依赖」与「配置 LLM 地址」的矛盾。
|
||||
2. 明确 MP4 仅预览、不提取文本、不进 AI 知识库,消除「不做转码」与「视频进 AI」的矛盾。
|
||||
3. 补充 PDF 文本提取技术选型(PyMuPDF)。
|
||||
4. 补充题库管理、组卷规则、合格线配置,补全考试闭环。
|
||||
5. 补充产品 / 课程内容的后台维护入口。
|
||||
6. 补充认证鉴权方案(JWT + bcrypt + 后端 API 鉴权)。
|
||||
7. 补充大文件分片上传、审批后异步转换任务、上传安全。
|
||||
8. 补充核心数据表字段设计。
|
||||
9. 部署架构补充 LLM 服务与 Nginx 反代。
|
||||
|
||||
1. 项目概述
|
||||
1.1 项目定位
|
||||
博昇 纯内网本地化、内部专属员工培训系统
|
||||
用于新人入职培训、公司认知、产品知识学习、销售能力培训、统一考试验收。
|
||||
配套全局 AI 助教 PathCoach,提供答疑、产品查询、销售情景演练。
|
||||
|
||||
1.2 核心设计原则(强制)
|
||||
|
||||
100% 本地化部署,不上云、无 OSS、无 MinIO、不依赖公网云服务。
|
||||
AI 所用 LLM 必须为内网可访问地址(本地 Ollama / vLLM / 内网统一 LLM 网关),严禁直连公网 AI API。
|
||||
极致极简,杜绝所有冗余功能、统计、学情分析、复杂权限。
|
||||
所有产品数据严格对齐《博昇产品与渠道合作表 V1.0》。
|
||||
所有课件支持:PPT / PDF / Word / MP4 视频 / 图片。
|
||||
所有上传素材必须审批通过才可生效、进入知识库、页面展示。
|
||||
考试区分自测 / 正式考试,正式考试永久留存成绩档案。
|
||||
|
||||
1.3 技术栈(最终固定)
|
||||
整体架构
|
||||
前后端分离、单服务器内网部署
|
||||
|
||||
前端
|
||||
|
||||
Vue3 + Vite
|
||||
Element Plus
|
||||
本地 pdf.js(无 CDN)
|
||||
原生 video 视频播放
|
||||
|
||||
后端
|
||||
|
||||
FastAPI (Python)
|
||||
SQLAlchemy ORM
|
||||
MySQL 8.0
|
||||
认证:JWT(python-jose)+ bcrypt 密码哈希
|
||||
PDF 文本提取:PyMuPDF
|
||||
|
||||
依赖服务(共两个)
|
||||
|
||||
1. 本地 Docker:libreoffice-preview
|
||||
用于 PPT/Word → PDF 预览、文本提取入库
|
||||
|
||||
2. 内网 LLM 服务(OpenAI 兼容接口)
|
||||
本地 Ollama / vLLM / 内网统一 LLM 网关均可
|
||||
地址通过【系统参数配置】维护,启动时读取
|
||||
|
||||
硬性技术限制
|
||||
|
||||
不做视频转码,仅支持 H.264 标准 MP4;不做语音转写(ASR),视频不进 AI 文本知识库。
|
||||
文件白名单:ppt、pptx、pdf、doc、docx、mp4、png、jpg、jpeg。
|
||||
单文件上限:文档 200MB / 视频 2GB;视频采用分片上传 + 断点续传。
|
||||
数据库只存元数据,不存文件二进制。
|
||||
审批通过后的转换 / 文本提取为后台异步任务,不阻塞请求。
|
||||
|
||||
2. 项目目录结构(最终强制规范)
|
||||
plaintext
|
||||
|
||||
eaisalestrain_app/ # 项目根目录(所有代码集中此处)
|
||||
├── docs/ # 独立文档目录(只放文档,不放代码)
|
||||
│ ├── PRD.md
|
||||
│ ├── db_schema.md
|
||||
│ ├── api.md
|
||||
│ ├── deploy.md
|
||||
│ └── changelog.md
|
||||
├── frontend/ # 前端完整代码
|
||||
├── backend/ # 后端完整代码
|
||||
├── docker-compose.yml
|
||||
├── .gitignore
|
||||
└── README.md
|
||||
|
||||
前端目录结构
|
||||
plaintext
|
||||
|
||||
frontend/
|
||||
├── public/static-lib/ # 本地pdf.js(无外网CDN)
|
||||
├── src/
|
||||
│ ├── api/
|
||||
│ ├── components/
|
||||
│ │ └── MaterialSuggestUpload.vue # 员工提交素材弹窗
|
||||
│ ├── layout/ # 全局布局(顶部导航+右侧AI框)
|
||||
│ ├── router/ # 含管理员路由守卫
|
||||
│ ├── store/
|
||||
│ ├── views/
|
||||
│ │ ├── home/
|
||||
│ │ ├── companyTrain/
|
||||
│ │ ├── product/
|
||||
│ │ ├── salesTrain/
|
||||
│ │ ├── exam/
|
||||
│ │ │ ├── ExamSelfTest.vue
|
||||
│ │ │ ├── ExamFormal.vue
|
||||
│ │ │ ├── ExamMyRecord.vue
|
||||
│ │ │ └── ExamQuestionBank.vue # 管理员-题库管理
|
||||
│ │ ├── knowledge/ # 管理员-知识管理
|
||||
│ │ │ ├── MaterialManage.vue
|
||||
│ │ │ └── MaterialAuditList.vue
|
||||
│ │ └── system/ # 管理员-系统管理
|
||||
│ │ ├── UserManage.vue
|
||||
│ │ ├── SystemConfig.vue
|
||||
│ │ └── ExamRecordManage.vue
|
||||
│ ├── App.vue
|
||||
│ └── main.js
|
||||
|
||||
后端目录结构
|
||||
plaintext
|
||||
|
||||
backend/
|
||||
├── app/
|
||||
│ ├── main.py
|
||||
│ ├── api/
|
||||
│ │ ├── auth.py
|
||||
│ │ ├── company_train.py
|
||||
│ │ ├── product.py
|
||||
│ │ ├── sales_train.py
|
||||
│ │ ├── exam.py
|
||||
│ │ ├── media.py
|
||||
│ │ ├── ai_chat.py
|
||||
│ │ └── system.py
|
||||
│ ├── models/
|
||||
│ │ ├── user.py
|
||||
│ │ ├── product.py
|
||||
│ │ ├── course.py
|
||||
│ │ ├── media_file.py
|
||||
│ │ ├── knowledge_chunk.py
|
||||
│ │ ├── question.py
|
||||
│ │ ├── exam_paper.py
|
||||
│ │ └── exam_record.py
|
||||
│ ├── schemas/
|
||||
│ ├── services/
|
||||
│ │ ├── media_service.py
|
||||
│ │ ├── ai_service.py
|
||||
│ │ └── exam_service.py
|
||||
│ ├── core/
|
||||
│ │ ├── config.py # 读取 .env 与系统参数
|
||||
│ │ ├── security.py # JWT 签发 / 校验、密码哈希、鉴权依赖
|
||||
│ │ └── deps.py
|
||||
│ └── utils/
|
||||
├── data/media/ # 本地文件存储(git忽略)
|
||||
│ ├── upload/
|
||||
│ └── _preview_cache/
|
||||
├── requirements.txt
|
||||
└── .env
|
||||
|
||||
3. 全局页面布局(全站统一)
|
||||
全站固定三栏结构,所有页面统一
|
||||
|
||||
顶部导航菜单
|
||||
中间主内容区
|
||||
右侧常驻 AI PathCoach 聊天框(可收起 / 展开)
|
||||
|
||||
4. 顶部导航菜单(最终定稿)
|
||||
普通员工可见菜单(5 个)
|
||||
|
||||
首页
|
||||
公司介绍培训
|
||||
产品知识
|
||||
产品销售培训
|
||||
考试
|
||||
|
||||
管理员额外可见菜单(员工完全看不到)
|
||||
|
||||
知识管理(下拉)
|
||||
系统管理(下拉)
|
||||
|
||||
完整导航结构
|
||||
1. 考试(下拉子菜单)
|
||||
|
||||
自测练习
|
||||
正式结业考试
|
||||
我的考试记录
|
||||
题库管理【管理员专属,员工不可见】
|
||||
|
||||
2. 知识管理【管理员专属】
|
||||
|
||||
课件素材管理
|
||||
素材审批列表
|
||||
|
||||
3. 系统管理【管理员专属】
|
||||
|
||||
用户账号管理
|
||||
全部考试成绩
|
||||
系统参数配置
|
||||
|
||||
5. 四大核心业务模块详细需求
|
||||
5.1 公司介绍培训(认知层)
|
||||
包含:
|
||||
|
||||
企业简介
|
||||
双主营业务介绍(资本咨询 / AI 产业落地)
|
||||
对外统一口径
|
||||
|
||||
功能:
|
||||
|
||||
纯阅读页面
|
||||
可绑定 PPT / 视频课件
|
||||
员工可提交素材建议
|
||||
|
||||
5.2 产品知识(静态手册)
|
||||
四大产品分类:
|
||||
|
||||
资本咨询类
|
||||
资质认定辅导类
|
||||
AI 咨询与实施类
|
||||
企业级 AI 工具与平台
|
||||
|
||||
产品详情固定字段:
|
||||
|
||||
产品编号、名称、标签
|
||||
业务内容说明
|
||||
收费结构
|
||||
两档佣金比例(推荐 / 谈单参与)
|
||||
公开课超额分成高亮
|
||||
版本风险、报备规则备注
|
||||
|
||||
页面按钮:
|
||||
|
||||
前往对应销售培训课程
|
||||
向 AI 提问(自动注入产品上下文)
|
||||
|
||||
数据维护(管理员):
|
||||
|
||||
管理员在【产品知识】模块可直接新增 / 编辑 / 停用产品,字段严格对齐《博昇产品与渠道合作表 V1.0》。
|
||||
支持逐条录入与批量导入(Excel / JSON),导入数据同样需管理员确认后生效。
|
||||
|
||||
5.3 产品销售培训(能力层)
|
||||
四大课程:
|
||||
|
||||
资本产品谈单话术
|
||||
资质辅导销售逻辑
|
||||
AI 公开课 / 诊断销售技巧
|
||||
AI 平台产品方案匹配
|
||||
|
||||
课程内容:
|
||||
|
||||
适配客户 & 禁接客户
|
||||
标准话术
|
||||
谈单流程、异议处理
|
||||
交付避坑、报备规范
|
||||
|
||||
页面按钮:
|
||||
|
||||
查看对应产品
|
||||
|
||||
数据维护(管理员):
|
||||
|
||||
管理员在【产品销售培训】模块可直接编辑课程正文内容,并绑定 / 解绑对应产品。
|
||||
|
||||
5.4 考试系统(含成绩记录)
|
||||
题型(固定三种,极简)
|
||||
|
||||
单选题
|
||||
多选题
|
||||
判断题
|
||||
|
||||
题库管理(管理员专属)
|
||||
|
||||
管理员在【题库管理】录入 / 编辑 / 停用题目。
|
||||
题目归属知识域:公司介绍 / 产品知识 / 销售培训(可选绑定具体课程)。
|
||||
字段:题干、选项、正确答案、答案解析。
|
||||
|
||||
组卷规则(考试配置)
|
||||
|
||||
管理员在【题库管理】配置考试(paper):考试名称、类型(自测 / 正式)、
|
||||
抽题知识域、题量、总分、合格线、考试时长、是否随机抽题。
|
||||
正式考试按配置抽题或固定卷;自测可随机抽题。
|
||||
|
||||
两种模式
|
||||
|
||||
自测练习
|
||||
|
||||
不限次数
|
||||
即时对错 + 答案
|
||||
不保存任何记录
|
||||
|
||||
正式结业考试
|
||||
|
||||
提交后永久保存考试档案
|
||||
记录得分、正确率、答题明细、是否通过
|
||||
|
||||
考试权限
|
||||
|
||||
员工:只能看自己考试记录
|
||||
管理员:可查看所有人全部考试记录
|
||||
|
||||
6. 知识库课件体系(含审批流程)
|
||||
6.1 素材来源两种方式
|
||||
|
||||
员工提交素材建议(弹窗提交,无独立页面)
|
||||
管理员直接上传(自动通过)
|
||||
|
||||
6.2 素材状态
|
||||
|
||||
pending 待审批
|
||||
approved 已通过(生效、可预览、进入 AI 知识库)
|
||||
rejected 已驳回
|
||||
|
||||
6.3 核心强制规则
|
||||
|
||||
未审批 / 驳回素材,前台完全不可见、不解析、不进 AI。
|
||||
只有审批通过才执行:文档转 PDF + 文本提取入库。
|
||||
视频(MP4)审批通过后仅支持在线预览,不提取文本、不进 AI 知识库(不做语音转写)。
|
||||
员工只能在课程 / 产品详情弹窗提交。
|
||||
管理员在【知识管理】处理审核、管理素材。
|
||||
|
||||
6.4 转换与提取(异步,技术规格)
|
||||
|
||||
文档(PPT / Word)→ libreoffice 转 PDF → PyMuPDF 提取文本 → 按段落切片写入 knowledge_chunk。
|
||||
PDF / 图片(png/jpg/jpeg)→ 直接预览;PDF 走 PyMuPDF 文本提取;图片不做 OCR(极简,不进 AI 文本库)。
|
||||
以上转换 / 提取均由后台异步任务执行,任务结果写入 media_file(extracted 字段 + 日志),前端轮询或接口查询状态。
|
||||
|
||||
6.5 存储位置
|
||||
|
||||
物理文件:backend/data/media
|
||||
文本知识库:MySQL knowledge_chunk
|
||||
文件元数据:MySQL media_file
|
||||
|
||||
6.6 上传规格
|
||||
|
||||
文档 ≤ 200MB 单请求直传;视频 > 一定阈值(如 100MB)采用分片上传 + 断点续传,合并后校验扩展名与大小。
|
||||
服务端校验文件扩展名(白名单)与 MIME,文件名重命名为存储 UUID,杜绝路径穿越。
|
||||
上传目录对静态预览只读,禁止直接执行。
|
||||
|
||||
7. AI PathCoach 全局智能体
|
||||
7.1 全局常驻右侧,可收起
|
||||
7.2 自动上下文
|
||||
打开产品 / 课程 → 自动带入当前页面全部资料
|
||||
7.3 固定 3 个快捷按钮
|
||||
|
||||
客户情景演练
|
||||
查询佣金 / 规则
|
||||
产品对比
|
||||
|
||||
7.4 AI 底座(LLM,明确)
|
||||
|
||||
采用 OpenAI 兼容接口,地址 + API Key 通过【系统参数配置】维护。
|
||||
必须是内网可达地址:本地 Ollama / vLLM / 内网统一 LLM 网关。
|
||||
严禁直连公网 AI API(违反本地化强制原则)。
|
||||
|
||||
7.5 知识检索方案
|
||||
|
||||
检索基于已审批素材的 knowledge_chunk,采用 MySQL 全文索引 + 关键词召回。
|
||||
召回片段作为上下文注入 Prompt;不做向量检索(避免引入 embedding 额外依赖,保持极简)。
|
||||
若后续需要向量增强,作为可选项,不纳入 V1.1 范围。
|
||||
|
||||
7.6 AI 能力边界
|
||||
|
||||
仅解答公司、产品、佣金、销售话术、业务规则。
|
||||
禁止闲聊、禁止编造数据。
|
||||
严格依赖已审批知识库;知识库无相关内容时明确回答「未找到相关资料」,不得臆测。
|
||||
|
||||
8. 管理员专属功能
|
||||
8.1 知识管理
|
||||
|
||||
课件素材新增、编辑、删除、绑定课程 / 产品。
|
||||
素材审批(预览、通过、驳回 + 理由)。
|
||||
|
||||
8.2 系统管理
|
||||
|
||||
用户账号新增、禁用、角色分配。
|
||||
全员考试成绩查询、详情查看。
|
||||
系统参数配置(LLM 地址与 Key、文件大小限制、分片阈值等)。
|
||||
|
||||
8.3 内容管理(产品 / 课程 / 题库)
|
||||
|
||||
产品知识与销售培训内容的录入、编辑、停用(见 5.2 / 5.3)。
|
||||
题库管理与考试配置(见 5.4)。
|
||||
|
||||
9. 认证、鉴权与安全
|
||||
认证方式
|
||||
|
||||
JWT:登录成功签发 access token,过期时间由系统参数配置;前端存 token,请求头携带。
|
||||
密码 bcrypt 哈希存储,永不明文。
|
||||
|
||||
鉴权(强制)
|
||||
|
||||
后端 API 层统一鉴权依赖:普通接口校验有效 token,管理员接口额外校验 role == admin。
|
||||
前端路由守卫仅作 UX 隐藏,不作为安全边界;所有权限以后端鉴权为准。
|
||||
|
||||
账号与状态
|
||||
|
||||
仅管理员可创建 / 禁用账号;禁用账号即时失效(token 校验时检查 status)。
|
||||
|
||||
10. 考试记录系统(完整闭环)
|
||||
数据表 exam_record 保存字段
|
||||
|
||||
用户 ID、考试(paper)ID、考试名称、得分、总分、合格线
|
||||
是否通过、答对 / 答错数
|
||||
完整答题明细 JSON
|
||||
考试时间
|
||||
|
||||
权限规则
|
||||
|
||||
员工:仅自己记录
|
||||
管理员:全量记录可查
|
||||
|
||||
11. 数据表设计(核心字段)
|
||||
user 用户表
|
||||
|
||||
id、username(唯一)、password_hash、full_name、
|
||||
role(employee / admin)、status(active / disabled)、created_at、updated_at
|
||||
|
||||
product 产品表
|
||||
|
||||
id、code(产品编号,唯一)、name、category(四大分类)、tags、
|
||||
description(业务内容说明)、pricing(收费结构)、
|
||||
commission_recommend(推荐佣金比例)、commission_negotiate(谈单参与佣金比例)、
|
||||
public_course_bonus(公开课超额分成)、version_risk(版本风险)、
|
||||
report_rules(报备规则)、status(active / inactive)、created_at、updated_at
|
||||
|
||||
course 课程表
|
||||
|
||||
id、code、name、category(四大课程)、
|
||||
target_customers(适配客户)、forbidden_customers(禁接客户)、
|
||||
scripts(标准话术)、sales_process(谈单流程)、objection_handling(异议处理)、
|
||||
delivery_pitfalls(交付避坑)、report_rules(报备规范)、
|
||||
related_product_id(绑定产品,可空)、status、created_at、updated_at
|
||||
|
||||
media_file 素材表
|
||||
|
||||
id、filename(原始名)、stored_name(存储 UUID 名)、stored_path、file_ext、file_size、
|
||||
status(pending / approved / rejected)、source(employee / admin)、submitter_id、
|
||||
bind_type(company / product / course / none)、bind_id、
|
||||
reject_reason、audit_by、audit_at、extracted(是否已提取)、created_at
|
||||
|
||||
knowledge_chunk 知识块表
|
||||
|
||||
id、media_file_id、source_type、source_id、chunk_index、content、created_at
|
||||
|
||||
question 题目表
|
||||
|
||||
id、domain(company / product / sales)、course_id(可空)、
|
||||
type(single / multiple / judge)、stem、options(JSON)、answer(JSON)、
|
||||
explanation、status、created_at、updated_at
|
||||
|
||||
exam_paper 考试配置表
|
||||
|
||||
id、name、type(self_test / formal)、domain、question_count、
|
||||
total_score、pass_score、duration_minutes、randomize(是否随机抽题)、
|
||||
status、created_at、updated_at
|
||||
|
||||
exam_record 考试记录表
|
||||
|
||||
id、user_id、paper_id、exam_name、score、total_score、pass_score、
|
||||
passed、correct_count、wrong_count、detail_json、submitted_at
|
||||
|
||||
12. 明确禁止开发的功能(强制)
|
||||
|
||||
无学习进度仪表盘
|
||||
无学情分析、无能力档案
|
||||
无复杂权限、无多级角色
|
||||
无视频转码、无语音转写(ASR)
|
||||
无向量检索(V1.1 不引入 embedding 依赖)
|
||||
无外网依赖、严禁直连公网 AI API
|
||||
无云存储、无 MinIO
|
||||
无强制学习任务
|
||||
无课程解锁限制
|
||||
|
||||
13. 系统运行逻辑闭环
|
||||
|
||||
学公司认知
|
||||
查产品手册(价格 / 佣金 / 规则)
|
||||
学销售谈单能力
|
||||
看课件视频辅助学习
|
||||
AI 模拟演练答疑
|
||||
正式考试存档验收
|
||||
管理员统一审核素材、维护产品 / 课程 / 题库、管理账号、查看全员成绩
|
||||
|
||||
14. 部署架构(纯本地离线)
|
||||
plaintext
|
||||
|
||||
本地内网环境
|
||||
Nginx(反代 + 前端 Vue 静态打包)
|
||||
FastAPI 后端服务
|
||||
MySQL 数据库
|
||||
libreoffice-preview 本地文档转换容器
|
||||
内网 LLM 服务(Ollama / vLLM / 内网网关,OpenAI 兼容接口)
|
||||
文件存储:本地磁盘 data/media
|
||||
完全无外网、无云服务
|
||||
Reference in New Issue
Block a user