Files
human-voice-rewrite-demo/essay-agent-optimization-delivery.md

120 lines
7.6 KiB
Markdown
Raw Permalink 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.
# 文书工作台 Agent 优化 — 交付说明(v1.0
> 日期:2026-09-01 涉及仓库:prodream-next(前端)、prodream_backend(后端)
> 方案文档:[docs/essay-agent-optimization-plan.md](essay-agent-optimization-plan.md)(已实施,状态头已更新)
---
## 一、完成状态总览
| # | 需求 | 状态 | 关键实现 |
|---|---|---|---|
| 1 | Agent 对话进文书工作台(essay-chat skill | ✅ 已实施 | tab6 替换为 DreamiChatV2 嵌入;后端 essay-chat skill + 控制面映射;`<<<ACTIONS>>>` 锚点落回编辑文档 |
| 2 | humanizer 规则融入(AI 味识别与优化) | ✅ 已实施 | SKILL.md 新增「AI 味检查」章节:参照 humanizer v2.11.2 裁剪的检测清单 + 逐段扫描→报告→确认后改写流程 |
| 3 | 文书评估常驻卡片 | ✅ 已实施 | 评估结果 zustand 常驻 + 历史时间线(GET /evaluation/history+ 「去对话改写」闭环 |
| 4 | 体验优化(翻译 / 字数提示 / 汇总建议) | ✅ 已实施 | assistant 回复翻译按钮;输入框旁目标字数提示(BE 注入 word_count,改写自动带字数约束);历史评估构造汇总建议 |
| 5 | 输入法误发送 bug | ✅ 已实施 | 5 处 onKeyDown 加 `isComposing` 守卫 |
## 二、commit 对照
### 前端 prodream-next(按顺序)
| 阶段 | commit | 内容 |
|---|---|---|
| A | `563a13cc8` | fix: 输入法组合期间回车误发送(5 处 onKeyDown 守卫) |
| C | `1153a1f61` | feat: essay 工作台 tab6 替换为 DreamiChatV2 essay-chat 嵌入 + ACTIONS 锚点落回 |
| D | `8ef4f0e75` | feat: 文书评估常驻卡片 + 历史时间线 + 建议→对话改写闭环 |
| F | `3aaf10bf6` | feat: essay workbench UX polish — translation buttons, word-count hint, history suggestions |
### 后端 prodream_backend(按顺序)
| 阶段 | commit | 内容 |
|---|---|---|
| B | `250e39454` | feat: essay-chat skill 骨架 + get_essay_evaluation 工具 |
| C | `88969a639` | feat: 控制面 chat.py essay-chat 映射 + toolset 切换 + context 富化 + ACTIONS 剥离回传 |
| D | `852236107` | feat: 评估历史接口 GET /essay/{id}/evaluation/history + SKILL 首轮带指令 |
| E | `d68b45386` | feat: essay-chat skill AI-flavor checkhumanizer 改编清单 + 检测/确认/改写流程) |
| F | `82729a5d0` | feat: inject essay word_count into essay-chat context + SKILL context note |
> 注:阶段 B(skill 骨架)为纯后端改动,前端无对应 commit。
## 三、验收对照
### 需求 1Agent 对话
| 验收点 | 状态 | 证据 |
|---|---|---|
| tab6(竖列底部 Dreami 按钮)进入即自动开聊 | ✅ 静态验证 | `autoStart` + `hideEmptyHero`,空首轮触发 SKILL 首轮盘点(agent_initiated |
| 对话上下文带文书全文 / 题目 / 目标字数 / 评估 | ✅ 静态验证 | BE 按 essay_id 注入 current_document/essay_prompt/word_count/evaluation 到最后一条 user 消息 |
| 对话里改文书:确认后落回 | ✅ 静态验证 | SKILL「建议落地」先给改法→用户确认→`<<<ACTIONS>>>` 锚点替换 Tiptap 段落→useSaveEssay 落库 |
| 锚点未命中不猜测 | ✅ 静态验证 | `applyEssayActionsToEditor` 唯一命中才应用,未命中 toast 提示 |
| 语言跟随界面 locale | ✅ 静态验证 | taskMetadata.context.locale 注入 + 回复语言约束 |
| 浏览器实测 | ⏳ 待验证 | 见风险 5 |
### 需求 2AI 味检查
| 验收点 | 状态 | 证据 |
|---|---|---|
| 检测清单覆盖 humanizer 35 条(裁剪) | ✅ 静态验证 | 内容/语言/风格三类清单 + 反误报清单,出处标注 humanizer v2.11.2 |
| 逐段扫描→报告(模式+原文引用+改法) | ✅ 静态验证 | SKILL「AI 味检查」检测流程 |
| 确认后改写,不改事实/删词不删意 | ✅ 静态验证 | 改写四原则 |
| 与 GPTZero 按钮互补不冲突 | ✅ 静态验证 | SKILL 互补说明 |
### 需求 3:评估常驻卡片
| 验收点 | 状态 | 证据 |
|---|---|---|
| 评估完结果常驻(刷新/重进恢复) | ✅ 静态验证 | zustand 空态自动恢复 history[0] |
| 多次评估可回看历史 | ✅ 静态验证 | GET /essay/{id}/evaluation/history + 历史时间线折叠列表 |
| 历史项可选回看 | ✅ 静态验证 | onSelect 切换 result + 构造只读建议 |
| 从建议「去对话改写」 | ✅ 静态验证 | handleChatRewrite 暂存指令→切 tab6;历史建议 origin 留空→guard 引导走对话 |
### 需求 4:体验优化
| 验收点 | 状态 | 证据 |
|---|---|---|
| assistant 回复一键翻译(复用 translate API | ✅ 静态验证 | assistantTranslate prop(仅 essay-chat 传,其他场景行为不变)+ 译文消息下方展开/收起 |
| 输入框旁目标字数提示 | ✅ 静态验证 | expect_word_count + editor 词数实时;超出变红;无字数要求题不显示 |
| 改写指令自动带字数约束 | ✅ 静态验证 | BE 注入 word_count 字段 + SKILL 换算单段比例逻辑 |
| 汇总建议:一句话行动项 | ✅ 静态验证 | improvement 字段既有能力,未新造 |
| 历史里能看到上次评估建议并可再次进入改写 | ✅ 静态验证 | handleSelectHistory 构造 FeedbackImprovement 列表 + 「去对话改写」按钮 |
### 需求 5:输入法 bug
| 验收点 | 状态 | 证据 |
|---|---|---|
| 中文输入组合期间回车不误发送 | ✅ 静态验证 | 5 处 `onKeyDown``e.nativeEvent.isComposing` 守卫;tsc pass |
| 组合完成后回车正常发送 | ✅ 静态验证 | 组合状态 false 走原逻辑 |
## 四、验证记录
- 后端:`py_compile` 全部改动文件 pass
- 前端:`tsc --noEmit`(主仓 node_modules 绝对路径)exit 0
- i18ncn.json / en.json JSON.parse passkey 一一对应
- 浏览器端到端验证(pre.prodream.cn):⏳ 未做 — 需要测试账号(见风险 5)
## 五、改动文件清单
### 前端
- `components/editor/rightbar/chatbot/Chatbot.tsx` — essay-chat 嵌入 + ACTIONS 落回 + 字数提示 + assistantTranslate
- `components/dreami/DreamiChatV2.tsx` — assistantTranslate / composerHint 可选 prop + 翻译按钮 UI
- `components/editor/rightbar/feedback/Feedback.tsx` — 常驻恢复 + 历史时间线 + handleSelectHistory
- `components/editor/rightbar/feedback/Result.tsx` — 评估报告翻译按钮 + 译文区
- `components/editor/rightbar/feedback/Improvement.tsx` — 历史建议 origin guard
- `components/dreami/dreamiAdapter.ts` — EssayAnchorAction 类型透传
- 输入法 5 处 onKeyDownchat 输入框所在组件)
- `dictionaries/cn.json` / `dictionaries/en.json` — 新增 key
### 后端
- `dreami/control-plane/dreami_control_plane/api/chat.py` — essay-chat task 映射 + toolset + context 富化 + `<<<ACTIONS>>>` 剥离回传 + word_count 注入
- `dreami_skills/essay-chat/SKILL.md` — 骨架 + 首轮盘点 + AI 味检查章节
- 评估历史接口 + `get_essay_evaluation` 工具
## 六、风险与未做项
1. **浏览器验证未做**(风险 5):pre.prodream.cn 需要测试账号。联调验证时需要你提供账号,或由你自行走查。
2. **对话改写需用户确认**:已按方案(先给改法→确认→落回)实现,未绕过确认——这是刻意行为,不是缺陷。
3. **评估为异步任务**:对话内 get_essay_evaluation 走工具调用,结果以工具返回注入;AI 输出等待提示由 skill 指令约束。耗时表现需浏览器实测确认。
4. **humanizer 为参照非照搬**:35 条按文书场景裁剪(检测保留、改写挑选),详见 SKILL「AI 味检查」章节出处标注。
5. **未动评估 prompt 体系**:评估质量体系(招生官视角 + 8 维度)原样保留。