eai_agentplatform_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 eai_agentplatform_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 完全无外网、无云服务