# 任务执行结果消息「点踩反馈」技术方案 - 日期:2026-09-27 - 状态:已与需求方达成共识,待实施 - 涉及端:backend-ts(后端)、desktop(桌面 / Web / 安卓共用 UI)、admin(管理后台) - 不涉及:android 原生壳、agent-cli、Electron 主进程 --- ## 1. 需求背景 用户在使用 Agent 执行任务后,如果执行结果不符合期望(结果错误、处理速度慢、问题未解决),目前没有任何反馈渠道,运营/管理侧无法感知 Agent 执行质量,只能事后通过人工翻会话发现。本需求在任务执行结果消息上提供「点踩」入口,把不满信号沉淀为结构化数据,并在管理后台提供记录查看与统计能力,形成质量反馈闭环。 ## 2. 需求描述 ### 2.1 要做的 1. 桌面端(Electron / Web / 安卓三端共用 desktop UI): - 在 assistant 文本消息底部的消息操作栏(`message-footer`,与复制按钮同一行、复制按钮左侧)增加「大拇指朝下」点踩按钮。 - 显示时机与复制按钮完全一致:assistant 消息、有文本内容、非流式执行中(`!isAssistantRunning`)、非编辑态。历史轮次的消息一直保留点踩按钮,会话出现新轮次后不消失。 - 点击后弹出轻量 popover,提供 4 个固定原因单选:结果错误 / 处理速度慢 / 问题未解决 / 其他。 - 选中原因即提交,popover 自动关闭,按钮变为高亮态(已点踩)。 - 已点踩的消息再次点击按钮:popover 中当前原因处于选中态,支持「取消点踩」操作,取消后恢复默认态。 - 每条消息最多 1 条点踩记录,可反复切换/取消,最终态唯一。 - 覆盖聊天场景:主聊天面板(ChatPanel)与边路任务对话(SideChatPanel);SubagentChatPanel(查看后台子代理对话)不显示点踩按钮。 - 生成/复现的消息(分支轮次等历史消息重新加载)需正确回显已点踩状态。 2. 后端(backend-ts): - 新增 `feedback` 领域,提供提交点踩、取消点踩接口;提交时校验消息存在、属于当前登录用户本人的会话、角色为 ASSISTANT。 - 每条消息唯一一条点踩记录(数据库唯一键兜底,重复提交为覆盖更新原因)。 - 新增管理后台接口:点踩汇总统计(总数、按原因分布、按时间趋势)与分页明细列表(含消息内容摘要、用户、会话、Agent、原因、时间),支持按原因、时间范围筛选。 - 新增权限点 `feedback:read`(查看点踩反馈),通过 Flyway 迁移写入权限目录并默认授予系统管理员(role_id=1)。 - 提交/取消点踩仅需登录态,不新增用户侧权限点;后端校验「消息所属会话的 user_id == 当前用户」,防止越权给他人消息点踩。 3. 管理后台(admin): - 新增顶级菜单「点踩反馈」,菜单项受 `feedback:read` 权限控制,无该权限的管理员不可见、接口不可调。 - 页面结构:顶部汇总卡片(点踩总数、原因分布)+ 明细表格(时间、用户、会话 ID、Agent、原因、消息内容摘要),支持按原因和时间范围筛选,分页默认第一页。 ### 2.2 明确不做的 | 不做项 | 说明 | | --- | --- | | 点赞(大拇指朝上)按钮 | 本期只有点踩,无正向反馈;后续如需单独立项 | | 点踩原因备注 / 自由文本输入 | 只有 4 个固定原因单选,不提供任何文本输入 | | 点踩率指标 | 不计算任何比率(会话级或消息级),汇总只展示绝对数量与分布 | | SubagentChatPanel 点踩入口 | 查看后台子代理对话的面板不显示按钮 | | 后台子代理 / 边路之外的入口 | 不做工具调用卡片、思考块上的点踩 | | 明细弹窗看完整上下文 | 明细列表直接内嵌消息摘要,不做抽屉/弹窗详情 | | 导出报表 / 定时推送 | 不做 CSV 导出、不做飞书/钉钉推送 | | 多次点踩累计计数 | 一条消息仅保留最终一条点踩记录 | | 触达 Agent 侧 | 点踩数据不进入 PromptEngine / AgentLoop,不影响执行 | ## 3. 技术选型 沿用项目现有架构,不引入新框架、新依赖: - 后端:NestJS + Fastify,领域目录 `backend-ts/src/feedback/`(`feedback.routes.ts` / `feedback.service.ts` / `feedback.repository.ts` / `feedback.spec.ts`),遵循 `Result`(code=0)响应约定;权限校验复用 `requireRequestPermission`。 - 数据库:MySQL8 + Flyway 迁移,新增 `backend-ts/db/migration/V123__message_feedback.sql`(当前最新为 V122,落地时以实际最新版本号顺延)。 - 权限:沿用 `permission` / `role_permission` 表模型,参照 `V121__admin_permission_catalog.sql` 的写法插入 `feedback:read` 并授予 ADMIN 角色。 - 桌面端:Vue3 `