docs(aihr): define personal assistant phase two spec

This commit is contained in:
2026-07-12 00:03:13 +08:00
parent c66fc4e4b0
commit b775b71a6e
7 changed files with 636 additions and 11 deletions
@@ -1,10 +1,11 @@
# 银城数字师傅产品方案(整合修订)
> 版本:v1.2 | 日期:2026-07-08
> 输入源:①客户方《物业数字师傅系统三期建设方案》(2026-07-08 早,下称"第三版")②《企业内部AI培训学习APP产品需求与发布会内容讨论》会议纪要(2026-07-08)③客户方会后微信补充(学模块课程化+考试;巡检点位转入职学习任务)。
> 版本:v1.3 | 日期:2026-07-11
> 输入源:①客户方《物业数字师傅系统三期建设方案》(2026-07-08 早,下称"第三版")②《企业内部AI培训学习APP产品需求与发布会内容讨论》会议纪要(2026-07-08)③客户方会后微信补充(学模块课程化+考试;巡检点位转入职学习任务)④2026-07-11 客户微信语音补充(员工个人 AI 助理/个人知识空间)。
> v1.1 重构:按"产品是什么 → 发布会做什么 → 决策记录 → 执行"四部分分层,产品定义与发布会演示不再混写。
> v1.2 更新(2026-07-08,客户回复三项待确认):①多端跳转议题**暂缓**,现阶段只保证能打开小程序页面;②工作积分排行榜**保留功能、可选择不用**(开关配置);③员工评价管理团队**按组织架构与权限控制**,需有权限才能评价。详见 §3.3。
> 与《银城员工端APP分阶段实施总纲》《AI陪练二期开发推进计划》的关系:本方案是增量修订,不推翻既有阶段划分;§4.2 回写清单已于 2026-07-08 执行——总纲升 v0.3、二期计划升 v0.8(BRD 4.4 修订仍待落 v1.2)。
> v1.3 更新(2026-07-11):阶段二新增员工个人 AI 助理,首批做个人资料/链接收藏、时间检索、带引用问答和工作整理;PPT 生成后置为 P1;北森等外部个人数据归阶段三。
> 与《银城员工端APP分阶段实施总纲》《AI陪练二期开发推进计划》的关系:本方案是增量修订,不推翻既有阶段划分;§4.2 回写清单已于 2026-07-08 执行——总纲升 v0.3、二期计划升 v0.8。BRD v1.2 已于 2026-07-11 增补个人 AI 助理,BRD 4.4 师徒演练等旧口径仍待后续版本继续修订。
---
@@ -128,6 +129,28 @@
- 对 D6 的影响:2026-07-08 客户回复**多端跳转议题暂缓**——现阶段只保证能打开某个小程序的页面(最小跳转能力),不做统一入口工程;D6 维持 H5 套壳表述,统一入口待后续再议(3.3);
- 电子名片:独立产品,不进本方案范围。
### 1.3.9 个人 AI 助理——从“问公司知识”扩展到“管理我的资料”(2026-07-11 新增)
**用户原始诉求:**员工除了使用公司通用资料,还会遇到个人认为有用的表格、PPT、文章、网页链接、工作灵感和临时冲突;希望随手发给个人助理保存,之后可按日期/主题追问、汇总分析并整理为文字或 PPT。
产品归属:整体进入总纲阶段二“知识学习平台”,作为「问」的个人知识增强层;不回塞阶段一 AI 陪练。首批先解决“收得进、找得到、答有据”,再做复杂内容生成。
| 优先级 | 能力 | 验收口径 |
|---|---|---|
| P0 | 个人文字、文件、图片、网页链接收藏 | 显示标题、来源、收藏时间、解析状态;失败可重试 |
| P0 | 个人资料问答与总结 | 可选择个人资料/企业知识范围;答案展示引用来源,权限不足或无结果时明确提示 |
| P0 | 时间与主题检索 | 支持“从哪天到哪天”“哪些资料与保洁管理相关”等查询 |
| P0 | 工作问题与灵感整理 | 将零散输入整理为结论、行动项、待确认事项,不替员工自动对外发送 |
| P1 | 多资料对比、周报/月报、汇报提纲 | 输出可编辑结构,保留每个结论的资料来源 |
| P1 | PPT 生成与导出 | 先确认大纲和模板再生成;不作为阶段二首批上线阻塞项 |
数据与权限原则:
- 个人资料默认私有,分享给团队或沉淀企业知识库需员工明确操作并进入审核链。
- 企业密级权限继续生效;个人助理不得因“个人收藏”绕过账号等级 × 知识密级控制。
- 网页内容保存原链接、抓取时间与正文快照;外链抓取需增加安全、版权和内容失效检查。
- 阶段三接入北森后,才允许在授权范围内分析考勤、请假、任职等 HR 数据;阶段二不复制或模拟这些外部数据。
---
# 第二部分 发布会:半年会演示方案
+4 -3
View File
@@ -1,7 +1,7 @@
# AI 陪练二期开发推进计划
> 版本:v0.8 | 日期:2026-07-08
> 输入源:《AI陪练功能优化与缺口分析(修订版 · 2026-07-06)》+《物业行业 AI 人力资源系统 · BRD v1.1》。
> 版本:v0.10 | 日期:2026-07-11
> 输入源:《AI陪练功能优化与缺口分析(修订版 · 2026-07-06)》+《物业行业 AI 人力资源系统 · BRD v1.2》。
> v0.2 修订:与两份输入源逐项复核后补齐 6 处缺漏——#6/#9/#16/师徒演练的明确处置(§2)、#13 定向再练的里程碑落点(M4)、画像雷达图与 BRD L1「留」段验收承载(M4)、TechSpec P1 表映射与岗位身份前置(M1)、场景管理权限口径(M1/§7)、G6 成本上限量化(§7)。
> v0.3 修订:补齐管理者“传帮带”角色和初/中/高级生活顾问成长路径;训练数据只作晋升评级证据包,不让 AI 自动决定晋升。
> v0.4 修订:补后台提示词模板管理和生成文体绑定,减少总结卡、导师改写、逐句标注等输出的自由发挥。
@@ -10,6 +10,7 @@
> v0.7 确认:客户方确认"管家"="生活顾问"(同一岗位,术语统一为"管家(生活顾问)",`position` 标签不迁移);APP 形态定为 H5 套壳(维持 D6)。M0 两项待确认项关闭。
> v0.8 修订:并入 2026-07-08 产品讨论结论(见《数字师傅学练问报整合方案 v1.1》,docs/20260708/)——①M1 新增 `sop_answer` 直给格式模板(结论先行 + 一二三四五编号步骤 + 引用后置),随 2026-07-10 测试版上线;②M2 新增对练回复调节按钮(turn 支持 style 重生成)与问答答案打勾/打叉反馈;③师徒演练暂缓升级为**定向师带徒不做**,由阶段二开放问题榜承载(主管传帮带工作台不受影响);④M4 成长路径补学分/统考资格口径。
> v0.9 同步:正式试点导出和严格门禁已完成工程收口。两者均强制批次起止日、唯一在职组织身份和每人至少 10 次完训;校准/SOP 门禁以原始计数判定,不以四舍五入后的比率反推。当前仍等待上游提供至少 20 名可登录正式试点人员及业务评审,不将工程就绪写成业务验收通过。
> v0.10 边界同步:2026-07-11 客户新增员工个人 AI 助理/个人知识空间需求,统一归入总纲阶段二;本计划只登记范围边界,不新增个人资料、网页采集和 PPT 任务。
> 结论:二期不做“24 个缺口全量铺开”,先把 AI 陪练从 MVP 演示闭环推进到**生活顾问岗位试点可用**。
## 1. 二期目标
@@ -52,7 +53,7 @@
| 自动案例沉淀(#16) | 挂 BRD 4.6/4.7 共创与 review_task 审核链;二期只保证"贡献度"有人工计分入口(见 M4),自动沉淀待案例量起来再评估 |
| 师徒演练(BRD 4.4) | **升级为不做(2026-07-08 会议否决)**:定向师带徒不实现——80% 以上项目生活顾问为初级、无带徒岗位设置、无额外报酬,强推造成误解;`mentor_assignment` P1 表与师父角色运营取消。帮带语义由两处承载:①M4 主管传帮带工作台(看回放→写复盘建议→派下次训练)不受影响,继续做;②员工间帮带由阶段二**开放问题榜**承载(全员可答、最佳答案置顶、有奖,见总纲 §4.4)。BRD 4.4 待同步修订 |
| 动态难度调级(#1 后半 / BRD 4.5) | 场景表保留 difficulty 字段即可;自动升降级依赖画像数据稳定,分发规则 v1 不做 |
| 大喇叭信息平台、知识学习平台(学模块课程/考试与分身份文件摘要)、品检翻转、开放问题榜 UI、北森对接 | 立项会及 2026-07-08 产品讨论新增需求,归属总纲**阶段二/三**(见《银城员工端APP分阶段实施总纲》§4.4/§4.5);本阶段只埋 `knowledge_gap` 钩子 |
| 大喇叭信息平台、知识学习平台(学模块课程/考试与分身份文件摘要)、员工个人 AI 助理(个人资料/链接收藏、时间检索、总结分析、PPT)、品检翻转、开放问题榜 UI、北森对接 | 立项会及 2026-07-08/11 产品讨论新增需求,归属总纲**阶段二/三**(见《银城员工端APP分阶段实施总纲》§4.4/§4.5/§4.6);本阶段只埋 `knowledge_gap` 钩子,不新增个人知识空间 |
## 3. 技术路线
+14
View File
@@ -95,6 +95,20 @@
配套知识模型扩容:知识类型维度(SOP=标准 / 案例=参照 / 话术=直接能说 / 经验策略=火候),检索按类型分层供给;案例沉淀链路是隐性知识的采集入口,战略地位上调。
### B9. 员工个人 AI 助理 + 个人知识空间(阶段二,2026-07-11)
来源:客户微信语音转写。员工希望把个人认为有用的表格、PPT、文章、网页链接、工作灵感和日常问题发给个人助理保存,之后按日期/主题追问、汇总分析并整理成文字或 PPT。
推荐拆分:
1. **P0 个人收藏**:文字、多格式文件、图片、网页链接;保存来源、收藏时间、主题、解析状态和原附件。
2. **P0 个人检索**:按时间范围/主题/来源查询,支持个人资料与有权限企业知识的混合检索,答案引用可追溯。
3. **P0 工作整理**:把冲突、灵感、零散材料整理为结论、行动项和待确认项;不自动对外发送。
4. **P1 内容再加工**:多资料对比、周报/月报、汇报提纲、PPT 生成;PPT 先确认大纲与模板。
5. **阶段三扩展**:北森、考勤、请假、组织任职等外部个人数据授权接入后,再提供跨系统分析。
前置闸门:个人空间与企业知识分域;默认仅本人可见;分享/企业入库需审核与脱敏;网页抓取需防 SSRF、尊重版权与访问权限;需提供删除、导出和数据保留策略。阶段二开工前另出专项 TechSpec,不直接复用公共知识库表造成权限串域。
### 零散待办
- **总结卡「保存图片」按钮**(设计基准 summary-modal 图内有):需 html2canvas 类依赖做 DOM 转图,2026-07-05 P0-2 实现时按"不加依赖"红线砍掉;引依赖或后端出图方案定型后补。
+3 -2
View File
@@ -11,10 +11,11 @@
| [API_INTEGRATION.md](API_INTEGRATION.md) | 后端 API 对接顺序、正式试点 CSV、移动端训练记录/复盘详情、候选资料上传/审核、SOP 上传解析接口 |
| [RUOYI_AI_INCREMENTAL_MIGRATION.md](RUOYI_AI_INCREMENTAL_MIGRATION.md) | 从 `ageerle/ruoyi-ai` 分片迁移知识库、模型能力、文档解析、Qdrant/RAG 和 chat 的执行边界 |
| [AI人力资源系统项目规划方案与AI接口说明.md](AI人力资源系统项目规划方案与AI接口说明.md) | 对外会议版口径、数字师傅定位、AI 接口和供应商规划 |
| [银城员工端APP分阶段实施总纲.md](银城员工端APP分阶段实施总纲.md) | 2026-07-07 立项会后的三阶段总纲:陪练 → 大喇叭+知识学习平台(含学模块、开放问题榜) → 北森对接;身份三轴模型与防遗漏分发策略 |
| [银城员工端APP分阶段实施总纲.md](银城员工端APP分阶段实施总纲.md) | 三阶段总纲:陪练 → 大喇叭+知识学习平台(含学模块、开放问题榜、员工个人 AI 助理) → 北森对接;身份三轴模型与防遗漏分发策略 |
| [个人AI助理阶段二专项TechSpec.md](个人AI助理阶段二专项TechSpec.md) | 员工个人知识空间的物理分域、数据模型、API、检索融合、权限、安全、删除和测试规格 |
| [AI陪练二期开发推进计划.md](AI陪练二期开发推进计划.md) | 总纲阶段一执行文档:AI 陪练从 MVP 演示闭环推进到管家(生活顾问)岗位试点可用;区分工程就绪与正式业务试点证据 |
| [20260708/uni-app用户侧前端重建计划.md](20260708/uni-app用户侧前端重建计划.md) | 当前用户侧 `mobile-uni/` 重建计划、三端页面拆分、portless 入口、真实浏览器验证和验收进展 |
| [20260708/数字师傅学练问报整合方案.md](20260708/数字师傅学练问报整合方案.md) | 2026-07-08 产品讨论定案:产品定义(学练问报+问题榜+学分晋升)与半年会发布会方案分层;客户"第三版"逐项处置对照 |
| [20260708/数字师傅学练问报整合方案.md](20260708/数字师傅学练问报整合方案.md) | 产品定义(学练问报+问题榜+学分晋升+个人 AI 助理)、半年会发布会方案分层及客户需求逐项处置对照 |
| [基于AI的银城员工端APP项目立项与开发规划会议-2026年07月07日-来自【Get 笔记】.md](基于AI的银城员工端APP项目立项与开发规划会议-2026年07月07日-来自【Get%20笔记】.md) | 2026-07-07 立项会纪要原文(总纲的输入源,只作留档) |
| [20260708/企业内部AI培训学习APP产品需求与发布会内容讨论(纪要)](20260708/) | 2026-07-08 产品讨论纪要原文及客户"第三版"docx(整合方案的输入源,只作留档) |
| [open-org-sync-api-design-v1.md](open-org-sync-api-design-v1.md) | 开放组织同步系统 `/open/v1` 接口设计,`POST /api/aihr/org/sync` 的外部契约 |
@@ -0,0 +1,551 @@
# 员工个人 AI 助理 / 个人知识空间专项 TechSpec
> 版本:v1.0 | 日期:2026-07-11
>
> 归属:《银城员工端 APP 分阶段实施总纲》阶段二
>
> 需求基线:《物业 AI 人力资源系统业务需求文档 BRD》4.8
>
> 实施边界:首批交付个人资料收藏、检索、带引用问答和工作整理;PPT 生成为 P1;北森、考勤等外部数据归阶段三。
## 1. 目标与非目标
### 1.1 目标
为每名已登录员工提供与企业知识库隔离的个人知识空间,支持:
1. 收藏个人文字、文件、图片和网页链接。
2. 自动解析正文、生成摘要与主题标签。
3. 按日期、主题、来源和关键词检索个人资料。
4. 在授权范围内选择“个人资料 / 企业知识 / 混合”进行问答。
5. 输出结论、行动项和待确认事项,并逐条展示引用来源。
6. 删除个人资料时同步清理关系库、对象存储和向量索引。
### 1.2 非目标
- 阶段二首批不生成 PPT 文件,只生成可编辑汇报提纲。
- 不读取北森、考勤、请假、任职等阶段三外部数据。
- 不做通用网盘、多人协作文档、在线 Office 编辑和自动对外发送。
- 不允许个人资料自动进入企业知识库。
- 不通过“收藏网页”绕过登录、付费墙、企业内网或版权限制。
- 不复用企业知识表增加 `scope_type` 来承载个人数据。
## 2. 核心架构决策
### 2.1 处理能力复用,数据物理分域
| 能力 | 复用方式 | 隔离要求 |
|---|---|---|
| 文件上传与 OSS | 复用 `ISysOssService` | 使用私有前缀 `personal/{tenantId}/{userId}/{itemId}/` |
| 文档解析 | 从 `AihrSopSeedService` 抽取无状态解析组件 | 解析结果只能写个人表 |
| Embedding / Rerank / LLM | 复用现有模型配置与成本闸门 | 调用前按个人资料规则脱敏,不写企业片段表 |
| 全文检索 | 使用个人片段表 MySQL Fulltext | 查询必须包含 `tenant_id + owner_user_id` |
| 向量检索 | 新建 `aihr_personal_knowledge` collection | Qdrant filter 必须包含 `tenant_id + owner_user_id` |
| 企业知识检索 | 调用现有企业 RAG 服务 | 继续执行企业知识密级、项目和角色权限 |
禁止将个人资料写入:
- `aihr_knowledge_info`
- `aihr_knowledge_attach`
- `aihr_knowledge_fragment`
- 企业 Qdrant collection `aihr_knowledge`
### 2.2 检索流程
```text
用户问题 + scope(personal / enterprise / mixed)
→ 从移动端 token 取得 tenantId、userId、extPartyId
→ 校验日期、itemIds、知识范围和配额
→ personal: 个人 Fulltext + 个人 Qdrant(强制 owner filter)
→ enterprise: 企业 Fulltext + 企业 Qdrant(强制企业权限)
→ mixed: 两域分别检索并授权后融合,不做跨域原始结果直连
→ Rerank
→ LLM 生成答案
→ 返回 citations,每条标记 PERSONAL / ENTERPRISE / WEB
→ 保存会话、答案、引用和 prompt/model 版本
```
### 2.3 模块边界
后端新增独立包,避免继续扩大 `AihrSopSeedService`:
```text
org.dromara.aihr.personal
├── controller/PersonalAssistantController.java
├── domain/PersonalAssistantDto.java
├── service/PersonalSpaceService.java
├── service/PersonalIngestionService.java
├── service/PersonalRetrievalService.java
├── service/PersonalAnswerService.java
├── service/PersonalCleanupService.java
├── service/PersonalUrlFetchService.java
└── support/PersonalKnowledgeProperties.java
```
解析器抽为共享、无状态能力:
```text
org.dromara.aihr.knowledge.parse
├── KnowledgeDocumentParser.java
├── ParsedDocument.java
└── KnowledgeChunker.java
```
共享解析器只接受文件/字节和解析参数,只返回内存对象,不知道企业表、个人表或 Qdrant collection。
## 3. 身份、权限与数据隔离
### 3.1 所有者身份
- `owner_user_id`:本地 `sys_user.user_id`,作为阶段二强制所有权键。
- `owner_ext_party_id`:可空,保存组织快照外部主体 ID,供阶段三身份迁移使用。
- `tenant_id`:沿用 RuoYi 多租户上下文。
- Controller 不接受客户端提供的 `ownerUserId`、`tenantId`。
- Service 每次查询都从当前登录态取得 `tenant_id + user_id`,不得只按主键查询。
### 3.2 访问矩阵
| 操作 | 本人 | 普通主管 | HR/运营 | 系统管理员 |
|---|---:|---:|---:|---:|
| 查看个人资料正文 | ✅ | ❌ | ❌ | ❌(默认) |
| 查看个人资料数量/处理状态 | ✅ | ❌ | 聚合且脱敏 | 聚合且脱敏 |
| 删除本人资料 | ✅ | ❌ | ❌ | ❌(默认) |
| 申请分享/企业入库 | ✅ | ❌ | 审核申请 | 审核申请 |
| 紧急审计查看 | ❌ | ❌ | 需 `aihr:personal:audit`、工单号和原因 | 同左 |
紧急审计必须记录审计人、目标用户、itemId、原因、工单号、时间和结果;正文不写入审计日志。
### 3.3 防越权规则
1. 所有 `/api/aihr/personal-assistant/**` 接口必须登录,不使用 `@SaIgnore`。
2. 单项读取、删除、重试必须使用 `WHERE id=? AND tenant_id=? AND owner_user_id=?`。
3. Qdrant 查询必须同时过滤 `tenant_id` 和 `owner_user_id`。
4. 企业知识结果进入融合前必须经过企业权限过滤;客户端传来的 fragmentId 不能直接作为引用。
5. 个人资料转企业知识必须复制经审核后的脱敏版本,不能把个人 item 直接改成企业 scope。
6. 自动化测试必须使用两个用户交叉访问,验证列表、详情、检索、向量和删除均返回不可见。
## 4. 数据模型
初始化 SQL:`backend/script/sql/aihr_personal_knowledge_mysql8.sql`。
### 4.1 `aihr_personal_space`
每个租户内每名员工一条。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint PK | 主键 |
| tenant_id | varchar(20) | 租户 |
| owner_user_id | bigint | 本地用户 ID |
| owner_ext_party_id | varchar(100) null | 外部主体 ID |
| status | varchar(20) | ACTIVE / FROZEN / DELETING |
| quota_bytes | bigint | 默认 524288000(500MB) |
| used_bytes | bigint | 已用空间,事务内维护 |
| item_count | int | 未删除资料数 |
| create_time/update_time | datetime | 审计时间 |
约束:`UNIQUE(tenant_id, owner_user_id)`。
### 4.2 `aihr_personal_item`
| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint PK | 资料 ID |
| tenant_id/space_id/owner_user_id | bigint/varchar | 冗余所有权键,便于强制过滤 |
| source_type | varchar(20) | TEXT / FILE / IMAGE / URL |
| title | varchar(500) | 标题 |
| original_url | varchar(2000) null | 原网页地址 |
| oss_id | bigint null | 原文件或网页快照 OSS ID |
| mime_type | varchar(100) | MIME |
| size_bytes | bigint | 原始大小 |
| content_hash | varchar(64) | SHA-256 去重 |
| status | varchar(20) | QUEUED / PARSING / READY / FAILED / DELETING / DELETED |
| error_code/error_message | varchar | 可公开的失败信息,不存堆栈 |
| attempt_count | int | 解析尝试次数,默认 0,每次执行前加 1 |
| summary | text | 自动摘要 |
| tags_json | json | 主题标签数组 |
| captured_at | datetime | 内容产生/网页抓取时间 |
| parsed_at | datetime null | 解析完成时间 |
| deleted_at | datetime null | 逻辑删除时间 |
| create_time/update_time | datetime | 审计时间 |
索引:
- `(tenant_id, owner_user_id, status, create_time)`
- `(tenant_id, owner_user_id, captured_at)`
- `(space_id, content_hash)`
### 4.3 `aihr_personal_fragment`
| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint PK | 片段 ID |
| tenant_id/space_id/owner_user_id/item_id | bigint/varchar | 所有权与父项 |
| idx | int | 片段序号 |
| content | text | 正文片段 |
| token_count | int | token 数 |
| embedding_json | longtext null | Qdrant 不可用时的本地兜底 |
| embedding_model | varchar(100) null | 模型 |
| embedding_time | datetime null | 向量时间 |
| create_time | datetime | 创建时间 |
约束:`UNIQUE(item_id, idx)`;Fulltext 索引仅覆盖个人表。
### 4.4 `aihr_personal_chat_session` 与 `aihr_personal_chat_message`
Session 保存 `id/tenant_id/owner_user_id/title/default_scope/create_time/update_time`。
Message 保存:
- `session_id/owner_user_id/role`
- `content`
- `scope_json`
- `citations_json`
- `model_name/prompt_version`
- `input_tokens/output_tokens/latency_ms`
- `create_time`
个人消息只允许本人读取和删除;运营报表仅统计数量、token 和延迟,不读取 content。
### 4.5 `aihr_personal_publish_request`(P1)
个人资料申请进入团队或企业知识库的审核记录:`item_id/applicant_user_id/target_scope/reason/status/reviewer_user_id/review_comment/review_time/published_knowledge_id`。
状态固定为 `PENDING / APPROVED / REJECTED / CANCELLED`。批准后生成新的企业知识附件和片段,保留来源链,不改变个人 item 所有权。
## 5. Qdrant 与 OSS 设计
### 5.1 Qdrant
- collection:`aihr_personal_knowledge`
- 向量维度:跟随当前启用的 vector 模型;模型或维度变化使用独立重建任务。
- payload:`tenant_id`、`owner_user_id`、`space_id`、`item_id`、`fragment_id`、`source_type`、`captured_at`。
- 必建 payload index:`tenant_id`、`owner_user_id`、`item_id`。
- 查询无 owner filter 时,`PersonalRetrievalService` 直接拒绝执行并记录安全日志。
### 5.2 OSS
- 路径:`personal/{tenantId}/{userId}/{itemId}/{safeFileName}`。
- bucket 保持私有;下载只能通过鉴权接口返回短时签名 URL。
- 原文件、网页正文快照和生成导出文件使用不同子目录。
- 文件名、Content-Type 和 multipart header 继续执行 CRLF 清洗。
- `sys_oss.ext1` 只保存解析状态和 personal itemId,不保存个人正文或手机号。
## 6. API 契约
统一前缀:`/api/aihr/personal-assistant`。响应沿用 `R<T>`。
### 6.1 空间与资料
| 方法 | 路径 | 请求/说明 |
|---|---|---|
| GET | `/space` | 当前用户空间、配额、已用量、资料数 |
| GET | `/items` | `pageNum/pageSize/status/sourceType/dateFrom/dateTo/keyword` |
| POST | `/items/text` | `{title, content, capturedAt?, tags?}` |
| POST | `/items/file` | multipart `file`, `title?`, `capturedAt?` |
| POST | `/items/url` | `{url, title?, capturedAt?}`,异步抓取 |
| GET | `/items/{id}` | 详情、解析状态、摘要、标签;所有权校验 |
| POST | `/items/{id}/retry` | 仅 FAILED 可重试 |
| DELETE | `/items/{id}` | 返回 cleanupJobId,进入 DELETING |
| GET | `/items/{id}/download-url` | 返回 5 分钟私有签名 URL |
创建响应:
```json
{
"itemId": 1201,
"status": "QUEUED",
"duplicateOf": null
}
```
### 6.2 搜索与问答
`POST /search`
```json
{
"queryText": "7月1日至7月10日我收藏了哪些保洁管理资料",
"scope": ["PERSONAL"],
"dateFrom": "2026-07-01",
"dateTo": "2026-07-10",
"itemIds": [],
"limit": 10
}
```
`POST /ask`
```json
{
"sessionId": null,
"queryText": "结合我的资料和企业制度,整理本周保洁管理改进建议",
"scope": ["PERSONAL", "ENTERPRISE"],
"dateFrom": "2026-07-01",
"dateTo": "2026-07-10",
"itemIds": [],
"outputFormat": "ACTION_PLAN"
}
```
响应:
```json
{
"sessionId": 301,
"answer": "结论……\n行动项……\n待确认事项……",
"citations": [
{
"domain": "PERSONAL",
"sourceId": "item:1201:fragment:3",
"title": "保洁班组周记录.xlsx",
"excerpt": "……",
"capturedAt": "2026-07-08T09:30:00"
},
{
"domain": "ENTERPRISE",
"sourceId": "knowledge:1:fragment:88",
"title": "住宅保洁作业标准",
"excerpt": "……",
"capturedAt": null
}
],
"model": "configured-chat-model",
"promptVersion": "personal_assistant_v1"
}
```
若无可用引用,返回明确的“当前资料中没有足够依据”,不得生成无引用的业务结论。
### 6.3 会话
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/sessions` | 当前用户会话列表 |
| GET | `/sessions/{id}` | 消息与引用 |
| DELETE | `/sessions/{id}` | 删除本人会话与消息 |
### 6.4 分享与导出(P1)
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | `/items/{id}/publish-requests` | 申请进入团队/企业知识库 |
| GET | `/publish-requests` | 本人申请进度 |
| POST | `/exports/outline` | 生成可编辑汇报大纲 |
| POST | `/exports/pptx` | 根据已确认大纲和模板异步生成 PPTX |
| GET | `/exports/{id}` | 生成状态与下载地址 |
## 7. 网页采集安全
`PersonalUrlFetchService` 必须执行:
1. 仅允许 `http/https`,拒绝用户名密码 URL、`file:`、`ftp:`、`data:`。
2. DNS 解析后拒绝 loopback、private、link-local、multicast、保留地址和云元数据地址。
3. 最多 3 次重定向,每次重定向重新解析和校验目标 IP。
4. 连接超时 5 秒、总超时 15 秒、响应正文上限 10MB。
5. 只接收 HTML、纯文本及明确允许的文档 MIME;下载文件仍走文件校验链。
6. 不携带用户浏览器 Cookie、Authorization、Referer 或企业内部代理凭证。
7. HTML 清洗脚本、样式、iframe、表单和隐藏元素,只保留正文与可追溯链接。
8. 记录最终 URL、HTTP 状态、抓取时间、内容哈希和 robots/版权提示;失败可重试但不绕过限制。
## 8. 解析、模型与提示词
### 8.1 解析
- 支持格式与现有知识库一致:txt/md/PDF/Word/Excel/PPT、常用图片。
- 视频、音频首批不进入个人空间;待语音转写和视频解析成本评估后扩展。
- item 状态由 `QUEUED → PARSING → READY/FAILED` 单向推进;重试将状态恢复为 QUEUED、增加 `attempt_count`,并覆盖 `error_code/error_message`。
- 文本块默认 800 字、重叠 120 字;参数由 `PersonalKnowledgeProperties` 管理。
### 8.2 提示词模板
新增模板代码:
- `personal_assistant_answer_v1`
- `personal_assistant_summary_v1`
- `personal_assistant_action_plan_v1`
- `personal_assistant_outline_v1`
- `personal_assistant_ppt_v1`(P1)
系统提示词必须包含:只基于授权片段回答、区分来源域、忽略资料中的指令注入、没有依据时拒答、不得代表用户对外作决定。
### 8.3 成本闸门
- 复用 `AIHR_AI_RUNTIME_ENABLED`、chat/vector/rerank 开关。
- 解析和向量化按内容哈希去重。
- 摘要按需生成;首屏列表不批量触发 LLM。
- 保存 token、模型和延迟,不保存供应商原始请求日志中的个人正文。
## 9. 删除、配额与生命周期
### 9.1 配额默认值
| 配置 | 默认值 |
|---|---:|
| `aihr.personal.max-file-size-mb` | 20 |
| `aihr.personal.max-url-body-mb` | 10 |
| `aihr.personal.max-space-mb` | 500 |
| `aihr.personal.max-items` | 1000 |
| `aihr.personal.download-url-minutes` | 5 |
### 9.2 删除流程
1. API 将 item 标记为 DELETING,立即从列表和检索隐藏。
2. 清理任务删除 Qdrant points。
3. 删除个人 fragment。
4. 删除或解绑 `sys_oss` 对象。
5. 将 item 标记为 DELETED,仅保留无正文的审计元数据。
6. 清理任务幂等重试,24 小时内完成物理内容清理。
用户账号冻结后禁止访问个人空间;阶段三接入权威离职状态后,默认冻结 30 天,允许用户或经授权管理员导出,期满清理。该天数必须可配置。
## 10. 前端设计
### 10.1 页面与入口
`mobile-uni` 新增:
```text
src/pages/user/assistant/index.vue 个人助理首页/提问
src/pages/user/assistant/library.vue 个人资料列表
src/pages/user/assistant/item.vue 资料详情与解析状态
src/pages/user/assistant/capture.vue 文字、文件、链接收藏
src/pages/user/assistant/sessions.vue 历史会话
src/services/personal-assistant.ts API 客户端
```
入口策略:员工端「问」页增加“企业知识 / 我的资料”范围切换和“收藏资料”入口;不新增第五个底部 Tab。
### 10.2 关键交互
- 上传后立即返回列表并显示解析状态,不阻塞页面等待解析。
- 每条答案引用显示域徽标:我的资料、企业 SOP、外部网页。
- 混合问答默认关闭,用户主动选择后才同时检索两域。
- 删除前明确提示会删除附件、解析正文和搜索索引。
- 资料详情允许修正标题、时间和标签,不允许直接编辑解析正文。
- P1 PPT 生成必须先展示可编辑大纲和模板选择,再提交异步任务。
## 11. 错误码与降级
| 业务码 | 含义 | 前端动作 |
|---|---|---|
| `PERSONAL_SPACE_QUOTA_EXCEEDED` | 空间或条目配额超限 | 显示用量并引导删除 |
| `PERSONAL_ITEM_NOT_FOUND` | 不存在或无权访问 | 统一显示不存在,不泄露归属 |
| `PERSONAL_ITEM_NOT_READY` | 仍在解析 | 展示状态并允许刷新 |
| `PERSONAL_PARSE_FAILED` | 解析失败 | 展示可公开原因和重试 |
| `PERSONAL_URL_BLOCKED` | URL 被安全策略拦截 | 明确不能访问该地址 |
| `PERSONAL_NO_CITATION` | 无足够资料支撑 | 不生成业务结论 |
| `ENTERPRISE_SCOPE_FORBIDDEN` | 无企业知识范围权限 | 保留个人结果,提示企业范围不可用 |
| `PERSONAL_AI_DISABLED` | AI 成本闸门关闭 | 仍允许收藏和关键词检索,暂停摘要/问答 |
企业检索失败时,mixed 查询可只返回个人结果并标记降级;个人权限校验失败时不得降级为企业或公开检索。
## 12. 测试策略
### 12.1 单元测试
- owner/tenant 条件生成与空 owner 拒绝。
- URL IP 分类、重定向二次校验、正文上限。
- 文件哈希去重与配额计算。
- 引用域序列化和无引用拒答。
- 删除任务幂等性。
- prompt injection 文本不得改变系统指令。
### 12.2 集成测试
- MySQL:两个用户创建、列表、详情、搜索、删除互不可见。
- Qdrant:未带 owner filter 的调用被拒绝;用户 A 不返回用户 B point。
- OSS:签名 URL 只能由本人生成;删除后对象不可访问。
- mixed:个人和企业结果分别授权、融合、引用域正确。
- 成本闸门关闭:收藏与关键词检索可用,LLM 能力明确降级。
### 12.3 浏览器 E2E
1. 手机号登录并确认岗位。
2. 收藏一段文字、一个 PDF 和一个公开网页。
3. 查看 QUEUED/PARSING/READY 状态变化。
4. 按日期查询资料。
5. 分别执行个人、企业、混合问答。
6. 检查引用徽标和原始来源。
7. 删除资料并确认列表、问答和下载均不可再访问。
8. 切换另一手机号,确认看不到前一用户的资料、标题和会话。
## 13. 非功能指标
| 指标 | 验收线 |
|---|---|
| 跨用户数据泄漏 | 0;自动越权矩阵 100% 通过 |
| 支持样本解析成功率 | ≥95%(排除加密/损坏文件) |
| 关键词/向量检索 P95 | ≤2.5 秒 |
| AI 回答 P95 | ≤8 秒;超时明确提示可重试 |
| 引用可访问率 | 100%,且当前用户有权访问 |
| 删除可见性 | API 成功后立即隐藏 |
| 物理内容清理 | 24 小时内完成 |
| URL 私网/元数据地址拦截 | 100% |
## 14. 里程碑与发布闸门
### M0:安全与数据地基
- 独立表、独立 Qdrant collection、私有 OSS 前缀。
- 两用户越权测试、URL SSRF 测试、删除测试先行。
### M1:资料收藏与解析
- 文字、文件、图片、网页链接收藏。
- 异步解析状态、失败重试、配额和列表。
### M2:个人检索与问答
- 日期/主题/来源检索。
- 个人问答、引用、会话和成本统计。
### M3:企业知识授权融合
- 企业知识权限过滤。
- 个人/企业/mixed 三范围切换和引用域标记。
### M4:移动端闭环与试点
- 员工端页面、真实浏览器 E2E、20 名试点员工。
- 试点期间不开放分享/企业入库和 PPT 文件生成。
### M5:P1 增强
- 分享/企业入库审核。
- 周报月报、汇报提纲、PPTX 异步生成。
发布硬闸门:跨用户越权测试、SSRF 测试、删除链路、引用权限和真实浏览器闭环任一未通过,不得进入试点。
## 15. 实施文件清单
预计新增:
- `backend/script/sql/aihr_personal_knowledge_mysql8.sql`
- `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/personal/**`
- `backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/personal/**`
- `mobile-uni/src/pages/user/assistant/*.vue`
- `mobile-uni/src/services/personal-assistant.ts`
- `mobile-uni/tests/personal-assistant.test.mjs`
预计修改:
- `backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java`(仅抽取解析能力,不加入个人业务)
- `backend/script/sql/aihr_knowledge_mysql8.sql`(仅共享解析迁移兼容时调整)
- `mobile-uni/src/pages.json`
- `mobile-uni/src/pages/user/sop/index.vue`
- `mobile-uni/src/types/api.ts`
- `scripts/reset-dev-db.sh`
- `docs/API_INTEGRATION.md`
- `docs/DEV_SETUP.md`
- `docs/DEMO_ACCEPTANCE.md`
## 16. 决策摘要
1. 个人知识和企业知识物理分域,不采用共享表 `scope_type`。
2. 文件解析、模型和成本闸门复用,存储和检索索引不复用。
3. 本地 `user_id` 是阶段二所有权键,`ext_party_id` 只作阶段三迁移锚点。
4. Mixed 检索先分域授权,再融合结果。
5. 个人资料默认私有,分享和企业入库走 P1 审核链。
6. PPT 是 P1,不阻塞阶段二首批。
7. 北森、考勤等外部个人数据属于阶段三。
@@ -1,8 +1,9 @@
# 物业行业 AI 人力资源系统 · 业务需求文档(BRD)
> 版本:v1.1(统一版)| 日期:2026-07-02
> 版本:v1.2(统一版)| 日期:2026-07-11
> 定位:本文是本项目的**唯一事实源(Single Source of Truth)**,收敛此前所有讨论与文档,取代分散的局部材料作为业务需求基准。
> v1.1 变更:第 5 章数据模型方向补充"HR 主干已对齐《手册》卷1 第9章"结论(见 5.2)。
> v1.2 变更:新增阶段二“员工个人 AI 助理 / 个人知识空间”需求(见 4.8),明确个人资料、网页链接、时间检索、来源引用、PPT 增强项和阶段三外部 HR 数据边界。
>
> **收敛来源**:
> - 《物业管家与生活顾问 AI 陪练系统建设方案》(原始业务方案,陪练视角)
@@ -144,6 +145,17 @@
- **更新机制**:工单/会议记录自动回流(AI 听记转写提炼)、人工审核与共创(一线提交话术、专家终审、**署名入库**)、版本与质量管理(变更留痕、可回溯、防知识腐烂)。
- **提示词模板管理**:后台按业务场景和生成文体维护提示词框架,例如“总结卡”“导师改写”“逐句标注”“督导图片分析-设施设备”;模板固定输出结构(三段式/卡片字段/JSON schema),减少 AI 自由发挥。
### 4.8 员工个人 AI 助理 / 个人知识空间(阶段二)
- **个人资料收藏**:员工可保存个人工作文字、PDF/Word/Excel/PPT、图片和网页链接;系统记录来源、收藏时间、主题、解析状态和原始附件,支持删除与导出。
- **个人检索与问答**:支持按日期范围、主题和来源查询个人内容,例如“上周收藏了哪些保洁管理资料”;基于选定资料总结、分析和提炼行动建议,回答必须展示引用来源。
- **混合知识范围**:员工可选择仅查个人资料、仅查企业知识或在权限范围内混合查询;个人资料与企业知识分域存储,不得因个人收藏绕过企业知识密级。
- **工作思路整理**:对日常冲突、工作灵感和零散想法生成结论、行动项、待确认事项;AI 仅辅助整理,不自动代替员工对外发布或作出管理决策。
- **内容生成**:阶段二首批提供摘要、提纲和可编辑文字;多资料对比、周报/月报和 PPT 生成作为阶段二增强项,PPT 先确认大纲与模板再生成。
- **分享与入库**:个人资料默认本人可见;分享给团队或沉淀为企业知识时必须由本人明确发起,经过权限校验、脱敏、审核和版本治理。
- **网页安全与版权**:保留原 URL、抓取时间和正文快照;禁止访问内网地址或绕过登录/付费权限,需处理内容失效、版权与恶意页面风险。
- **阶段三边界**:北森、考勤、请假、组织任职等外部个人数据只在阶段三完成授权对接后使用,阶段二不得以手工复制数据伪造跨系统个人助理。
---
## 5. 数据模型方向
@@ -6,6 +6,7 @@
> 分阶段口径(已定):**第一步陪练相关全部工作 → 第二步银城大喇叭 + 知识学习平台 → 第三步北森人事考勤对接**。
> v0.2 确认(2026-07-07,客户方):①"管家"与场景库"生活顾问"为**同一岗位**,术语统一为"管家(生活顾问)",`position` 标签沿用现有值不迁移;②APP 形态定为 **H5 套壳 APP**(WebView 包装可安装),原生重写不做,D6 决策维持。
> v0.3 修订(2026-07-08,客户产品讨论):①阶段二"知识学习平台"扩充**学模块**——标准学习计划/课程/防快进视频/最短阅读时长/不定期考试,见 §4.5;②"新问题挂榜共创"产品形态定案为**开放问题榜**,定向师带徒经会议否决不做,见 §4.4;③新增知识分级访问权限工程需求;④三项待确认已获客户回复(2026-07-08):多端跳转暂缓(只保证能打开小程序页面,D6 不动)、排行榜保留为可选开关、员工评管理层按组织架构权限控制,见 §8 与《数字师傅学练问报整合方案 v1.2》§3.3。
> v0.4 修订(2026-07-11,客户微信补充):阶段二新增**员工个人 AI 助理 / 个人知识空间**——员工收藏个人文件、表格、PPT、文字和网页链接,按时间/主题检索并生成带来源的总结与分析;PPT 生成为增强项;北森、考勤等外部个人数据仍归阶段三。
## 1. 立项会带来的定位变化
@@ -25,7 +26,7 @@
| 阶段 | 内容 | 时间锚点 | 承载文档 |
|---|---|---|---|
| **一、陪练** | 陪练相关全部工作:场景库、语音对手戏、复盘、画像、派发、新员工每日三题、传帮带 | 2026-07-10 Alpha → 2026-07-13 当周 Beta → 半年会发布 → 9 月收费季前试点可用 | 《AI陪练二期开发推进计划》v0.8 |
| **二、大喇叭 + 知识学习平台** | 下行:公司信息直达推送(不过滤);每份文件 AI 总结 + 分身份"跟我相关"提取(见 §4 身份模型);**学模块:标准学习计划 + 知识课程 + 不定期考试(见 §4.5)**;上行:品检翻转(员工拍照上报+AI分析+积分)、开放问题榜(见 §4.4) | 半年会后启动,与阶段一试点并行推进;**学模块岗前课程最小版视资源提前到阶段一试点后** | 本总纲 §4/§5 +《数字师傅学练问报整合方案》(后续出专项计划) |
| **二、大喇叭 + 知识学习平台** | 下行:公司信息直达推送(不过滤);每份文件 AI 总结 + 分身份"跟我相关"提取(见 §4 身份模型);**学模块:标准学习计划 + 知识课程 + 不定期考试(见 §4.5)**;**个人 AI 助理:个人资料/链接收藏、检索、总结与分析(见 §4.6)**;上行:品检翻转(员工拍照上报+AI分析+积分)、开放问题榜(见 §4.4) | 半年会后启动,与阶段一试点并行推进;**学模块岗前课程最小版视资源提前到阶段一试点后** | 本总纲 §4/§5 +《数字师傅学练问报整合方案》(后续出专项计划) |
| **三、北森对接** | SSO/组织人员同步、考勤请假入口整合;报事闭环接口对接("一键走天下") | 阶段二稳定后;报事流程梳理由闫鑫牵头业务侧先行 | 本总纲 §6(后续出集成方案) |
排序理由(立项会原话):先陪练可倒逼知识沉淀 + 缓解 9 月收费压力;不求大求全,先做员工必用核心功能。
@@ -100,6 +101,26 @@
范围控制:不做直播、不做线下签到、不做课程市场;只支撑"岗前课程 + 每日小训 + 不定期考试"三种形态。数据模型需新增:课程、课件、学习进度、考试、成绩(专项设计待出)。**节奏**:整体属阶段二;岗前课程最小版(课程列表 + 完成状态 + 入职任务包)视内容资源到位情况,可提前到阶段一试点后启动。
### 4.6 员工个人 AI 助理 / 个人知识空间(2026-07-11 新增)
定位:在公司公共知识库之外,为每名员工提供个人工作资料与灵感的沉淀、检索和再加工空间;入口可复用员工端「问」,但个人资料与公司知识必须分域、分权限、分来源展示。
| 层级 | 能力 | 阶段口径 |
|---|---|---|
| MVP | 收藏个人文字、PDF/Word/Excel/PPT、图片和网页链接;自动提取正文、标题、来源、收藏时间和主题标签 | 阶段二首批 |
| MVP | 按日期范围、主题、来源查询“我哪些天收藏了什么”;基于选定资料问答、总结、提炼工作想法,答案必须带来源 | 阶段二首批 |
| MVP | 将冲突处理、工作灵感、保洁管理等问题交给个人助理分析;允许同时引用个人资料与有权限的企业知识 | 阶段二首批 |
| 增强 | 多份资料对比、周报/月报、结构化汇报提纲、个人知识标签和长期记忆 | 阶段二后半 |
| 增强 | 将总结导出为 PPT/汇报材料;先生成可编辑大纲,再生成文件,不把“一键 PPT”作为首批阻塞项 | 阶段二后半/P1 |
| 外部数据 | 北森、考勤、请假、组织任职等个人数据接入后再做跨系统分析 | 阶段三 |
边界与治理:
- 个人资料默认仅本人可见;主动分享或申请进入企业知识库时必须经过权限检查、脱敏和审核,不得自动混入公司公共知识。
- 网页链接需保留原 URL、抓取时间和正文快照;抓取必须防 SSRF、尊重访问权限与版权,登录态/付费内容不绕过授权。
- 回答需区分“个人资料”“企业 SOP”“外部网页”三类引用;未命中时明确提示,不编造来源。
- 开工前另出专项 TechSpec,至少覆盖个人资料元数据、内容解析、个人检索空间、来源引用、删除/导出和数据保留策略。
## 5. 阶段二不做什么(边界)
- 不做通用 OA/审批流(请假考勤等待阶段三北森入口,不自建)。
@@ -112,7 +133,9 @@
- 现有系统整合策略:立项会已定**先用跳转链接集成**,不做深度改造;报事闭环由闫鑫牵头业务侧梳理流程,APP 侧只做入口与接口预留("一键走天下"是长期目标)。
- 对 BRD 的修订影响:BRD §7 外部依赖表中"采购系统用户体系"应更正/补充为**北森**(HR 主数据权威源);D2"本地账号一期、SSO 二期"决策不变,阶段三兑现 SSO。
## 7. 对 BRD 的修订建议(待确认后落 v1.2)
## 7. 对 BRD 的后续修订追踪
BRD v1.2 已于 2026-07-11 增补“员工个人 AI 助理 / 个人知识空间”。下表是此前阶段讨论形成、仍需在后续 BRD 版本继续合并的修订项,不因本次个人助理增补自动视为全部完成。
| # | 修订点 | 说明 |
|---|---|---|