把工作区里其余在制品一并入库,主要是工作台产品化的推进:
后端:新增 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>
482 lines
17 KiB
Markdown
482 lines
17 KiB
Markdown
eai_agentplatform — EAI 数字员工平台
|
||
最终完整定稿 PRD(可直接交付 AI 生成前后端代码)
|
||
版本:V1.1 最终版 | 纯本地化部署 | 极简架构 | 全功能闭环
|
||
|
||
> **⚠️ 本文档为 V1.1 设计期历史快照。** 项目已升级为「数字员工平台」(对外以「专员」为能力单元,见 `01_System_Overall/SY03` 及 SY04–SY17);技术栈已重写为 **Go + Gin + GORM + SQLite**;「不做向量检索 / 无学情分析」等约束已随 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 视频播放
|
||
|
||
后端
|
||
|
||
Go + Gin + GORM
|
||
SQLite(modernc 纯Go驱动)
|
||
认证:JWT(golang-jwt)+ bcrypt 密码哈希
|
||
文档转换:LibreOffice(裸进程)+ pdftotext
|
||
|
||
部署
|
||
|
||
systemd(裸进程)+ Clonezilla 整盘克隆,单二进制交付
|
||
|
||
硬性技术限制
|
||
|
||
不做视频转码,仅支持 H.264 标准 MP4;不做语音转写(ASR),视频不进 AI 文本知识库。
|
||
文件白名单:ppt、pptx、pdf、doc、docx、mp4、png、jpg、jpeg。
|
||
单文件上限:文档 200MB / 视频 2GB;视频采用分片上传 + 断点续传。
|
||
数据库只存元数据,不存文件二进制。
|
||
审批通过后的转换 / 文本提取为后台异步任务,不阻塞请求。
|
||
|
||
2. 项目目录结构(最终强制规范)
|
||
plaintext
|
||
|
||
eai_agentplatform/ # 项目根目录(所有代码集中此处)
|
||
├── docs/ # 独立文档目录(只放文档,不放代码)
|
||
│ ├── PRD.md
|
||
│ ├── db_schema.md
|
||
│ ├── api.md
|
||
│ ├── deploy.md
|
||
│ └── changelog.md
|
||
├── frontend/ # 前端完整代码
|
||
├── backend-go/ # Go 后端(单二进制 + systemd)
|
||
├── .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-go/
|
||
├── cmd/
|
||
│ └── server.go # 入口:gin.Engine + systemd 裸进程
|
||
├── internal/
|
||
│ ├── api/ # 路由层(Gin handlers)
|
||
│ │ ├── auth.go # /api/auth/* — 登录/注册/me
|
||
│ │ ├── company_train.go # /api/company-train/*
|
||
│ │ ├── product.go # /api/products/*
|
||
│ │ ├── exam.go # /api/exam/* — 题库/组卷/考试/记录
|
||
│ │ ├── media.go # /api/media/* — 上传/预览/审批
|
||
│ │ ├── ai_chat.go # /api/ai-chat/* — PathCoach SSE
|
||
│ │ └── system.go # /api/system/* — 用户/成绩/配置
|
||
│ ├── model/ # GORM 模型
|
||
│ │ ├── user.go
|
||
│ │ ├── product.go
|
||
│ │ ├── course.go
|
||
│ │ ├── media_file.go
|
||
│ │ ├── knowledge_chunk.go
|
||
│ │ ├── question.go
|
||
│ │ ├── exam_paper.go
|
||
│ │ └── exam_record.go
|
||
│ ├── store/ # 数据库层
|
||
│ │ └── db.go # SQLite Init + AutoMigrate
|
||
│ ├── ai/ # AI 客户端与检索
|
||
│ │ ├── llm.go # OpenAI 兼容 LLM 调用
|
||
│ │ └── retrieve.go # 知识检索
|
||
│ ├── config/ # 配置加载
|
||
│ └── middleware/ # 中间件(JWT 认证等)
|
||
├── knowledge_source/ # 知识源 Markdown(运行时)
|
||
├── data/ # 运行时数据(db+media,git 忽略)
|
||
└── deploy/ # systemd 单元 + DELIVERY.md
|
||
|
||
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-go/data/media
|
||
文本知识库:SQLite knowledge_chunk
|
||
文件元数据:SQLite 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,采用 Go 内 brute-force 向量检索(余弦)+ 关键词兜底。
|
||
召回片段作为上下文注入 Prompt;数据量小无需 ANN 向量库。
|
||
若后续需要向量增强,作为可选项,不纳入 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 静态打包)
|
||
Go + Gin 后端服务
|
||
SQLite 数据库(单文件,systemd 守护)
|
||
libreoffice + pdftotext 本地文档转换
|
||
内网 LLM 服务(Ollama / vLLM / 内网网关,OpenAI 兼容接口)
|
||
文件存储:本地磁盘 data/media
|
||
完全无外网、无云服务
|