# pj0231-eaisalestraining vs pj006-zhilianyuan2 能力对比分析 > 生成日期:2026-08-16 > 范围:知识库能力、考试能力、测试/自测能力、岗位与知识对应能力 > 原则:以**实际代码**为准(本项目 PRD 文档存在过时,见 §0) > > **注:** 本文基于 2026-08-16 代码快照(后端 Go + Gin + GORM,检索为 brute-force 余弦 + bge-m3);数据库与向量栈已决策迁移至 **MySQL 8.0 + FAISS**,见 `docs/db_schema.md` / `docs/deploy.md`。 --- ## 0. 一句话结论 两个项目**不是同一量级**: - **pj0231** 是一个**极简单租户、内部专属的培训平台**——Go 后端约 4,900 行,11 张表,2 个角色,聚焦「看资料 → AI 答疑 → 考试验收」的窄闭环。 - **pj006** 是一个**多租户、多角色、带完整 AI 对练 / 岗位能力模型的通用销售培训平台(智练猿)**——Python 后端约 1.7 万行 + 独立 engine 库,23 版 schema、40+ 张表,4 个前端,具备岗位洋葱模型、知识工厂、AI 角色扮演道场、能力对标等。 在本文对比的四个维度上,pj006 全部**能力更全、更深**;但 pj0231 在个别点上有「更实」的实现(见 §6)。 > ⚠️ **重要前提:pj0231 的 PRD 文档已过时。** > `docs/PRD.md` 写「FastAPI + MySQL + 不做向量检索」,但实际代码是 **Go + Gin + GORM + SQLite**,且检索已实现**向量(brute-force 余弦 + bge-m3 embedding)**。本报告以实际代码为准。 --- ## 1. 系统定位与技术架构对照 | 维度 | pj0231 | pj006 | |---|---|---| | 定位 | 博昇内部培训(单企业) | 通用 AI 销售培训平台(多企业 SaaS) | | 后端 | Go + Gin + GORM + SQLite | Python 3.10 + FastAPI + SQLite(per-org 分库) | | 前端 | 1 个:Vue3 + Vite + Element Plus | 4 个:app / orgadmin / admin / platformadmin | | 角色 | 2(employee / admin) | 多级(学员 / 组织管理员 oadmin / 平台管理员 padmin / 教练 trainer) | | 租户 | 单租户 | 多租户(`orgs` 注册表 + 每 org 一个 `.db`,路由键 `org_code_id`) | | 代码量 | ~4,900 行 Go | ~17,200 行 Python + `zlylibs/engine` 引擎库 | | 数据表 | 11 张 | 40+ 张(schema 版本 v23) | | AI 底座 | 内网 OpenAI 兼容接口(Ollama LLM + bge-m3 embedding) | OpenAI 兼容路由(trainee/coach/eval 三 slot,可配多模型) | | 交付 | 单二进制 + systemd + Clonezilla | 多服务 + 多端 | --- ## 2. 知识库能力对比 | 能力 | pj0231 | pj006 | |---|---|---| | **素材摄入** | ✅ 上传→审批→转换→切片(真实跑通) | ⚠️ 知识工厂骨架完备,但 Phase 1 解析抽取**「不真跑、停 pending」**(见 `schema.py` 中 `kb_asset_tasks` 注释) | | 文档转换 | LibreOffice + pdftotext,切片入 `knowledge_chunk` | 设计了 parse / structured / extraction_blocks 多阶段管线,但未实跑 | | 审批流 | ✅ 三层 `pending / approved / rejected`,审批前置 | ✅ 更细:`working_knowledge_points` 待复核 + `kb_publish_records` 发布链 | | **知识组织** | 扁平 `knowledge_chunk`(段落切片)+ `knowledge_source`(markdown 知识源) | 多层:`knowledge_points` → `knowledge_meta`(语料)→ `knowledge_units`(统一主干,含 domain/section/dimension/sub_dimension/role/position/level/kind)→ `knowledge_chunks`(带 `embedding_status`) | | 术语 / 规则 | ❌ 无 | ✅ `knowledge_terms`(别名/禁用词)、`industry_rules` | | **检索** | ✅ **混合检索**:向量(brute-force 余弦,bge-m3)+ 关键词兜底,去重合并 topK | ⚠️ **实跑的是 jieba 分词 + SQLite LIKE 关键词检索**;向量(ChromaDB/Neo4j)仅文档宣称,`embedding_status` 字段预留 | | **自动出题** | ❌ 无 | ✅ 设计:`working_questions` 从知识块自动生成题目(待复核) | | 知识-题目/场景关联 | 仅题目挂 `course_id` | ✅ `question_knowledge_units`、`scene_knowledge_units`、`knowledge_unit_links` 三张桥接表 | **小结**:pj0231 的「文档→文本→检索」链路**真实端到端跑通**(且检索更强,含向量);pj006 的知识模型**层级深、可扩展强**(知识主干 + 术语 + 规则 + 自动出题 + 发布链),但知识工厂的自动解析在 Phase 1 尚未实跑。 --- ## 3. 考试能力对比 | 能力 | pj0231 | pj006 | |---|---|---| | 题型 | 单选 / 多选 / 判断 | 单选 / 多选 / 判断 / **简答 essay** | | 简答题评分 | ❌ 无 | ✅ LLM 按 rubric 评分(`engine.eval.grade_short_answer`),得分率持久化 `exam_session_grades` | | **组卷** | ✅ 按知识域 + 随机抽题(`randomize`、`domain` 逗号分隔) | ⚠️ 实际是**固定 `question_ids` 列表**(手动组卷);蓝图组卷(`position_exam_blueprints`)已落表+CRUD,但考试服务未接蓝图抽题 | | 考试次数 | 正式考**只允许一次**(重考即 409) | ✅ `max_attempts`(最多考 N 次)、`deadline` 截止 | | 自测模式 | ✅ 自测(不限次、即时对错、**不存记录**) | ✅ 练习走独立 `practice` 模块(见 §4) | | 判分 | 确定性比对(`isCorrect`) | 选择题确定性 + 简答 LLM;总分 = Σ得分率/题数×100 | | **成绩分析** | 仅存记录:得分 / 正确率 / 答题明细 | ✅ **维度能力分析**(`competency_breakdown`:weak<70% / ok / strong≥90%)、薄弱题、改进建议 | | 错题联动 | ❌ 无 | ✅ 交卷错题自动写入 `mistake_records`(错题本) | | 成绩档案 | `exam_record`(永久存档) | `exam_sessions` + 报告回溯(`review_exam`) | **小结**:pj006 考试在**题型(简答)、评分(LLM)、维度分析、错题联动、考试次数控制**上全面领先;pj0231 仅在**自动随机抽题组卷**这一点上更「自动化」(pj006 实际为手动固定组卷)。 --- ## 4. 测试 / 自测 / 评估能力对比 ### 4.1 面向学员的自测与评估(产品能力) | 能力 | pj0231 | pj006 | |---|---|---| | 自测练习 | ✅ 自测(即时对错,不存记录) | ✅ 每日一练 `practice`(**游戏化**:段位/星/连击/经验/积分 `practice_profile`) | | 错题本 | ❌ 无 | ✅ `mistake_records`(练习+考试两来源聚合,可标记已掌握) | | 学习笔记 / 收藏 | ❌ 无 | ✅ `study_notes` + 收藏(`study_progress.favorited`) | | 学习档案 / 学情 | ❌ **明确禁止**(PRD 第 7 节) | ✅ 学习档案 dashboard:学习天数、**能力对标**(来自对练复盘评分)、AI 对练摘要 | | **AI 对练复盘评分** | ❌ 无(仅快捷动作「扮演销售」的文本生成) | ✅ `dialogue_review_scores` + `ReviewScoreService`:维度评分、整体等级、趋势、强项/风险维度、复发问题、改进建议 | ### 4.2 面向软件工程的自动化测试(工程能力) | 维度 | pj0231 | pj006 | |---|---|---| | 后端测试 | ❌ **0 个 `_test.go`** | ✅ 31 个 pytest 文件(exam/eval/position/profile/dojo/dialogue/review/kb/…) | | 引擎测试 | 无 engine 层 | ✅ `zlylibs/engine/tests` 约 20 个(HEP 8层、DSRP loader、UPP、KB、eval、e2e smoke) | | 测试策略文档 | ❌ 无 | ✅ `docs/12_Test_Strategy`(可见点击测试、完整旅程 E2E 测试计划、legacy prompt) | | CI / 依赖管理 | 无 | ✅ pyproject `[dependency-groups] dev = pytest` | **小结**:这是**差距最大**的一项。pj006 有完整的 pytest 测试体系 + 测试策略文档 + E2E 测试计划;pj0231 **一行测试都没有**。 --- ## 5. 岗位与知识对应能力对比(差距最大的维度) 这是 pj0231 的**结构性缺失**——PRD 明确「不做能力档案、不做复杂权限」,代码里用户只有 `role` 字段,**完全没有岗位概念**。 | 能力 | pj0231 | pj006 | |---|---|---| | 岗位表 | ❌ 无 | ✅ `positions`(code/name/description,按 org 隔离) | | 岗位↔用户绑定 | ❌ 无 | ✅ `user_positions` | | **岗位能力模型(洋葱模型)** | ❌ 无 | ✅ `competency_layers`(C1知识技能/C2能力素质/C3职业素养)+ `competency_levels`(**L1-L4**)+ `competency_details` | | 能力模型自动生成 | ❌ 无 | ✅ `generate_competency_model`(自动生成三层 + L1-L4 初稿,可人工保存) | | **岗位↔知识映射** | ❌ 无 | ✅ `position_knowledge_units`(required_level / weight / is_mandatory),`auto_match_knowledge_units` 自动匹配 + 人工修正 | | **岗位考试蓝图** | ❌ 无 | ✅ `position_exam_blueprints`(维度/级别/题型/题量/权重) | | 标准岗位 / 职级代码 | ❌ 无 | ✅ `SD01_Standard_Job_Codes`(JobFunction + JobRank 双正交编码)+ `SD06_PROFILE_CODE_ENUM.json` | | 岗位驱动学练考 | ❌ 无 | ✅ 设计文档 `DA00_07`(A11 学习分发 / A12 练习分发 / A13 考试蓝图组卷) | | 用户身份 / 角色分级 | 2 角色 | 学员/教练/组织管理员/平台管理员 + NPC 人格(`UPP`) | **小结**:pj006 把岗位从「一个标签」升级成了「知识分发与能力成长的**主控制器**」——岗位决定学什么(知识单元映射)、练什么(薄弱维度反查)、考什么(考试蓝图)。pj0231 完全没有这条能力链,这也是两项目最本质的定位差异。 --- ## 6. 反向差异:pj0231 有、pj006 反而没有 / 较弱的点 诚实地讲,pj0231 并非全面落后,有几个点它反而更「实」: 1. **向量检索是真实现**:pj0231 的混合检索(向量余弦 + 关键词)端到端可用;pj006 实际跑的是 jieba 关键词,向量仅停在文档与字段预留层。 2. **随机 + 按知识域自动抽题组卷**:pj0231 支持;pj006 考试实际为固定题目列表(蓝图组卷未接)。 3. **文档→文本→检索链路真实跑通**:pj0231 的 LibreOffice / pdftotext 切片入库是完整的;pj006 的知识工厂「解析抽取」在 Phase 1 未实跑(仅表结构 + 状态机)。 4. **AI 算力点计费 + 审计日志**:pj0231 有 `ai_call_log`(按用户扣点、按能力计费、延迟/错误审计);pj006 未见同等的算力计费。 --- ## 7. 关键文件索引(证据) **pj0231**(本项,实际代码为准): - 数据模型:`eaisalestrain_app/backend-go/internal/model/`(11 张表) - 检索:`eaisalestrain_app/backend-go/internal/ai/retrieve.go`(混合检索) - 考试:`eaisalestrain_app/backend-go/internal/api/exam.go`(组卷 / 判分 / 存档) - AI 聊天:`eaisalestrain_app/backend-go/internal/api/ai_chat.go`(PathCoach + 3 快捷动作) **pj006**(对比项): - 数据模型:`zlyapp/backend/app/db/schema.py`(v23,40+ 表,含 `orgs` 多租户根) - 考试:`zlyapp/backend/app/exam/service.py`(简答 LLM 评分、维度分析、错题联动) - 评估:`zlyapp/backend/app/eval/service.py`(学习档案、错题本、对练摘要) - 岗位:`zlyapp/backend/app/position/service.py`(洋葱模型生成、岗位知识自动匹配、考试蓝图) - 检索:`zlyapp/backend/app/kb/sqlite_retriever.py`(jieba + LIKE) - 引擎:`zlylibs/engine/`(HEP 8层、DSRP、UPP、KB、eval)+ 约 20 测试 - 岗位洋葱设计:`docs/07_Data_Assets/DA00_07_Position_Onion_Model.md` - 测试策略:`docs/12_Test_Strategy/` --- ## 8. 给下一步的建议(不改代码,仅判断) 若目标是让 pj0231 **向 pj006 对齐**,优先级建议(按 ROI): 1. **补岗位模型 + 岗位-知识映射**(`positions` / `user_positions` / `position_knowledge_units`)——这是两项目最本质的差距,也是「岗位与知识对应」这一诉求的核心。 2. **补错题本 + 学习档案**(`mistake_records`、维度能力分析)——pj0231 考试目前「考完就结束」,无闭环。 3. **补简答题题型 + LLM 评分**——已有 LLM 底座,复用成本低。 4. **补自动化测试**——当前 0 测试是工程隐患。 不建议盲目引入的:多租户分库、NPC 人格 / HEP 引擎、KPI 模块——这些与 pj0231「极简内网单企业」定位冲突,ROI 低。