Skip to content

QA 要点:对话画像提案 + 全项目回归清单

面向测试同学:功能说明、专项用例与全站回归要点。实现细节见 modules/frontend.mdmodules/sse.mdmodules/backend.mdmodules/api_routes.md

文档结构

章节范围
下文「功能要点」至「TC-7」对话结束后 profileProposal(画像/人脉提案)
「全项目 QA 回归清单」认证、人脉、对话通用能力、策略、订阅、国际化、页面、健康检查等

功能要点

  1. 触发时机 用户在 对话页 发送消息,流式回复正常结束后,若服务端在 最后一条 SSEdone: true)里带上 profileProposal,前端会进入资料更新流程。未点「应用所选」前,服务端不应因该提案单独改库(以实际 API 行为为准:写入仅发生在用户确认的 PUT)。
  2. 三种 reason
  • **incomplete_self**:系统认为「我的画像」偏空。
    • 先出现 居中引导(标题类似「完善画像与档案」)。
    • 点「去更新」→ 大卡片刻画确认:仅展示 「我的画像」 侧,包含 全部5 个字段(摘要、目标、沟通风格、边界、补充背景等,与设置页一致)。
    • 后端可能只回了少数 LLM 抽取行;弹窗会 拉取当前 self-profile 与 patch 合并,缺省每一行勾选,可「全不选 / 全选」或单项改文案再应用。
  • **incomplete_person**:认为 当前关联的人脉档案偏空。
    • 同样 先居中引导,再进确认卡;仅展示 人脉 侧,单人多块时每人一块。
    • 字段为产品定义的完整集合(姓名、昵称、关系类型、性别、年龄段、标签、初识场景、现状、工作/教育经历、备注、重要度等)。
    • 拉取人脉详情(或内存 personMap)补全行;默认全部勾选
  • **refinement**:上下文已较完整时的 精炼补充
    • 居中引导;输入区上方 底部提示条 + 约 30 秒倒计时,可直接打开确认卡。
    • 弹窗内容主要为 后端给出的 patch 列表,默认全选(与偏空完整表策略不同)。
  1. 加载与文案
  • 偏空场景打开确认卡时,可能有短瞬间显示 「正在加载完整表单…」profileProposalLoading)。
  • 偏空场景下另有 完整表单说明profileProposalFullFormHint)。
  1. 应用与取消
  • 应用所选:仅对 勾选且 proposed 非空(trim后) 的字段提交(与实现一致:空串行不会作为更新提交)。
  • 暂不应用 / 关闭 / 底部条倒计时结束:应 清除待处理提案,不再重复弹出(直至下一轮触发)。
  1. 国际化
  • 界面语言切换中/英后,上述弹窗与引导文案应随 vue-i18n 切换;对话回复语言仍由对话 locale 控制,与本次 UI 无关。

测试前准备

