Files
pj0235-eai_agentplatform/eai_agentplatform/PROJECT_STATE.md
T
eaiadminandClaude Code 20df2ff06e feat: SQLite 定期备份内置进二进制
SQLite 是单文件、没有外部主从,坏一份就是全丢,而 data/ 一直被 gitignore、
此前没有任何备份。备份做进二进制,不依赖外部 cron / systemd timer。

- 快照用 VACUUM INTO,不用 cp 主库:服务边跑边写时 cp 可能拷到写了一半的页
- 启动时补一次,之后每小时醒一次看是否到期;默认间隔 24h、保留最近 7 份
- 产出自检 SQLite 文件头,不合格即删并报错,不留「看着像备份的废物」
- 新增 -backup 子命令,供升级 / 迁移 / 交付前手工备一份
- 落 data/backups/ —— systemd 单元是 ProtectSystem=strict,只放开了 data/ 可写
- 边界写进文档:只防误删 / 误改 / 写坏,不防整盘损坏,跨机保存仍需人工

配套:
- deploy/DELIVERY.md 新增第 7 节「数据备份与恢复」+ 红线条目
- clonezilla-cleanup.sh 提示克隆前清空 data/backups/,避免原型机测试数据被带走
- deploy/eaisalestrain.env 补 4 个备份环境变量
- PROJECT_STATE.md 记 D24

另:清理 worker_task 中 17 条没聊过天的历史空任务(id 1-11、13-18),
删前先备份、清单经确认,删除程序带「命中数与白名单不一致即中止」保险。
该项为一次性数据操作,不产生代码改动。

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

10 KiB
Raw Blame History

项目状态总览(PROJECT_STATE)

单一事实源:新对话默认先读此文件恢复上下文;每次关键决策后必须更新。 最后更新:2026-08-24

1. 项目是什么

eai_agentplatform_app — EAI 数字员工平台(AI Agent Platform)。 纯内网本地化的企业 AI 数字员工平台,围绕数字员工(专员)、知识库底座、自动化工坊、 考试评估与系统管理组织业务能力。配套全局 AI 助手。

2. 当前状态

已完成

  • ✅ PRD V1.1 最终定稿(docs/PRD.md / 设计稿)
  • ✅ 文档架构搭建(docs/ 体系)
  • ✅ 编码规范制定(CODING_RULES.md / CLAUDE.md / PROJECT_STATE.md)
  • ✅ 知识入库体系(BE05)后端代码落地:knowledge_source 表 + 解析/扫描/摄入 + 审批 API + 脚本

已完成(Go 后端)

  • ✅ 后端重写为 Go 完成:认证 / CRUD / 考试 / 素材媒体 / 知识入库 / AI PathCoach / 系统管理
  • ✅ 交付形态落地:单二进制 + systemd + Clonezilla 清理清单(backend-go/deploy/)
  • ✅ 岗位与知识对应能力(P0):Position / PositionKnowledge 表 + 岗位 CRUD + 知识映射 + 用户设岗(user.position_id)+ 岗位驱动组卷(exam_paper.position_id → pickQuestions 岗位过滤分支); 前端「岗位管理」页 + 映射编辑面板 + 用户/考试关联岗位下拉
  • ✅ 岗位能力闭环(P1 + P2):学员「我的岗位应学清单」(/api/my/position)+ 成绩按岗位聚合(/api/system/exam-stats-by-position)+ 岗位考试蓝图(position_exam_blueprint); 错题本(mistake_record)+ 简答题 LLM 评分(essay 题型 + essay_grade 能力)+ 后端自动化测试(_test.go,go test ./... 全绿)
  • ✅ 学员成长体系(对标竞品,突破「极简/禁止学情分析」边界):学习积分 + 排行榜(point_event + user.learning_points);考试合格证书(certificate,正式通过自动颁发);学习档案/能力雷达 (/api/my/profile,按域掌握度 + 薄弱域 + 成绩趋势);前端新增「我的学习档案 / 我的证书 / 学习排行榜」页
  • ✅ 组织架构 + 消息通知:部门字典(department)+ 按部门学情统计(/api/system/department-stats); 站内通知(notification,考试发布/考试通过发证/设岗三事件推送)+ 侧栏铃铛角标; 社交社区/讨论区定死不做

