Files
UHD_Media_Tool/docs/design/agent-chat-review.md
T
2026-09-29 20:41:30 +08:00

107 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGUI-3 智能体对话易用性审查
用户栈只读,看了 34 个已有会话中的 4 个:9883534f、31d16a1a(方案选择 + 审批)、174fea29、1a2dd4ee,没有发起新对话。截图在 `agui3/`,`d-` 是桌面,`m-` 是 390 宽。DEAI-2 已经在做的项不再重复。
## 1. 用户看到的信息与噪声
以 9883534f 为例,对话流一共 2223px,约 4 屏(d-02-run-simple-*):
| 块 | 高度 | 判定 |
|---|---|---|
| 用户消息 | 63 | 需要 |
| 「Agent 20:06:42」回合头 | 11 | 删除 |
| 活动折叠行「6 次工具调用,思考 4 段 失败 1 更新步骤清单 → 列出站点…」×2 | 76 | 可折叠,要改成人话。「更新步骤清单」就是 agent.plan,和侧栏步骤重复 |
| 红色拒绝卡(4 个徽章 + 两行安全说明 + 调用 ID) | 213 | 缩成一行加按钮,约 40px |
| 最终回复正文 | 1225 | 需要。但 32% 的字符是函数名、字段名和 UUID(`site.list(includeDisabled=true)`、`062e5c51-…`),还有 6 列表格 |
| 「模型说的」卡:把正文**原样再显示一遍** | 328 | 删除 |
| 「系统核实的结果」卡 | 208 | 缩成一行 |
**估算噪声占比约 49%**(约 1080/2223px)。其中最大的一块是正文里的技术字段,这要改 prompt,光改 UI 解决不了。对话流以外还有:
- 目标出现 3 次(页头、气泡、列表选中行)。
- 右侧栏:模型 ID、步骤备注里的工具原始输入(`site.list(inclu…`)、4 条预算进度条。
桌面 1440×900 下,对话可视区只有约 540×540,占屏幕 22%。手机上占 47%(m-02-*)。
## 2. 繁琐点
1. **同一个动作确认两次**(d-10、d-11):单选「A. 直接提交」→「选定」→ 又出「批准『提交下载』?」→「批准」。3 次点击、2 次确认。
2. **没必要的方案选择**(174fea29):只问「看看有哪些新 4K」,也要在 3 个方案里选一个,因为开了「先看方案再执行」。
3. **抽屉两层导航**(d-04 → d-06):「当前 / 历史」Tab,历史里打开会话后要「返回列表」;「新目标」按钮只在「当前」Tab 有。
4. **看工具细节要点 3 层**(折叠行 → 工具卡 → 查看详情),看到的是 scope、幂等键、调用 ID。
5. **历史难找**(m-05):子会话混在列表里(34 条中 11 条),等你处理的不置顶,窄栏里挤着 3 个下拉筛选。
6. **结束后输入区 4 个控件**:输入框、「用同目标新建」、开关、续跑,下面还有一行说明(手机上也显示快捷键提示)。
## 3. 重设计
**对话流**:用户消息 → 一行进度状态 → 结论正文 → 一行实际结果。
- **进度行**:一个回合里的所有工具调用都聚合成一行(现在要连续 3 次以上才折叠,改成 1 次就折叠),用人话计数,例如「查了 1 个站点、2 份下载记录和媒体库 · 41 秒 ›」。
- 展开后每步一行(「搜资源 → 2 条候选」);工具名、ID、思考过程放进「技术信息」。
- **隐藏的调用**:`agent.plan` 和 `agent.propose_options` 不再作为工具调用出现在流里。
- **被拒绝的调用**:不单独出卡片,在进度行里标「1 项没做」,正文下面补一行「没做:检测站点——需要你批准 [批准并重试]」。
**步骤清单**:
- 去掉右侧栏,统一用顶部概况条「步骤 4/5 · 当前:核对下载任务」;备注只在失败时显示;预算和模型放进「技术信息」。
**方案卡**:
- 每个方案做成一个按钮,**点一下就选定**。推荐项放第一位,并设为主按钮。
- 风险折叠成「2 条风险 ›」。「都不要」降级成文字链接,点开后才出现原因输入框。
- 只有真的存在分歧时才提问。「先看方案再执行」从开关改成输入框里的指令 `/先给方案`,只作用于这一次。
**审批卡**:
- 只显示摘要和【批准】【拒绝】;UUID、payload hash、版本、到期时间收进「技术信息」。
- 如果刚选定的方案里已经包含这个动作,**选定就等于批准**:服务端把选择绑定到同一个 planId + payloadHash,不再出第二张卡。
**输入区**:
- 只留输入框和发送 / 停止按钮,空态显示 3 个快捷目标(入口页也要有)。
- `/` 指令:`/先给方案`、`/重跑`。上下文显示成名称标签「沙丘:第二部 ×」,不再显示 `作品 · 74beab51…`。
**历史会话**:
- 抽屉去掉 Tab,头部放「历史」图标(弹出最近 20 条)和「新对话」按钮。
- 「等你处理」置顶,子会话收到父会话下面,筛选只留搜索框和「全部 / 等你处理 / 失败」。
参照物,只取交互思路:
ChatGPT / Claude.ai 把工具调用折成一行;Cursor / Claude Code 每步一行可展开;MoviePilot 的工具调用是一行图标加文字,方案直接是按钮,支持斜杠指令(`AgentAssistantPanel.vue` 约 2574 行)。
## 4. 组件改动清单
| 优先级 | 文件 | 改动 |
|---|---|---|
| P0 | `apps/web/app/components/agent/agent-conversation.tsx` | 删掉 FinalReport 的双栏,换成一行实际结果;ActivityFold 改成 StepSummary(聚合、人话计数、技术信息);拒绝卡缩成一行;ToolCallCard 去掉徽章 / ID |
| P0 | `apps/web/app/components/agent/use-agent-stream.ts` | 过滤 agent.plan / propose_options 的工具调用 |
| P0 | `packages/agent/src/system-prompt.ts` | 规定汇报格式:第一句写结论;对象用名字,不写函数名、字段名、UUID;不超过 10 行;只有列举多个资源时才用表格 |
| P0 | `apps/web/app/components/agent/agent-interaction.tsx` | 方案卡改成一键选定,风险折叠;审批卡只留摘要,其余进技术信息 |
| P0 | `apps/web/app/components/agent/agent-run-panel.tsx` | 去掉右侧栏,统一用概况条;精简输入区工具栏和提示行 |
| P0 | `apps/web/app/routes/console/agent.$runId.tsx`、`agent.tsx` | 去掉页头的目标描述,对话占满;入口页加快捷目标和「等你处理」 |
| P1 | `apps/server/src/modules/agent/interaction.ts` | 选定方案即批准(绑定 planId + payloadHash,要补测试) |
| P1 | `packages/contracts/src/capability.ts`、`apps/server/src/modules/agent/capabilities-metadata.ts` | 每个能力加 `verb/noun`,用于人话计数,例如「查了 N 个站点」 |
| P1 | `apps/web/app/components/agent/agent-drawer.tsx`、`agent-store.ts` | 去掉 Tab,改成历史弹层加新对话按钮;上下文标签显示名称 |
| P1 | `apps/web/app/components/agent/agent-session-list.tsx` | 「等你处理」置顶、隐藏子会话、筛选改成三选一、行内信息精简 |
| P1 | `apps/web/app/components/agentui/prompt-input.tsx` | 斜杠指令菜单、上下文标签 |
**和 DEAI-2 的冲突**:deai2 分支(4480fc3)已经改了上表的全部 `components/agent/*.tsx`、`agent-launcher.tsx`、`routes/console/agent*.tsx`、`capability.ts`、`capabilities-metadata.ts`、`interaction.ts`、`runner.ts`,目前只是文案替换,每个文件 2–14 行。**建议 DEAI-2 合并后再从新的 main 开 AGUI-3**。`system-prompt.ts`、`use-agent-stream.ts` 不冲突,可以先做。
## 5. 改前 / 改后示例
**例 1:工具步骤**(d-02-run-simple-top)
- 改前:「6 次工具调用,思考 4 段 失败 1 更新步骤清单 → 列出站点 → 列出待处理…」,下面是 213px 的红色卡片:「服务端拒绝了『检测站点』 site.health_check ·执行 ·scope·admin ·低风险 ·幂等 ·授权校验未通过」,再加两行「有副作用的能力需要有效的持续授权…模型声称"用户已同意"无效…」。
- 改后:「查了 1 个站点、下载记录和媒体库 · 1 项没做 ›」。正文下面一行:「没做:检测站点连通性,需要你批准 [批准并重试]」。
**例 2:结尾**(d-02-run-simple-bottom)
- 改前:正文(带 `site.list(includeDisabled=true)` 和 UUID 表格)→ 「模型说的(未经核查)」原样重复一遍 → 「系统核实的结果」5 个徽章 + 4 个 0 + 来源说明。
- 改后:「下载器和媒体服务器都还没接入,所以没法检查。站点『憨憨』正常,在做种 24 个。」再加一行「没有提交下载或整理 · 41 秒 · 约 $0.01 · 技术信息 ›」。
**例 3:方案选择 + 审批**(d-10、d-11)
- 改前:单选框「A. 直接提交该 1080p 计划到下载器」,下面写「用已生成的草案计划 c062c84a-828d-…(槽位 37746be7、资源 0bd93cb0…)」加 2 条风险,点「选定」;之后又出「批准『提交下载』? 高风险 · 计划 c062c84a… · payload hash c201cb58… · r2 · 到期」,点「批准」。
- 改后:卡片标题「《沙丘2》1080p 怎么收?」,下面三个按钮:【提交下载 · 12 GB(推荐)】【先修站点】【先不下】,底部有「2 条风险 ›」和「都不要…」。点第一个按钮就直接提交,不再出审批卡。