项目说明
账号已登录 Web(http://localhost:3000 或测试环境)。
数据 A画像为空或极短:设置页「我的画像」各字段留空或仅极少字,便于触发 incomplete_self
数据 B新建人脉:必填项填齐,其它大段文本留空,对话中 关联该人,便于 incomplete_person
数据 C画像与人脉均较满:用于更容易出现 refinement 与底部条(依赖后端门控,不保证每轮必现)。
网络可开 DevTools 观察 /api/v1/chat/stream 结束帧是否含 profileProposal

建议用例与步骤

TC-1:incomplete_self 居中引导 + 完整表单

  1. 使用数据 A;进入对话页,不关联人脉或关联与否均可(以能触发 self 偏空为准)。
  2. 发送一条与自身相关的消息,等待流结束。
  3. 预期:出现 居中引导;点「去更新」后出现大卡;仅「我的画像」区块,约 5 个字段均有行;短暂可能出现加载文案。
  4. 修改其中一行,取消勾选其它行,点「应用所选」。
  5. 预期:成功提示;设置页「我的画像」与修改一致;未勾选字段不变。

TC-2:incomplete_person 仅人脉、完整字段

  1. 使用数据 B;对话顶部 关联该人脉
  2. 发送描述该人的消息,等待流结束。
  3. 预期:居中引导 →确认卡中 仅人脉(标题含人名或 ID hint),多个字段行(远不止「备注」一项);incomplete_self 侧不应出现。
  4. 勾选部分字段修改后应用。
  5. 预期:人脉详情页字段与提交一致;设置页画像不应被误改。

TC-3:refinement 底部条

  1. 使用数据 C;完成一轮可触发精炼的对话(若未出现则记录环境/后端配置,非阻塞缺陷需产品确认频率)。
  2. 预期 居中引导;出现 底部提示条倒计时;可点开确认卡;关闭或倒计时结束后提案消失。

TC-4:全选 / 全不选 / 关闭

  1. 在 TC-1 或 TC-2 的确认卡中点「全不选」,再「应用所选」。
  2. 预期:无 PUT 或成功但无有效字段(不应误清空已有内容)。
  3. 点「暂不应用」或关闭弹窗。
  4. 预期:提案清除,无残留弹层。

TC-5:并发与切换会话

  1. 在提案未处理时 切换会话或新建会话(按产品预期:通常应清除或仅绑定当前会话;以实际实现为准)。
  2. 预期:无卡死、无错误 toast;旧提案不应错误套到新会话。

TC-6:中英文

  1. 顶栏切换 English,重复 TC-1 关键路径。
  2. 预期:引导与确认卡为英文键对应译文;布局无截断。

TC-7:失败与重试

  1. 在打开确认卡前用 DevTools 断网模拟 401,再点「应用所选」。
  2. 预期:失败提示;数据不一致时以服务端为准;恢复网络后可再次从设置/人脉修正。

已知注意点(便于判责)

  • 是否弹出提案 由后端门控 + LLM 抽取决定,QA 应用多轮/多数据尝试,避免「未弹出」直接判前端缺陷。
  • 默认全选 仅适用于 incomplete_self / incomplete_person 展开后的完整表;refinement 为 patch 列表默认全选,但字段数量可能较少。
  • 重要度 等字段为文本输入数字时,非法值可能不会写入(与 UpdatePersonRequest 校验一致)。

全项目 QA 回归清单

路由与权限以 internal/handler/router.go modules/api_routes.md 为准。下列为按模块整理的要点,非穷尽逐字段用例,可在此基础上扩展。

A. 认证与账号

要点建议验证
注册 / 登录合法注册;重复邮箱;错误密码;响应含 accessToken / refreshToken / user
刷新 TokenPOST /api/v1/auth/refresh;过期 refresh 行为
OAuth(若环境已配)Google / WeChat 跳转与回调;取消授权
用户资料GET/PUT /api/v1/auth/profile
我的画像(设置与 API)GET/PUT /api/v1/auth/self-profile 与对话上下文注入一致

B. 人脉

要点建议验证
CRUD列表分页、搜索、筛选;创建 / 详情 / 编辑 / 删除
导入POST .../import-urlimport-textimport-image(大文件/超时/无效内容)
权限隔离用户 A 无法访问用户 B 的 persons/:id(预期 404 或业务错误)

C. 对话(通用,不含 profileProposal 专项)

要点建议验证
非流式POST /api/v1/chat 整包返回
流式 SSEPOST /api/v1/chat/streamcontent 增量、agent 字段、done:true、可选 sessionId;首包前 UI等待态
停止生成流式中途 Abort,无卡死;会话状态一致
regenerate请求体 regenerate: true 时重放上一轮用户话并重新生成
参数personIdsscenarioTypemodellocale 抽样:回复语言与关联上下文是否合理
会话管理GET/DELETE .../chat/sessionsGET .../sessions/:idGET .../chat/stats
额度免费「每日首问」、同会话追问上限;策略线程追问;429reason(如 daily_first_messages);设置页与 GET /subscription/usage 展示

D. 策略(Strategy)

要点建议验证
三接口POST .../strategy/analyzeadvisescript
多轮线程strategyThreadId 传入与返回;Redis 线程历史是否连贯
额度与对话类似的追问/首问策略(以当前后端为准)
locale回复语言与界面语言独立时的表现

E. 订阅

要点建议验证
用量GET /api/v1/subscription/usage 与额度消耗一致
Mock 升级仅演示环境:mock-activate 后付费额度或标识变化

F. 国际化与外观

要点建议验证
界面语言顶栏 zh/en;MainLayout / Settings / 对话关键文案无漏翻
暗色模式切换与刷新后保持
对话语言与界面语言独立:locale 传后端后回复语言

G. 静态页面与导航

要点建议验证
Dashboard / Guide入口、加载、无控制台错误
法律页Privacy、Terms 可访问
登录态路由未登录跳转登录;已登录访问 guest 路由行为

H. 健康与部署(冒烟)

要点建议验证
探活GET /healthcode:0
生产(若测)静态资源 try_files;API 反代;SSE proxy_buffering off、长连接

I. Electron 桌面壳(可选)

要点建议验证
开发pnpm dev:desktop:Vite 3000 与壳一致
安装包pnpm build:desktoppack 后启动;file:// 下路由为 hash

J. 可观测与后端行为(可选)

要点建议验证
Langfuse开启配置时 trace 是否入库(非功能阻断)
情绪快照对话结束后 DB emotion_snapshots是否有新行(非 Mock 时)

相关文件(研发自测 — 画像提案专项)

区域路径
弹窗合并逻辑frontend/apps/web/src/components/chat/ProfileProposalModal.vue
引导 / 底部条frontend/apps/web/src/views/chat/ChatView.vue
文案frontend/apps/web/src/locales/zh.jsonen.jsonchat.profileProposal* 等)
SSE 类型frontend/packages/sharedProfileProposal
后端模型backend/internal/model/profile_proposal.go

全接口对照modules/api_routes.md · 产品进度progress.md