docs: add session UI goal prompt
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
# WiseGrade“会话”界面更新:Codex Goal 模式提示词
|
||||||
|
|
||||||
|
在本仓库根目录启动 Codex Goal 模式,将下方代码块完整粘贴为目标。本提示词针对已有对话功能做增量更新。
|
||||||
|
|
||||||
|
```text
|
||||||
|
你是 WiseGrade 项目的开发代理。请直接在当前仓库完成“对话”界面的增量更新,包含必要的前后端、数据库迁移、测试和文档修改,直到下面的验收条件全部满足。不要只给出方案或界面样例。
|
||||||
|
|
||||||
|
先检查 git 工作区状态,阅读 README.md、HANDOFF.md、docs/CHAT_AGENT.md,并查看 frontend/src/App.tsx、Chat.tsx、style.css、api.ts,backend/wisegrade/chat_api.py、actions.py、models.py,相关 Alembic 迁移及 backend/tests/test_chat_agent.py。保留已有用户修改;沿用当前 React/TypeScript/Ant Design、FastAPI/SQLAlchemy、SSE 和业务 Agent 架构。旧的 docs/CODEX_CHAT_AGENT_GOAL_PROMPT.md 是上一阶段的实现提示词,本次以当前代码和以下需求为准。
|
||||||
|
|
||||||
|
## 产品行为
|
||||||
|
|
||||||
|
1. 将界面中面向用户的“对话”名称统一改为“会话”,包括左侧导航、页面标题、新建入口、空状态、提示和相关文档;保留现有路由、接口和历史数据的兼容性,不因显示名称变化破坏旧链接。
|
||||||
|
2. 每次打开“会话”界面,默认进入一个新的空白会话草稿,不自动选中上次或列表中的历史会话。草稿只存在前端状态,不能因为进入页面、刷新页面或点击“新建”而写入数据库。历史会话仍在列表中,可点击查看和继续;再次进入界面仍默认展示新的空白草稿。
|
||||||
|
3. 点击“新建”立即切换到一个无课程版本、评分批次、学生项目限定范围的空白草稿,不弹窗,也不发创建接口。输入区和范围选择在空白草稿中直接可用。已有会话若尚无第一条用户消息,其范围也可修改。用户发送第一条非空消息时,才持久化该会话和该消息;确保重复点击、请求失败或并发请求不会留下意外的空会话或创建多个会话。首次提交成功后切换到真实 ID,并继续现有 SSE 回答流程。模型回答失败时,已经成功提交的用户消息和会话仍应可恢复。
|
||||||
|
4. 限定范围在第一条消息提交前可反复修改、清除;第一条消息一旦成功提交就固定,并在界面上明确展示为只读。后端也必须拒绝已开始会话的范围修改,不能仅靠前端禁用。沿用并复核现有课程版本、批次、学生项目之间的一致性校验;选择批次或项目时正确处理其所属课程版本,清除上级范围时避免残留冲突值。历史遗留的空会话也按“未发送第一条消息”处理。
|
||||||
|
5. 会话列表增加删除操作,并有清晰的二次确认。提供后端删除接口,处理该会话的消息、Agent 运行记录、待确认操作等关联数据,防止外键错误和悬空记录;删除会话不能撤销已经确认执行的评分、导入、导出等业务操作,也不能抹掉必要的业务审计。运行中的会话应安全处理并给出明确反馈。删除当前会话后切换到新的空白草稿,列表、详情和本地缓存保持一致;删除其他会话不打断当前编辑。失败时显示错误,不假装删除成功。
|
||||||
|
6. 助手的历史回答和正在生成的回答都渲染 Markdown,至少正确显示标题、段落、列表、链接、引用块、表格和代码块,并有适合聊天框的排版、换行和长内容处理。将模型内容视为不可信输入:禁止原始 HTML 注入,限制危险链接协议,避免 XSS。教师消息仍清楚可辨。
|
||||||
|
7. 整理回答下方的“引用”:按结构化 citation 数据显示紧凑、易读的资料名、页码或幻灯片号、原文摘录和可打开的页面/图像链接;处理缺失字段、重复引用、长摘录与窄屏布局,避免原始对象、重复标题或错乱换行堆叠。引用本身应易于找到,不要被工具调用折叠区遮住。保持既有来源和证据链接的准确性。
|
||||||
|
8. 将一次回答中的工具调用过程做成类似 Codex 的可展开区:默认折叠,仅显示工具名称、执行状态和简短摘要;展开后分别查看调用参数与调用结果/错误。流式执行时可见进行中、成功、失败状态;历史消息刷新后仍可查看对应工具调用与结果。使用稳定的调用标识关联事件,不要把多个同名调用混在一起。后端若需补充 SSE 事件或持久化字段,应做有界、必要的改动,限制结果大小并避免泄露密钥、敏感配置或不必要的学生原文。待确认操作卡片继续独立可见,不能被折叠或绕过确认。
|
||||||
|
9. 一个会话正在生成回答或调用工具时,教师点击切换到其他会话,该会话必须继续在后台运行,切换回去能看到正确的实时进度和最终结果。允许多个不同会话同时运行,互不阻塞、互不串流;每个会话的输入禁用状态、运行标识、工具事件、错误和回答都按会话 ID 独立管理。会话列表显示各自的运行状态。不要让 React 组件卸载、当前选中会话变化或 SSE 客户端断开取消后端运行;刷新后应能恢复正在运行的状态,并通过重连、订阅或轮询继续取得结果。同一会话内重复发送仍按现有并发保护处理。不要把会话切换误认为停止命令。
|
||||||
|
|
||||||
|
## 实现与验证
|
||||||
|
|
||||||
|
优先复用现有接口与组件;为“首次发送才入库”、范围编辑、删除、并行会话运行及工具记录增加必要的 API、事务和 Alembic 迁移。明确失败重试及刷新后的状态:空草稿不出现在会话列表;有用户消息但模型失败的会话应出现并可继续;删除后不能继续访问其详情或确认其旧操作。不要改变 Agent 工具权限、业务写入确认边界、评分计算及检索范围隔离。
|
||||||
|
|
||||||
|
补充有意义的后端测试,覆盖首次发送的持久化时机与幂等/并发、范围修改与锁定、关联数据删除、运行中删除、历史会话兼容、工具记录恢复、切换或断开连接后原会话继续运行,以及不同会话并行且事件不串流。前端至少完成 TypeScript 与生产构建,并实际检查新建无弹窗、范围选择、历史切换、删除确认、Markdown、引用、工具折叠、运行时切换会话、多会话同时运行及移动端布局;若具备浏览器测试工具,执行交互验证。按项目现有方式运行适用测试;环境无法验证的项目说明具体原因,不把未运行的测试写成通过。
|
||||||
|
|
||||||
|
同步更新 README.md、docs/CHAT_AGENT.md 和必要的 HANDOFF.md 描述。完成后报告主要改动、实际验证命令及结果、仍有的限制。不要提交 .env、API Key、运行数据或学生原件。除确实无法从代码和本目标推断的业务矛盾外,自主完成实现,不停在普通实现选择上征求确认。
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user