chat-element-streaming
当 ai-shifu 聊天流从 block 粒度向 element 粒度演进,或历史记录与 SSE 渲染一致性出现问题时使用本技能。统一 element_bid 渲染键、兼容旧字段并收敛 AskBlock 归并逻辑。
适合你,如果正在重构聊天流渲染逻辑或修复SSE历史记录问题
/ 通过 npx 安装 校验哈希
npx oh-my-skill add lngyneric/ai-coach/chat-element-streaming/ 通过 bash 安装
curl -fsSL https://oh-my-skill.com/install.sh | bash -s -- lngyneric/ai-coach/chat-element-streaming/ 已经装过?验证本机副本,不用重装
npx oh-my-skill verify lngyneric/ai-coach/chat-element-streaming安装目标可用 --agent / --scope 或 --to 明确指定;省略时只会在唯一已存在的 agent 目录上自动选择,零命中或多命中会停止并提示。content_hash 缺失或不一致均拒装。
0GitHub stars
~1.3K上下文体积 · 单文件
索引托管
怎么用
技能原文 SKILL.md
Element 粒度聊天流
核心规则
- 使用
element_bid作为聊天项稳定渲染 key。 - 在数据归一化入口保留
generated_block_bid、parent_block_bid兼容字段。 - 历史 records 与实时 SSE 共用同一条转换路径,产出一致的
contentList。
工作流
- 接收 SSE
type=element时按element_bid覆盖更新,不做重复拼接。 - 对追问流
element_type=answer,让AskBlock按答案流增量更新。 - 学习记录返回
element_type=ask/answer时,归并到anchor_element_bid对应的AskBlock.ask_list。 - AskBlock 落位以接口返回顺序(
sequence)为准,不强制锚定在 anchor 内容后。 - 在统一归一化层回填旧字段,避免兼容逻辑散落到渲染层。
- 调试预览链路若切换到
type=element+type=done,需按element_bid覆盖更新元素项,并将done作为唯一收尾信号。 - SSE 包体字段需同时兼容
type/event_type与content/data两套命名,避免后端灰度期间前端丢流。 - 当调试流未返回
done但出现多个element_bid时,以“新 element 到达”作为前一个 element 的结束信号,并立即补一个追问块(like-status/ask入口)。 - 学习页、预览页、调试页处理
type=done时,优先读取done.is_terminal判断它是“当前分段结束”还是“真正终态”;字段缺失时才回退到旧的前端推断。 done收尾补追问块时,锚点应取“最近的可操作 element(content 或 interaction)”,否则最后一项为 interaction 时会漏补追问块。- 若后端出现
done与后续element乱序,边界判定不能只依赖 streaming ref,需增加“从当前列表尾部推断上一个可操作 element”的兜底逻辑,避免中间 element 漏补追问块。 - 若后端直接关闭预览 SSE,前端应把“最后一个可操作 element 不是 interaction”视为可续拉信号,自动发起下一次预览请求;但若最近一次
done.is_terminal=true,则必须停止续拉。 - 预览链路收到
type=done时,不要默认立即stopPreview;仅当done.is_terminal=true才关闭当前预览流。关闭后若最后一个可操作块不是interaction,应继续拉取下一段流。 - 当需要在
ai-shifu本地稳定复现runSSE 问题时,优先在getRunMessage层增加显式调试开关;mock_run_sse_fixture=stuck回放由data.json截断得到的卡住 fixture,mock_run_sse_fixture=test回放mock-fixtures/test/data.json的完整测试流,并保持message/readystatechange/close契约不变;不要把页面组件改成只兼容 mock 数据。 - 学习页
run流若在 3 秒内没有任何新事件,前端应在消费层主动判定为超时:关闭当前流与 loading 状态、向items/elementList追加type=error的错误项,并复用同一份国际化文案弹 destructive toast。 - 听课模式
Slide遇到超时错误时,只把它当作“关闭内部 loading overlay”的信号,不要把错误项渲染成单独一页;用户侧错误提示统一交给 toast。 - 阅读模式同样不要把超时错误项渲染进正文列表;错误项可以保留在内部状态里供控制逻辑使用,但用户可见反馈只保留 toast。
- 阅读模式的流式点状 loading 应作为列表尾部状态渲染在最后一个 element 后面,不要绑定到当前流式 element 内部,否则
html视觉 marker 更新时容易把 loading 插到两个 element 的视觉边界之间;但当loading思考占位仍在列表中时,不要同时显示点状 loading。
备注
- 当同一答案分多次快照回传且
element_bid相同,必须覆盖同一条消息。 - 字段重构从
*BlockBid*到*ElementBid*后,消费方解构与依赖数组必须同步改名。
按 Apache-2.0 许可原样转载,未经改动 · 在 GitHub 查看 →
评论
登录即可评论;带「已验证安装」的,是发布者名下有本店的安装或持有记录。
…