Files
pj0235-eai_agentplatform/docs/对比分析_pj0231_vs_pj006-zhilianyuan2.md
T
eaiadminandClaude Code 0455f064ac feat: 新增语音转文字(ASR)功能
- 后端:新增 /api/audio/transcribe 接口,调用 Ollama whisper 进行语音识别
- 前端:新增 AudioTranscribePage.vue 页面,支持 MP3/WAV/M4A/OGG/FLAC 等格式
- 注册路由、工具卡片、智能助手欢迎语更新

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-14 00:53:36 +08:00

162 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# pj0231-eai_agentplatforming 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 一个 `<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**(本项,实际代码为准):
- 数据模型:`eai_agentplatform_app/backend-go/internal/model/`(11 张表)
- 检索:`eai_agentplatform_app/backend-go/internal/ai/retrieve.go`(混合检索)
- 考试:`eai_agentplatform_app/backend-go/internal/api/exam.go`(组卷 / 判分 / 存档)
- AI 聊天:`eai_agentplatform_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 低。