包含前端(Vue3 + VueFlow 画布)、后端(Go)、文档体系。 - 工作台画布:节点拖放、连线模式、右键菜单、AI 助手 - 后端:连接器 API、专员种子数据 - 导航:左侧导航、工坊、市场、控制台
17 KiB
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(修复内部不自洽):
-
明确 AI LLM 底座为「内网可访问地址(OpenAI 兼容接口)」,消除「无外网依赖」与「配置 LLM 地址」的矛盾。
-
明确 MP4 仅预览、不提取文本、不进 AI 知识库,消除「不做转码」与「视频进 AI」的矛盾。
-
补充 PDF 文本提取技术选型(PyMuPDF)。
-
补充题库管理、组卷规则、合格线配置,补全考试闭环。
-
补充产品 / 课程内容的后台维护入口。
-
补充认证鉴权方案(JWT + bcrypt + 后端 API 鉴权)。
-
补充大文件分片上传、审批后异步转换任务、上传安全。
-
补充核心数据表字段设计。
-
部署架构补充 LLM 服务与 Nginx 反代。
-
项目概述 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;视频采用分片上传 + 断点续传。
数据库只存元数据,不存文件二进制。
审批通过后的转换 / 文本提取为后台异步任务,不阻塞请求。
- 项目目录结构(最终强制规范) 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
-
全局页面布局(全站统一) 全站固定三栏结构,所有页面统一
顶部导航菜单 中间主内容区 右侧常驻 AI PathCoach 聊天框(可收起 / 展开)
-
顶部导航菜单(最终定稿) 普通员工可见菜单(5 个)
首页 公司介绍培训 产品知识 产品销售培训 考试
管理员额外可见菜单(员工完全看不到)
知识管理(下拉)
系统管理(下拉)
完整导航结构
-
考试(下拉子菜单)
自测练习 正式结业考试 我的考试记录 题库管理【管理员专属,员工不可见】
-
知识管理【管理员专属】
课件素材管理 素材审批列表
-
系统管理【管理员专属】
用户账号管理 全部考试成绩 系统参数配置
-
四大核心业务模块详细需求 5.1 公司介绍培训(认知层) 包含:
企业简介 双主营业务介绍(资本咨询 / AI 产业落地) 对外统一口径
功能:
纯阅读页面
可绑定 PPT / 视频课件
员工可提交素材建议
5.2 产品知识(静态手册) 四大产品分类:
资本咨询类
资质认定辅导类
AI 咨询与实施类
企业级 AI 工具与平台
产品详情固定字段:
产品编号、名称、标签
业务内容说明
收费结构
两档佣金比例(推荐 / 谈单参与)
公开课超额分成高亮
版本风险、报备规则备注
页面按钮:
前往对应销售培训课程
向 AI 提问(自动注入产品上下文)
数据维护(管理员):
管理员在【产品知识】模块可直接新增 / 编辑 / 停用产品,字段严格对齐《博昇产品与渠道合作表 V1.0》。
支持逐条录入与批量导入(Excel / JSON),导入数据同样需管理员确认后生效。
5.3 产品销售培训(能力层) 四大课程:
资本产品谈单话术
资质辅导销售逻辑
AI 公开课 / 诊断销售技巧
AI 平台产品方案匹配
课程内容:
适配客户 & 禁接客户
标准话术
谈单流程、异议处理
交付避坑、报备规范
页面按钮:
查看对应产品
数据维护(管理员):
管理员在【产品销售培训】模块可直接编辑课程正文内容,并绑定 / 解绑对应产品。
5.4 考试系统(含成绩记录) 题型(固定三种,极简)
单选题
多选题
判断题
题库管理(管理员专属)
管理员在【题库管理】录入 / 编辑 / 停用题目。
题目归属知识域:公司介绍 / 产品知识 / 销售培训(可选绑定具体课程)。
字段:题干、选项、正确答案、答案解析。
组卷规则(考试配置)
管理员在【题库管理】配置考试(paper):考试名称、类型(自测 / 正式)、
抽题知识域、题量、总分、合格线、考试时长、是否随机抽题。
正式考试按配置抽题或固定卷;自测可随机抽题。
两种模式
自测练习
不限次数
即时对错 + 答案
不保存任何记录
正式结业考试
提交后永久保存考试档案
记录得分、正确率、答题明细、是否通过
考试权限
员工:只能看自己考试记录
管理员:可查看所有人全部考试记录
-
知识库课件体系(含审批流程) 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,杜绝路径穿越。
上传目录对静态预览只读,禁止直接执行。
-
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.1 知识管理
课件素材新增、编辑、删除、绑定课程 / 产品。 素材审批(预览、通过、驳回 + 理由)。
8.2 系统管理
用户账号新增、禁用、角色分配。
全员考试成绩查询、详情查看。
系统参数配置(LLM 地址与 Key、文件大小限制、分片阈值等)。
8.3 内容管理(产品 / 课程 / 题库)
产品知识与销售培训内容的录入、编辑、停用(见 5.2 / 5.3)。
题库管理与考试配置(见 5.4)。
-
认证、鉴权与安全 认证方式
JWT:登录成功签发 access token,过期时间由系统参数配置;前端存 token,请求头携带。 密码 bcrypt 哈希存储,永不明文。
鉴权(强制)
后端 API 层统一鉴权依赖:普通接口校验有效 token,管理员接口额外校验 role == admin。
前端路由守卫仅作 UX 隐藏,不作为安全边界;所有权限以后端鉴权为准。
账号与状态
仅管理员可创建 / 禁用账号;禁用账号即时失效(token 校验时检查 status)。
-
考试记录系统(完整闭环) 数据表 exam_record 保存字段
用户 ID、考试(paper)ID、考试名称、得分、总分、合格线 是否通过、答对 / 答错数 完整答题明细 JSON 考试时间
权限规则
员工:仅自己记录
管理员:全量记录可查
-
数据表设计(核心字段) 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
-
明确禁止开发的功能(强制)
无学习进度仪表盘 无学情分析、无能力档案 无复杂权限、无多级角色 无视频转码、无语音转写(ASR) 无向量检索(V1.1 不引入 embedding 依赖) 无外网依赖、严禁直连公网 AI API 无云存储、无 MinIO 无强制学习任务 无课程解锁限制
-
系统运行逻辑闭环
学公司认知 查产品手册(价格 / 佣金 / 规则) 学销售谈单能力 看课件视频辅助学习 AI 模拟演练答疑 正式考试存档验收 管理员统一审核素材、维护产品 / 课程 / 题库、管理账号、查看全员成绩
-
部署架构(纯本地离线) plaintext
本地内网环境 Nginx(反代 + 前端 Vue 静态打包) FastAPI 后端服务 MySQL 数据库 libreoffice-preview 本地文档转换容器 内网 LLM 服务(Ollama / vLLM / 内网网关,OpenAI 兼容接口) 文件存储:本地磁盘 data/media 完全无外网、无云服务