待开始

  • ⬜ 按 docs/01_System_Overall/SY19_Universal_Digital_Worker_Product_Planning.md 将当前项目从“已有专员雏形”进一步收口为“通用数字员工平台 V1.0”

3. 已拍板决策

# 决策 状态
D01 前端:Vue3 + Vite + Element Plus 已定
D02 后端:Go + Gin + GORM + SQLite(modernc 纯Go驱动,接口留 MySQL 兼容) 已定
D03 认证:JWT(golang-jwt)+ bcrypt 已定
D04 文档转换:LibreOffice(裸进程)+ pdftotext 已定
D05 AI 底座:内网 OpenAI 兼容接口(非公网) 已定
D06 视频仅预览、不提取文本、不进 AI 已定
D07 知识检索:混合检索(向量 brute-force + 关键词兜底),数据量小无需 ANN 已定
D08 审批通过后异步转换/提取 已定
D09 视频 > 100MB 分片上传 + 断点续传 已定
D10 题库 + 组卷配置(随机/固定抽题) 已定
D11 角色:employee / admin 两级,无复杂权限 已定
D12 结构化知识源通道:backend-go/knowledge_source/ md → knowledge_source 表审批 → 摄入 product/question/chunk 已定
D13 向量检索:brute-force 余弦 + Ollama bge-m3 embedding(单容器双模型,随盘交付) 已定
D14 交付形态:裸进程 + systemd + Clonezilla 整盘克隆,Go 单二进制无源码交付 已定
D15 岗位与知识对应:Position/PositionKnowledge 表 + 用户单岗位(user.position_id)+ 岗位驱动组卷 已定(P0 落地)
D16 岗位考试蓝图:position_exam_blueprint 按「域 + 题型」抽样(题目无级别字段,不做级别加权);蓝图存在时优先于岗位映射抽题 已定(P1 落地)
D17 错题本(学员自助,非学情分析,自测/正式均写)+ 简答题 LLM 评分(essay 题型,复用 title_gen 路由,essay_grade 不扣点) 已定(P2 落地)
D18 突破原「极致极简/杜绝学情分析」边界:新增学员成长体系 = 学习积分+排行榜(游戏化)+ 考试证书(认证)+ 学习档案/能力雷达(学情,学员自助视角);积分规则集中常量可调 已定(V1.6 落地)
D19 部门组织架构(department 字典表,用户以 department 字符串归属、改名同步)+ 按部门学情统计;站内消息通知(考试发布/通过发证/设岗三事件);社交社区/讨论区定死不做 已定(V1.7 落地)
D20 当前阶段产品路线收口为「先通用、后定制」:先做标准化通用数字员工产品包,不直接追 WorkBuddy 的高自由度路线;第一批优先沉淀知识运营、培训考试、内容生成、任务推进 4 个通用数字员工,后续再长行业包与企业半定制 已定(见 docs/01_System_Overall/SY19_Universal_Digital_Worker_Product_Planning.md)
D21 前端建立「冻结归档」机制:停用代码不删除,集中到 frontend/src/_frozen/(统一 .frozen 后缀 + FROZEN.md 登记表,逐条记录原位置/冻结原因/外部依赖/解冻条件/解冻步骤)。首批冻结:工作区胶囊条(外壳重构后成了冗余的第二套导航)及外壳重构遗留的四个孤儿文件。D19 的站内通知只冻前端 UI —— 后端四个接口保留,store/api 层保留(BusinessAppPage 仍在用),解冻为纯前端工作量 已定(见 frontend/src/_frozen/FROZEN.md)
D22 任务记录延迟到发出第一条消息时创建(对齐 WorkBuddy:新建任务只是导航动作,不落库)。「新建任务」只做「回到 /home 开场画布 + 清空当前任务」,任务标题由第一句话决定、专员取输入框 + 里先选的那个(pendingSpecialistKey 暂存,建任务时作为 specialist_key 一并提交,后端已支持)。不允许存在没聊过天的空任务 —— 原实现点一次落一条 新任务,是「最近任务」堆满空行的根因 已定(V1.8 落地)
D23 侧边栏「最近任务」的行菜单(对齐 ChatGPT 悬停 ⋯ + WorkBuddy 任务卡「更多」):重命名(就地编辑,回车提交/Esc 取消)、置顶(新增 worker_task.pinned,排序 pinned DESC, updated_at DESC)、删除(新增 DELETE /api/worker/my-tasks/:id,硬删、无回收站,确认框写明「无法恢复」)。对照后不做:分享任务(纯内网无意义)、打开文件夹(Web 无此能力)、保存到工作空间(项目无 workspace 概念)、归档(没有「已归档」入口可找回,等于软删陷阱)。el-dropdown 加 :persistent="false" —— 默认每行留一份隐藏菜单在 DOM 里,50 条任务就是 50 份 已定
D24 SQLite 定期备份内置进二进制(不用外部 cron/systemd timer):启动时补一次 + 每小时查是否到期,默认间隔 24h、保留最近 7 份,落在 data/backups/(systemd 是 ProtectSystem=strict,只放开了 data/ 可写)。快照用 VACUUM INTO 而非 cp 主库 —— 边服务边写时 cp 可能拷到写了一半的页。产出自检 SQLite 文件头,不合格即删。另提供 -backup 子命令供升级/迁移前手工备一份。边界:只防误删/误改/写坏,不防整盘损坏,跨机保存仍需人工 已定(见 deploy/DELIVERY.md 第 7 节)

