# AI健康教练人格分化与管家自助选择 实现计划 > **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:subagent-driven-development(推荐)或 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法来跟踪进度。 **目标:** 复用吉祥物管线为健康教练提供浠宝/福宝双人格话术;L2 家庭可自助浏览并绑定/更换真人管家;管理端补齐分配管理与停接开关。 **架构:** 后端在现有 butler 体系上增量扩展(1 列迁移 + 1 新实体 + ButlerService 方法 + 2 个控制器);AI 人格经 `/health-coach/send` 补注入 `coach_id`,经 AiGateway context 透传至 LangGraph 按 prompt_key 三级回退路由;小程序新增选择页三态视图;Web 管理端新增分配管理视图与开关列。 **技术栈:** Spring Boot 2.7.18 + MyBatis-Plus(Java 8)/ FastAPI + LangGraph(Python)/ uni-app Vue 2 Options API / Vue 2 + Element UI **规格:** `docs/superpowers/specs/2026-08-23-coach-butler-design.md`(已批准,commit 8cc0a758) **⚠️ 本仓库验证约定(覆盖技能默认 TDD 流程):** - 后端唯一验证方式:`cd cfc-backend && mvn clean compile`(EXIT 0 即通过,无测试基建) - 小程序前端验证:提取改动 `.vue` 的 ` ``` ⚠️ 注意上面样式第一行的 `background: #f5fafе;` —— 其中 `е` 必须是半角英文字母 e(此处若粘贴出现异常字符请手动改正为 `#f5fafe`)。 - [ ] **步骤 8.4:语法验证** 运行: ```bash cd cfc-frontend && sed -n '/ ``` 响应包装取值方式(res.data / res.code)先对照 `api/butler.js` 现有消费方(如 ButlerAudit.vue 中 `getButlerList(...).then(...)` 的取值层级)并保持一致,若全局拦截器已剥壳则同步调整。 - [ ] **步骤 10.3:ButlerAudit.vue 加停接开关列** 运行:`grep -n "el-table-column" cfc-web/src/views/admin/review/ButlerAudit.vue | tail -5` 找到表格最后一列的位置,其后插入(prop 名以该表格数据字段为准,若列表项含 `userId` 则如下): ```html ``` methods 中追加(并顶部 import `toggleButlerAccepting`): ```javascript async onToggleAccepting(row) { const next = row.accepting === 0 ? 1 : 0 try { const res = await toggleButlerAccepting({ butlerUserId: row.userId, accepting: next }) if (res.code === 200) { this.$set(row, 'accepting', next) this.$message.success(next === 1 ? '已恢复接单' : '已停接新单') } else { this.$message.error(res.message || '操作失败') } } catch (e) { this.$message.error('操作失败') } }, ``` 若管家列表接口未返回 `accepting` 字段,需回查后端 list 接口的组装逻辑把 `profile.getAccepting()` 放进行数据(在 AdminButlerController/相关 Service 中搜索现有 list 的组装点,加一行 `row.put("accepting", p.getAccepting())` 同级代码),并在本计划内完成该最小改动后再进入下一任务。 - [ ] **步骤 10.4:路由与权限注册(定位式)** 运行:`grep -rn "ButlerAudit" cfc-web/src/router/ cfc-web/src/permissions.js 2>/dev/null ; grep -rn "path: '/admin" cfc-web/src/router/index.js | head -8` - 若找到 ButlerAudit 的注册行:紧随其后照抄一条 ButlerAssignments 路由(component 改为 `() => import('@/views/admin/ButlerAssignments.vue')`,name/path/meta 结构逐字段镜像邻居条目)。 - 若 router 中搜不到但页面可访问(动态注册机制):在 `src/router/index.js` 里找任一 admin 视图条目作为模板,同样镜像新增。 - 若存在独立权限清单文件(步骤命令会暴露路径):为新路由追加同名权限码。 - [ ] **步骤 10.5:Commit** ```bash GIT_MASTER=1 git add cfc-web/src/api/butler.js cfc-web/src/views/admin/ButlerAssignments.vue \ cfc-web/src/views/admin/review/ButlerAudit.vue cfc-web/src/router/index.js GIT_MASTER=1 git commit -m "feat: 管理端分配管理与停接开关页面" ``` --- ### 任务 11:API 文档登记 + 全量验收 **文件:** - 修改:`docs/superpowers/api/API_REFERENCE.md` - [ ] **步骤 11.1:登记 6 个新接口** 运行:`grep -n "api/butler" docs/superpowers/api/API_REFERENCE.md | head -3` 定位管家章节,按该文档既有表格格式追加: | 接口 | 说明 | 权限 | |------|------|------| | `POST /api/butler/available-list` | 可选管家列表(浏览开放,脱敏) | 登录 | | `POST /api/butler/my-butler` | 我家当前管家绑定信息 | 登录 | | `POST /api/butler/select` | 绑定/更换管家(仅L2有效订阅) | 登录 | | `POST /api/admin/butler/assignments` | 分配关系分页列表 | 管理员 | | `POST /api/admin/butler/unassign` | 强制解绑 | 管理员 | | `POST /api/admin/butler/toggle-accepting` | 管家停接新单开关 | 管理员 | 另在 AI 章节给 `/api/ai/health-coach/send` 的请求体补充一行说明:新增可选字段 `coach_id` 由服务端自动注入(客户端无需传)。 - [ ] **步骤 11.2:最终验证清单(对照规格 §十一 验收标准)** ```bash cd cfc-backend && mvn clean compile # EXIT 0 cd ../cfc-langgraph && python3 -m py_compile app/graphs/health_coach_graph.py && echo LG_OK for f in pages/butler/select.vue pages/ai/chat.vue pages/membership/index.vue; do cd cfc-frontend && sed -n '/