- 后端:新增 /api/audio/transcribe 接口,调用 Ollama whisper 进行语音识别 - 前端:新增 AudioTranscribePage.vue 页面,支持 MP3/WAV/M4A/OGG/FLAC 等格式 - 注册路由、工具卡片、智能助手欢迎语更新 Co-Authored-By: Claude Code <noreply@anthropic.com>
12 KiB
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 并非全面落后,有几个点它反而更「实」:
- 向量检索是真实现:pj0231 的混合检索(向量余弦 + 关键词)端到端可用;pj006 实际跑的是 jieba 关键词,向量仅停在文档与字段预留层。
- 随机 + 按知识域自动抽题组卷:pj0231 支持;pj006 考试实际为固定题目列表(蓝图组卷未接)。
- 文档→文本→检索链路真实跑通:pj0231 的 LibreOffice / pdftotext 切片入库是完整的;pj006 的知识工厂「解析抽取」在 Phase 1 未实跑(仅表结构 + 状态机)。
- 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):
- 补岗位模型 + 岗位-知识映射(
positions/user_positions/position_knowledge_units)——这是两项目最本质的差距,也是「岗位与知识对应」这一诉求的核心。 - 补错题本 + 学习档案(
mistake_records、维度能力分析)——pj0231 考试目前「考完就结束」,无闭环。 - 补简答题题型 + LLM 评分——已有 LLM 底座,复用成本低。
- 补自动化测试——当前 0 测试是工程隐患。
不建议盲目引入的:多租户分库、NPC 人格 / HEP 引擎、KPI 模块——这些与 pj0231「极简内网单企业」定位冲突,ROI 低。