7.6 KiB
7.6 KiB
文书工作台 Agent 优化 — 交付说明(v1.0)
日期:2026-09-01 | 涉及仓库:prodream-next(前端)、prodream_backend(后端) 方案文档:docs/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 check(humanizer 改编清单 + 检测/确认/改写流程) |
| F | 82729a5d0 |
feat: inject essay word_count into essay-chat context + SKILL context note |
注:阶段 B(skill 骨架)为纯后端改动,前端无对应 commit。
三、验收对照
需求 1:Agent 对话
| 验收点 | 状态 | 证据 |
|---|---|---|
| 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 |
需求 2:AI 味检查
| 验收点 | 状态 | 证据 |
|---|---|---|
| 检测清单覆盖 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 - i18n:cn.json / en.json JSON.parse pass,key 一一对应
- 浏览器端到端验证(pre.prodream.cn):⏳ 未做 — 需要测试账号(见风险 5)
五、改动文件清单
前端
components/editor/rightbar/chatbot/Chatbot.tsx— essay-chat 嵌入 + ACTIONS 落回 + 字数提示 + assistantTranslatecomponents/dreami/DreamiChatV2.tsx— assistantTranslate / composerHint 可选 prop + 翻译按钮 UIcomponents/editor/rightbar/feedback/Feedback.tsx— 常驻恢复 + 历史时间线 + handleSelectHistorycomponents/editor/rightbar/feedback/Result.tsx— 评估报告翻译按钮 + 译文区components/editor/rightbar/feedback/Improvement.tsx— 历史建议 origin guardcomponents/dreami/dreamiAdapter.ts— EssayAnchorAction 类型透传- 输入法 5 处 onKeyDown(chat 输入框所在组件)
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工具
六、风险与未做项
- 浏览器验证未做(风险 5):pre.prodream.cn 需要测试账号。联调验证时需要你提供账号,或由你自行走查。
- 对话改写需用户确认:已按方案(先给改法→确认→落回)实现,未绕过确认——这是刻意行为,不是缺陷。
- 评估为异步任务:对话内 get_essay_evaluation 走工具调用,结果以工具返回注入;AI 输出等待提示由 skill 指令约束。耗时表现需浏览器实测确认。
- humanizer 为参照非照搬:35 条按文书场景裁剪(检测保留、改写挑选),详见 SKILL「AI 味检查」章节出处标注。
- 未动评估 prompt 体系:评估质量体系(招生官视角 + 8 维度)原样保留。