4. 文档索引

文档 路径 说明
PRD ../docs/PRD.md 产品需求文档(V1.1 最终版)
设计稿 ../docs/eai_agentplatform_app设计稿.md 完整 PRD 中文原稿
DB Schema ../docs/db_schema.md 9 张核心表字段设计
API 文档 ../docs/api.md API 接口定义
部署文档 ../docs/deploy.md 部署架构与步骤
变更日志 ../docs/changelog.md 版本变更记录
知识入库体系 ../docs/04_Backend/BE05_Knowledge_Ingest_Module.md 上传→生成→审批→入库总设计
知识源目录 backend-go/knowledge_source/ 结构化知识源 md(5 份,28 产品 + 20 题)
编码准则 ../CODING_RULES.md 编码与调试最高准则
AI 协作锚点 CLAUDE.md AI 新对话启动仪式

5. 目录结构(当前)

pj0231-eai_agentplatforming/                # 工作区根(仓库根)
├── CODING_RULES.md                     # 编码与调试最高准则
├── start_dev_10231_10232.sh            # 开发启动脚本
├── docs/                               # 设计文档(项目级,与代码分离)
│   ├── 00_AI_Context/                  # AI 协作上下文
│   ├── 01_System_Overall/              # 系统总览
│   ├── 02_Architecture/                # 架构设计
│   ├── 04_Backend/                     # 后端设计与 API
│   ├── 06_Product_Lines/               # 产品线与前端设计
│   ├── 08_Design_Rules/                # UI/UX 设计规范
│   ├── PRD.md / db_schema.md / api.md / deploy.md / changelog.md
│   ├── eai_agentplatform_app设计稿.md       # 完整 PRD 中文原稿
│   └── 博昇产品与渠道合作表.md          # 知识源权威数据
└── eai_agentplatform_app/                  # 应用代码
    ├── backend-go/                     # Go 后端(正式,唯一后端,已完成)
    │   ├── cmd/ internal/              # Go 源码
    │   ├── knowledge_source/           # 知识源 Markdown(运行时数据)
    │   ├── data/                       # 运行时数据(db+media,git 忽略)
    │   └── deploy/                     # 交付物(systemd/env/清理脚本/DELIVERY.md)
    ├── frontend/                       # 前端代码
    ├── CLAUDE.md
    ├── PROJECT_STATE.md
    └── .gitignore