Skip to Content
AIGC 中央 chat 工作台AIGC 中央 chat 工作台
  • 2026-09-10 (P6) — chathome mock 占位清理 + 媒体资产 v5 文档补写:

Phase A — chathome mock 占位清理:

  • A1 PromptEditor voice 按钮接 useEndpointProbe('/api/stt/transcribe'):ready 后自动 enabled,未 ready 显示「后端 STT 联调后自动启用」徽标 + data-probe-state 属性;真实 STT 联调由 handleVoiceClick 接入(本期 console.info 占位)

  • A2 PromptToolbar auto toggle 接 useEndpointProbe('/api/chat/auto-pick'):ready 后 toggle 启用,未 ready 显示「即将上线」badge;新增 autoEnabled state + handleAutoToggleChange callback;tooltip 切换 readyHint / pendingHint 文案

  • A3 ChatSidebar hover 3-dot menu: 鼠标 hover 单个 session 项浮出「···」按钮;点击展开 rename / delete menu(onRenamewindow.prompt + sessionApi.renameSession,onDeletewindow.confirm + sessionApi.deleteSession + router.replace('/home/chat'));ChatSessionWorkspace 透传 2 个新 props

  • A4 ChatHomeWorkspace PLACEHOLDERS + SUBMIT_LABELS 字面量 i18n 化(messages/chat-session.json toolbar.greeting.zh/en + hook order 调整)

  • A5 ChatSidebar 5 个 LOCALE_FALLBACK_* 常量全部 i18n 化(session.sidebar.{defaultGroup,recentTitle,empty,hoverRename,hoverDelete,hoverMore,sessionActions} = 7 keys)

  • A6 ChatTopBar 头像 dropdown 验证 4 个 action(profile / settings / logout)全部接真实跳转,logout 走 /auth/logout(本期 window.location.href 不影响 typecheck)

  • 2026-09-10 (P8) — chat home 真实用户测试报告 v2 (TEST-REPORT.md) 缺陷修复:

    • P8-1 textarea placeholder/rows 7 mode 不切换: 修复 v1 修复未生效的根因 — ChatHomeWorkspace / ChatSessionWorkspace 把固定 placeholder 通过 props 传给 PromptEditor,父级 placeholder 非空导致内部 placeholder || modePlaceholder 选父级、屏蔽 modePlaceholder。新实现:两个 workspace 不再传 placeholder 给 PromptEditor,由 PromptEditor 内部按 mode 读取 toolbar.placeholder.{mode}(即梦 jimeng-web 对齐文案:动作模仿「上传图片后,选择模板即可生成」、数字人「请输入你希望角色说出的内容」、音乐生成「Las Vegas、美式复古爵士…」)
    • P8-2 /zh/assets 路由 404: 新增 app/[locale]/assets/page.tsx 做 server-side redirect → /workspace/asset-hub(next-intl middleware 自动注入 locale prefix)。解决从 chat 引用面板点”去资产中心创建”链接全断的问题
    • P8-3 admin/ai-models/providers/capability-models 数据缺失 / 路由 404: 新增 app/[locale]/admin/capability-models/page.tsx 复用 AdminModelsPageClient(同一张 GlobalModel 表,按 mediaType 维度过滤)。AdminModelsPageClient 内部 providerPayload.items.length 直接来自 prisma.aiProvider.findMany / prisma.globalModel.findMany,dev DB 已有 22 个 provider + 29 个 global_model + 34 个 model_revision,登录态 admin 页面应有数据
    • P8-4 数字人/动作模仿/音频 mode-aware 上传(多块 / 语义): ImageUploadStack 重构成支持多 slot (UploadSlot[]):
      • 数字人 mode:2 块(角色图 image/* + 音色 audio/*)
      • 动作模仿 mode:2 块(角色图 image/* + 动作模板 video/,image/
      • 音频 mode:1 块(音色 audio/*,语义不是”上传图片”)
      • 其他 mode:1 块通用参考图(向后兼容)
      • 单 slot mode 走 images / onImagesChange props(向后兼容),多 slot mode 走 uploadSlots props(每 slot 独立 accept / value / onChange / labelKey)
      • 新增 chat-upload-slots.ts 暴露 buildUploadSlotsForMode(mode, slotState, handlers) helper,ChatHomeWorkspace + ChatSessionWorkspace 各自挂 5 个 useState 管理 character/voice/motionTemplate/voiceReference/images
    • P8-5 PromptEditor.placeholder 改可选: 不传 placeholder 时 PromptEditor 内部按 mode 读取;保留 placeholder prop 作为外部覆盖通道(向后兼容)
    • 测试同步: chat-home.test.tsx (d-1) 新增断言「默认 mode=‘general’ 时 textarea placeholder 是『输入创意灵感,Dramagon 帮你落地成片…』、rows=3」;typecheck 0 errors,chat-session 关键 tests 120/120 PASS
    • 遗留未修(后续 commit 处理): 数字人 mode 加”快速模式”chip(P1 即梦对齐 chip 差异);send 按钮 fillPrompt 后 disabled 状态(疑似 onChange 异步问题);console IntlError 26 个 FORMATTING_ERROR(i18n key 缺)
  • 2026-09-10 (P7) — chat home 真实用户测试报告 (TEST-REPORT.md) 缺陷修复 8 项:

    • P0-1 SSE 401 鉴权(致命): EventSource 不允许设自定义 header,导致 100% 任务失败。修复:src/lib/api-auth.ts 导出 getSupabaseAuthSessionFromHeaders(headers),SSE handler 接受 ?access_token= query 并注入 x-query-access-token header 兜底;客户端 useChatSession 通过 getCachedAccessToken() 拿到 supabase access_token 拼到 query。仅 SSE handler 接受该 query,其他接口不影响
    • P0-2 chat 控件 7 mode 差异化: PromptEditor 读取 messages/{zh,en}/chat-session.json toolbar.placeholder.{mode}toolbar.rows.{mode} —— 切到音乐/数字人/动作模仿等 mode 时,placeholder 文案 + textarea rows 全部按即梦 jimeng-web 对齐 (音乐=1 行「Las Vegas…」, 数字人=4 行「请输入你希望角色说出的内容」, 动作模仿=3 行「上传图片后,选择模板即可生成」)
    • P0-3 i18n key 泄露: ChatStream.tsxuseTranslations('chatSession') 错配为 useTranslations('chatSession.toolbar'),导致 greetingFallback / greetingTemplate 解析失败,屏幕直接渲染 chatSession.toolbar.greetingTemplate 字符串
    • P1-1 图片拖拽上传 / 多图堆叠控件: 新增 ImageUploadStack 组件(src/app/[locale]/home/chat/_components/ImageUploadStack.tsx),挂在 PromptEditor textarea 上方。CSS 含多图堆叠 + dragover 边框变色 + hover 扑克牌展开 (nth-child 不同 rotation)。仅 mode ∈ {image, video, audio, digital-human, motion-copy} 时显示。即梦对应 mode 都有
    • P1-2 技能下拉 6 项: creative-skills.ts 从 3 项扩到 6 项 (poster / storyboard / character / digital-human / motion-copy / background-music),与即梦 jimeng-web 官方 6 项对齐
    • P2-1 5 维参数 metadata 按 mode schema 裁剪: ParamsPanel.tsx 新增 sanitizeMetadataForMode(mode, raw) —— music 不带 aspect/count/resolution,digital-human 不带 resolution 等;decodeAndSanitizeFromQuery 也在 decode 后立即 sanitize;ChatSessionWorkspace 在 handleSubmitPrompt / handleNextStepAction('regenerate') / handleRegenerate 三处统一调用
    • 测试同步: tests/unit/chat-session/chat-home.test.tsx skill card 数量从 3 改为 6,新增 ‘数字人 / 动作模仿 / 背景音乐’ 3 个 zh 标题断言;typecheck 0 errors

Phase B — 媒体资产 v5 文档补写 (media-asset-and-workshop.md §7 待闭环):

  • B1 content/{zh,en}/assets/index.mdx v5 文档重写:单页双栏 + 4 kind chip + 主体 sub-chip + TimelineGroup + scope 段 + 文件目录树;zh 4543 chars,en 7966 chars
  • B2 content/{zh,en}/assets/asset-detail.mdx 新建:左 60% 主预览 + 右 40% 元数据 + 历史版本时间线 + API 4 表 union + 字段展平(previewUrl/mimeType/width/height/durationMs/fileName)
  • B3 content/{zh,en}/assets/_meta.tsasset-detail 导航项 + index 改名为「媒体资产中心」/「Media asset hub」
  • B4 同步本地 docs test 契约:## Before you begin(en)/ ## 操作步骤(zh) + ## Steps 章节,内部链接 ./canvas/asset-folders 等对齐 nextra 路由

Phase C — 测试 + commit:

  • C1 新增 endpoint probe 测试(useEndpointProbe hook 返回 { ready, loading, error } 形状)
  • C2 ChatSidebar hover 3-dot menu 测试(onRename/onDelete props 契约)
  • C3 typecheck 0 errors,chat-session 关键 tests 24/24 PASS,docs tests 11/11 PASS
  • 2026-09-10 (P5) — chat-session mode-specific placeholder 控件(digital-human / motion-copy / music 上传与风格选择):
    • P5-1 新建 GlassUploadPlaceholder primitive (src/components/ui/primitives/GlassUploadPlaceholder.tsx): 轻量级 upload placeholder 组件,与 GlassAspectRatioGrid / GlassCountPicker 平级;字段标题 + 「即将上线」徽标 + dashed-border upload 区 + 接受 mime 类型 + lucide-style SVG icon;当前 disabled + console.info 留痕,真实上传联调等对应后端 worker 接入后由父级 onSelect 回调接入
    • P5-2 ParamsPanel 按 mode 渲染不同 placeholder section:
      • digital-human: 「数字人 · 上传参考」section,角色图片上传(accept=image/) + 音色文件上传(accept=audio/)
      • motion-copy: 「动作模仿 · 上传参考」section,角色图片上传 + 动作模板选择
      • music: 「音乐生成 · 风格」section,7 个音乐风格 chip placeholder(流行 / 电子 / 民谣 / 摇滚 / 古风 / 爵士 / R&B)
    • P5-3 i18n messages/{zh,en}/chat-session.json: params.digital-human.{title,characterLabel,characterDesc,voiceLabel,voiceDesc,speechLabel,speechDesc} + params.motion-copy.{title,characterLabel,characterDesc,templateLabel,templateDesc} + params.music.{title,styleLabel,styleDesc}
    • 测试: 扩展 tests/unit/chat-session/chat-p3-visual.test.tsx 到 16/16 PASS — digital-human / motion-copy / music 三 mode placeholder section 渲染验证 + image mode 不渲染 placeholder + GlassUploadPlaceholder disabled + accept 透传;typecheck 0 errors
  • 2026-09-10 (P4) — chat-session 编排 7 mode(用户反馈:目前项目这几个基础类型最小也需要支持,即梦 7 mode 对齐):
    • P4-1 ChatMode 枚举扩展: 从 3 个 (general/storyboard/character) 扩展到 9 个 (+ image / video / music / audio / digital-human / motion-copy);DB 列写入留待 schema 变更,本期仅作为前端 chip + API 入参透传
    • P4-2 chat-models.ts 加 6 张新 catalog — IMAGE_MODELS (3 个) / VIDEO_MODELS (3 个) / MUSIC_MODELS (2 个) / AUDIO_MODELS (2 个) / DIGITAL_HUMAN_MODELS (2 个) / MOTION_COPY_MODELS (2 个): 占位 model key(后续后端 worker 接入后逐步替换);每个 entry 含 name / nameEn / provider / desc / descEn / badge / multiplier / iconPath
    • P4-3 PromptToolbar dropdown 改为 7 项(综合创作 / 图片生成 / 视频生成 / 音乐生成 / 音频生成 / 数字人 / 动作模仿): 仿即梦 dropdown 原版结构,每项带专属 lucide iconPath;i18n 走 toolbar.mode.\{general,image,video,music,audio,digital-human,motion-copy\}
    • P4-4 ParamsPanel 按 mode 动态显示控件 — getModeControlVisibility(mode): 即梦对应 mode 有不同参数面板,PROTOTYPE-PERSPECTIVE.md §5 决策表:
      • image: aspect + resolution + count + dimension (无 duration)
      • video / storyboard / character: + duration
      • music / audio: 仅 model + duration (无 aspect / resolution / count / dimension)
      • digital-human: model + aspect + count + duration
      • motion-copy: model + aspect + count (无 duration / resolution / dimension)
      • general: aspect + resolution + count + dimension (无 duration)
    • P4-5 i18n: messages/{zh,en}/chat-session.json 加 6 个新 mode key(zh:图片生成/视频生成/音乐生成/音频生成/数字人/动作模仿;en:Image/Video/Music/Audio/Digital human/Motion copy),session.mode.*toolbar.mode.* 都更新;params.\{image,video,music,audio,digital-human,motion-copy\}.title 占位
    • P4-6 ChatSessionWorkspace mode init 接受 9 个值: URL ?mode= 非法值 fallback 到 ‘general’
    • 测试: 扩展 tests/unit/chat-session/chat-p3-visual.test.tsx 到 10/10 PASS — getModeControlVisibility 9 mode 单元覆盖 + modelsForMode 9 catalog 检查 + findModelByKey 跨 9 catalog 查找;typecheck 0 errors,chat-session 关键 tests 31/31 PASS
  • 2026-09-10 — chat-session 中间区”很多框”清理(用户反馈:和即梦 web 差太多):
    • P3-1 ChatRecord 去外框: 取消 .chatRecord 的 background / border / 大 padding(改为 4px 0);用户消息靠 border-left: 2px solid var(--dramagon-primary) + padding-left: 14px 轻量区分流;AI 消息完全无外框,纯流式布局。同时移除 header 顶部的双 actions(重新编辑 / 再次生成 / ···),只保留 role + 时间 + running 状态;footer 的 actions 仍然保留(用户主要的操作入口)。仿即梦 chat 流”消息直接展示,无外框”的设计语汇
    • P3-2 NextStepPlaceholder loading/error 不渲染骨架卡: 移除 v1 静态 3 张占位卡(每张只有”·“占位文本),loading/error 状态直接返回 null;只有 success(API 返回真实建议)才渲染,避免”假的”下一步建议框占用中间区
    • P3-3 ParamsPanel collapsed 整个不渲染: collapsed=true 时直接返回 null(原来还渲染 <section> + “参数设置” header + “展开”按钮),由 ChatSessionWorkspace 自行决定何时展开;避免”参数设置”显眼 header 占用主区
    • 附带: 修复 pre-existing typecheck 错误(PromptEditorProps interface 缺 autoAspect / onAutoAspectChange / activeSkill / onRemoveActiveSkill 4 字段 + tToolbar useTranslations 缺失 + ChatSessionWorkspace 重复 skills={CREATIVE_SKILLS} 属性 + onAutoAspectChange 的 aspect 类型 cast)
    • 测试: 新增 tests/unit/chat-session/chat-p3-visual.test.tsx(4/4 PASS)— 用 renderToStaticMarkup 静态契约验证:NextStepPlaceholder loading→空、ParamsPanel collapsed=true→空、ParamsPanel collapsed=false→完整 5 维控件渲染。typecheck 0 errors,chat-session 关键 tests 21/21 PASS
    • 设计意图: 仿即梦 jimeng.jianying.com/ai-tool/home 中央 chat 编辑器语汇——消息直接展示(无外框),操作紧贴内容底部,无”参数设置”显眼的 section header,无 loading 状态的”假”占位卡

title: AIGC 中央 chat 工作台 description: AIGC 中央 chat 工作台 —— Hero chat 编辑器 + 4 chip 工具栏 + 会话历史侧栏 + 资产库面板,对话式生产创作入口。

AIGC 中央 chat 工作台

配图占位

  • 页面:chat 工作台(空态 / 渲染态 / 流式响应态)
  • 状态:4 列布局、Topbar breadcrumb、ChatSidebar 会话列表、Hero + ChatRecord 消息卡片、底部编辑器、右侧资产库
  • 重点区域:56px Topbar / 239px 会话列表 / 1100px 居中编辑器 / 4 chip 工具栏 / 36×36 提交按钮 / 320px 资产库(折叠 52px)
  • 脱敏要求:隐藏用户名、会话标题正文、消息原文、模型名称、附件 URL 和任务 ID

用途

AIGC 中央 chat 工作台是登录后的对话式创作入口,承担三类任务:

  • 发起新对话 —— 在 Hero 区输入创意 prompt,自动创建空 session 后立即跳转;4 个 toolbar chip 辅助选择创作模式。
  • 回看与继续 —— 左侧会话列表按 updatedAt desc 展示最近 20 条会话;点选后跳转到对应 /home/chat/[sessionId] 渲染消息流。
  • 状态追踪 —— assistant 消息按 pending / running / completed / failed 四态渲染;运行中状态每 3 秒轮询最新进度。

页面布局遵循玻璃拟态(Glassmorphism)暗色主题,对齐 .design/dramagon-redesign/pages/chat-home.htmlchat-session.html 两份设计稿。

使用前准备

  • 必须登录:未登录访问 /home/chat/home/chat/[sessionId] 都会被中间件重定向到 /auth/login
  • 账号已配置默认生成模型:未配置时「+ 新对话」按钮可点击,但消息提交后 assistant 端会返回失败状态(pending → failed);需要先去设置中心配置默认模型。
  • 浏览器支持 ES2022:chat 路由使用 dynamic = 'force-dynamic',需要浏览器能解析顶层 await 与可选链。
  • 可选 projectId:如果当前对话要绑定到具体项目,从项目页进入 chat;通用 chat 不依赖 project,可直接通过 /home/chat 进入。

操作步骤

页面分区(4 列布局)

页面从上到下、从左到右分为 4 个区。

顶部 56px Topbar(<ChatTopBar />

与首页 / AI 工作流 / 画布一致:左侧 logo + brand,中部 breadcrumb(生成 › 新对话 或 session 标题),右侧 〔+ 新对话〕按钮 + 🔍(跳转 /skills 技能市场搜索)+ 🔔⁽³⁾(点击跳转 /notifications 消息中心,显示未读数)+ 头像菜单(点击展开 dropdown:顶部用户名 / 「个人主页」跳转 /profile / 「设置」跳转 /settings / 「退出」跳转 /auth/logout)。

左侧 239px 会话列表(<ChatSidebar />

  • 默认创作(折叠分组)+ 最近会话列表(按 updatedAt desc,最多 20 条,来自 useChatSessions()
  • 底部固定〔+ 新对话〕按钮:点击后 POST /api/chat/sessions 创建空 session,再 router.replace 跳转到 /home/chat/[newSessionId]
  • 单条会话 hover 显示「···」菜单,弹出「重命名 / 删除」操作
  • 列表右侧显示 messageCount 气泡(来自冗余计数字段)

中央主区(<ChatStream /> + <ChatRecord /> + <PromptEditor />

主区按当前状态切换三种视图:

  1. 空态(首次进入 /home/chat):Hero 区显示「你好,用户名,想创作什么?」 + 3 张技能推荐卡(短剧海报 / 创作分镜 / 角色视频)+ 底部编辑器
  2. 渲染态/home/chat/[sessionId]):顶部 session toolbar(重命名 / 新对话 / ··· + breadcrumb)+ ChatStream 消息流 + 底部编辑器
  3. 流式响应态:任意 assistant 消息处于 pendingrunning 时,ChatRecord 显示「任务响应中…」+ 闪烁 cursor;useChatSession 每 3s 重新拉取 session

右侧 320px 资产库(<AssetPanel />

  • 折叠态 52px(默认):竖排 toggle「资产库」按钮
  • 展开态 320px:主体空态 + 创建主体 CTA

底部编辑器(<PromptEditor />

1100px 居中卡片,包含:

  • textarea:3 行高度,受控输入;按 Cmd/Ctrl + Enter 也可触发提交
  • 4 chip 工具栏PromptToolbar):
    • 综合创作 ▾:真实 dropdown,3-mode 切换(综合创作 / 分镜视频 / 角色视频),选中项打 check mark
    • 自动:真实偏好浮层,含 GlassAspectRatioGrid 9-比例选择 + auto toggle(toggle disabled + 「即将上线」徽标,因为后端 auto-pick LLM 尚未接入)。点击比例后立即写入 params.aspect,下次提交优先使用
    • 技能:真实 popover,列出 3 个官方创作入口(短剧海报 / 创作分镜 / 角色视频)+ 「管理我的技能」跳转 /skills;选中后切 mode 并把 prefill 追加到 textarea
    • @ 引用:真实 popover,打开时拉取 /api/asset-hub/subjects 真实主体列表(loading / success / empty / error 4 态)。选中具体主体后写入 snippet(如「@主体: 林深」);底部「去资产中心创建」按钮跳转 /workspace/asset-hub。如果 API 失败或为空,按钮重试或引导用户去资产中心创建
  • 36×36 提交按钮(红橙渐变 var(--dramagon-submit-grad)):点击触发 useChatSession().sendMessage()

核心流程

  1. 用户访问 /home/chat → ChatHomeWorkspace 自动 POST /api/chat/sessions(body 空)→ 拿到 session.idrouter.replace('/home/chat/[id]')
  2. 进入 /home/chat/[sessionId] → ChatSessionWorkspace 调用 useChatSession(sessionId) 拉取 session + messages → 渲染 ChatStream
  3. 在底部编辑器输入创意 → 点击提交按钮 → useChatSession.sendMessage({ role: 'user', content })POST /api/chat/sessions/[id]/messages → user 消息直接 completed,同时创建 assistant 消息(默认 pending
  4. useChatSession 检测到 pending / running 状态 → 启动 3s polling → worker 端持续 PATCH /api/chat/sessions/[id]/messages 更新状态为 completedfailed
  5. 用户在 ChatStream 中看到完整消息(含 4 attachment grid + 模型 / 比例 / 分辨率 / 数量 / 时长 / 技能 meta)
  6. 用户点击「再次生成」(ChatRecord.MetaRow 内的 regenerate 按钮,已接 sendMessage role=‘assistant’ + regeneratedFromMessageId)或「重新编辑」(ChatRecord 同位置的 reedit 按钮,已接拷 message.content 到 textarea)。chat-session sub-toolbar 的「重命名」按钮接 inline edit:breadcrumb 替换为 input,Enter 提交 / Escape 取消,调用 useChatSession.renameSession(title)
  7. 用户在 ChatSidebar hover 显示「···」→ 点击删除 → 乐观更新 + DELETE /api/chat/sessions/[id],Prisma 级联删除 messages。chat-session sub-toolbar 的「更多」按钮接 dropdown:含「重命名」「复制会话 ID」「删除」三个 menu item;「删除」触发 window.confirm + deleteSession + router.replace(‘/home/chat’)

结果与状态

  • 空态视图:Hero + 3 张技能卡 + 底部编辑器,提示用户输入 prompt
  • 渲染态视图:顶部 toolbar + ChatStream(按时间顺序展示 user / assistant 消息)+ 底部编辑器
  • 消息 4 状态pending(等待中)/ running(任务响应中)/ completed(已完成)/ failed(失败 + errorMessage)
  • Markdown 渲染react-markdown + remark-gfm 白名单(p / ol / li / strong / code / h3),防 XSS
  • 4 attachment grid:自动识别 kind === 'image' 渲染 <img>kind === 'video' 渲染 <video>
  • 模型 / 比例 / 分辨率 / 数量 / 时长 / 技能 meta:ChatRecord.MetaRow 读取 message.metadata 后展示;model 通过 chat-models.ts 单源解析成展示名(如 seeddream-5.0-pro → 「图片 5.0 Pro」),skill 通过 creative-skills.ts 单源解析成中文标题。比例与数量由 PromptToolbar 自动 popover 写入;技能由技能 popover 写入;参考资产由 @ 引用 popover 写入(待 params.assetIds 接入后透传)
  • NextStep 3 张占位卡:标题分别「继续生成同主题 / 调整参数再试 / 导出当前对话」,全部带「推荐 by AI — 即将上线」徽标;LLM 建议接口尚未实现
  • 3s polling 间隔:检测到 assistant pending / running 状态时启动;状态转为终态后自动停止

权限和边界

  • 必须登录:所有 /api/chat/sessions* 路由通过 requireUserAuth() 校验,未登录返回 401
  • 会话隔离:每个用户只能看到自己的 sessions(service 内部 userId 校验,跨用户访问返回 403)
  • 项目可选session.projectId 可空;通用 chat 不依赖项目上下文,项目级 chat 通过 projectId 关联
  • 删除级联:删除 session 时依赖 Prisma onDelete: Cascade,自动删除所有关联 messages
  • 流式响应:本期简化为 polling(3s 间隔查 status),真实 SSE 待 task.runId → chat.messageId 映射落地后切换
  • title 长度session.title 限制 1-100 字符(trim 后),由 parseCreateBody / parseRenameBody 校验
  • message role 白名单user / assistant / systemuser 消息直接 completedassistant 默认 pending
  • message status 白名单pending / running / completed / failed,PATCH 时显式覆盖
  • session 默认 title"新对话",worker 完成后可 PATCH 重命名
  • 缺失功能(TODO):NextStep 真实 LLM 建议接口;4 chip 中「自动 / 技能 / @ 引用」点击行为;「再次生成」按钮触发 PATCH messages;「重新编辑」按钮触发 PATCH session 标题

常见问题

为什么进入 /home/chat 会自动跳转到带 sessionId 的 URL?

chat 是有状态工作流,所有消息必须挂在某个 session 下;自动创建空 session 让用户立即开始对话,避免先看到空白页再点按钮。

为什么 NextStep 区域显示「即将上线」?

NextStepChips 真实 LLM 建议生成接口尚未实现,本期为静态占位(详见 .learnings/FEATURE_REQUESTS.md 跟踪条目)。后续 FEAT-P1 落地后会自动接入。

为什么 chat 流式响应有 3 秒延迟?

本期简化为 polling(每 3s 重新拉取 session),未接 /api/sse task 流;切换到真实 SSE 后延迟可降到毫秒级。

toolbar 4 chip 中哪些已经接真实交互?

4 个 chip 全部接上真实交互:

  • 综合创作 ▾:3-mode dropdown(综合创作 / 分镜视频 / 角色视频)
  • 自动:偏好浮层含 GlassAspectRatioGrid 9-比例选择(auto toggle 后端未接,保持 disabled)
  • 技能:3 个官方创作入口 popover + 「管理我的技能」跳转 /skills
  • @ 引用:fetch /api/asset-hub/subjects 真实主体列表(4 态 loading / success / empty / error),选中写 snippet;底部按钮跳转资产中心

技能选中的 prefill 会塞进 textarea 但不会自动提交——用户 review 后再点发送。

为什么 assistant 消息有时直接显示「失败」?

常见原因:账号未配置默认生成模型;worker 端网络异常;模型侧限流。当前失败状态会带上 errorCodeerrorMessage 字段,可在 ChatRecord 错误卡片中查看。

中英文切换后 chat 历史标题没变?

session.title 是单语字段(Prisma String);多语言标题待后续加 session.title_zh / title_en 字段后支持。

为什么删除会话后侧栏列表不立即更新?

删除走乐观更新 + 后端 DELETE;如果网络失败会回滚(侧栏列表恢复显示被删项);通常情况下 200ms 内可见列表更新。

相关文档

  • 页面路由:src/app/[locale]/home/chat/page.tsx + src/app/[locale]/home/chat/[sessionId]/page.tsx
  • 工作区组件:src/app/[locale]/home/chat/_components/ChatHomeWorkspace.tsx + ChatSessionWorkspace.tsx
  • 子组件:ChatTopBar.tsx / ChatSidebar.tsx / ChatStream.tsx / ChatRecord.tsx / PromptEditor.tsx / AssetPanel.tsx / NextStepPlaceholder.tsx
  • 数据 hooks:src/app/[locale]/home/chat/_hooks/useChatSession.ts + useChatSessions.ts
  • API 路由:src/app/api/chat/sessions/route.ts + [sessionId]/route.ts + [sessionId]/messages/route.ts
  • Service:src/lib/chat-session/service.tscreateChatSession / listChatSessions / getChatSession / renameChatSession / deleteChatSession / appendMessage / updateMessageStatus
  • 类型:src/lib/chat-session/types.ts
  • Prisma:prisma/schema.prisma ChatSession (line 2533) + ChatMessage (line 2559)
  • i18n:messages/{zh,en}/chat-session.json(24 keys:session.{title|empty|newChat|rename|delete|deleteConfirm|more|copySessionId|assetPanel} / message.* / toolbar.* / params.* / nextStep.*
  • 设计稿:.design/dramagon-redesign/pages/chat-home.html + chat-session.html;SSOT:.design/dramagon-redesign/docs/reference/jimeng-web/DESIGNER-BRIEF.md §6 B-06
  • 后端能力升级草案:.learnings/FEATURE_REQUESTS.md(FEAT-P1 NextStep LLM 建议)

更新记录

  • 2026-09-10 (P6) — chathome mock 占位清理 + 媒体资产 v5 文档补写(见上方)
  • 2026-09-10 (P8) — chat home 真实用户测试报告 v2 (TEST-REPORT.md) 缺陷修复(见上方)
  • 2026-09-10 (P7) — chat home 真实用户测试报告 (TEST-REPORT.md) 缺陷修复 8 项(见上方)
  • 2026-09-10 (P5) — chat-session mode-specific placeholder 控件(见上方)
  • 2026-09-10 (P4) — chat-session 编排 7 mode(见上方)
  • 2026-09-10 — chat-session 中间区”很多框”清理(见上方)
  • 2026-09-09 —— chat 工作台迭代:
    • 抽取 @/lib/creative-skills.ts 单源(chathome hero 卡片 / chat-session 技能 chip 共用)

    • ChatRecord.MetaRow 解析 model key → 展示名(接 findModelByKey / resolveModelDisplayName

    • ChatRecord.MetaRow 解析 skill id → 标题(接 findCreativeSkill),新增 message.skillMeta i18n key

    • PromptToolbar 接 3-mode dropdown / 技能 popover / @ 引用 popover(chip 已不再是静态占位)

    • P0-b:自动 popover 接 GlassAspectRatioGrid 9-比例选择(auto toggle 保留 disabled 占位);@ 引用 popover fetch /api/asset-hub/subjects 真实主体列表 4 态(loading/success/empty/error);ChatSessionWorkspace 透传 autoAspect + onAutoAspectChange 给 PromptEditor

    • P0-c:chat-session sub-toolbar 「重命名」按钮接 inline edit(breadcrumb 替换为 input,Enter 提交 / Escape 取消 / onBlur 提交,调 useChatSession.renameSession(title));「更多」按钮接 dropdown menu(重命名 / 复制会话 ID / 删除,删除走 window.confirm + deleteSession + router.replace);新增 i18n:session.more / session.copySessionId

    • P0-d:ChatTopBar 「搜索」接 router.push(‘/skills’);「消息」接 router.push(‘/notifications’);头像接 click dropdown menu(用户名 / 个人主页 / 设置 / 退出,前三项 router.push 对应路径,退出走 /auth/logout)

    • P1-1:NextStepPlaceholder 卡片点击接 onNextStepAction:regenerateuseChatSession.sendMessage({ role: 'assistant', regeneratedFromMessageId });openParams 展开 ParamsPanel;export 把最后 20 条消息写到剪贴板

    • P1-2:左侧 ChatSidebar 每条会话显示三段:title + lastMessage 预览(11px 灰字,> 28 字截断) + messageCount badge(> 99 显示 99+,count=0 不显示)

    • P1-3:右侧 AssetPanel 默认折叠(保留 test 契约),但 fetch /api/asset-hub/subjects 成功且 items.length > 0 时自动展开;用户手动 toggle 后 userToggledRef 标 true,不再 auto-expand

    • P1-4:chathome hero skill 卡片的「官方」红章文案走 i18n(session.officialBadge),不再硬编码 zh/en

    • P1-5:ChatSidebar 每条会话显示 messageCount pill(> 99 → 99+,count=0 不渲染),aria-label 跟随 locale(zh:「X 条消息」 / en:「X messages」)

    • P1-6:ChatTopBar 的 GlassSkillTag 状态从 used 改为 official,让 chathome hero skill 选中后顶部红章与 hero 卡的「官方」红章视觉呼应

    • P1-7:PromptEditor 在 textarea 上方新增红色 pill chip(「使用中技能: skill_title ×」),与顶部 ChatTopBar 红章呼应,点 × 清 params.skill(两端同步消失)

    • P2-2:PromptToolbar 内 2 处 window.location.href 改为 router.push(技能 popover「管理我的技能」→ /skills + 引用 popover「去资产中心创建」→ /workspace/asset-hub),避免整页 reload,改为 SPA 内导航

    • P2-3:chat-session sub-toolbar breadcrumb 旁新增灰色 meta <span> 显示「更新时间 · 用户轮数」(locale 格式化 + user messages 计数),data-testid=chat-session-toolbar-meta

    • P2-4:chat-session sub-toolbar 新增 mode indicator pill(灰底边框小标签,显示当前 ChatMode 中文名:综合创作 / 分镜视频 / 角色视频)

    • P2-5:P2-4 的 mode pill 文案走 i18n(session.mode.{general,storyboard,character}),不再硬编码 zh/en

    • P2-6:右侧 AssetPanel 的 5 处文案(折叠 toggle 标题 / 空态主标题 / 空态描述 / 创建主体按钮 / 「全部」tab)全部走 i18n(session.assetPanel.*),删除 5 个 LOCALE_FALLBACK_* 常量

    • P2-8:ChatStream 空态(无消息时)在 greeting + subtitle 下方增加 3 列 grid 渲染 skill 卡片(复用 heroSkillCard 等现有 CSS class),用户进入 chat-session 但还没发消息时可直接选 skill 起手,点击触发 setMode + insert prefill(不自动发送,等用户 review)

    • P2-9:PromptEditor activeSkill chip 的 hardcoded zh/en(「使用中技能」/「移除技能上下文」/「Active skill」/「Remove skill context」)改走 i18n(toolbar.activeSkillLabel + toolbar.activeSkillRemove),删除 P1-7 残留的硬编码

    • P2-11:清扫残余 hardcoded zh/en:ChatSidebar messageCount badge 的 aria-label 走 session.messagesCount;ChatStream greeting fallback / template 走 toolbar.greetingFallback + toolbar.greetingTemplate({name} 占位符在 JS 端 .replace 替换),让屏幕阅读器在 zh/en 切换下读出对应单语文案

  • 2026-09-08 —— chat 工作台首次落地(commit bdfa47a6),包含 Prisma ChatSession / ChatMessage 模型、service 7 个方法、API 7 条路由、4 列布局工作台、底部编辑器、NextStep 占位、useChatSession 3s polling。
Last updated on