AIChatDialogue

AI 对话展示:消息格式以 OpenAI Response Object 为原型,content 支持 ContentItem[](output_text/input_text 走 MarkdownRender、image、file、reasoning 折叠块、function_call/tool_call 工具块、refusal、audio)。逐条 DialogueBox 渲染,ContentItemRenderer 按 type 分派、renderDialogueContentItem 可覆盖。消息流 role=log/aria-live=polite;滚动出现回到底部;选择模式 checkbox。ref 方法 selectAll/deselectAll/scrollToBottom/scrollToTop。core 提供类型全谱 + 非流式 Adapter(responseToMessage / chatCompletionToMessage)+ 流式 Adapter(streamingResponseToMessage 全功能增量状态机:sequence_number 顺序处理/无序缓冲/MAX_GAP 容错/20+ chunk 类型 delta 累积;streamingChatCompletionToMessage:choice.index 分组/processedCount 增量/tool_calls 累积),全功能对齐 Semi。

设计文档

如何引入

import { AIChatDialogue } from '@chenzy-design/svelte';

基础用法

chats(OpenAI 消息格式)+ roleConfig,逐条渲染。

助手

消息状态

status 对应三种样式:成功(completed) / 请求中(in_progress) / 失败(failed)。

助手
助手
生成中…
助手
出错了

消息展示

ContentItem 分块:思考(reasoning) / 正文 / 工具调用(function_call)。

助手

引用

message.references + showReference 在 user 消息展示引用,onReferenceClick 回调。

助手

选择

selecting 开启选择模式,onSelect 返回选中 id;selectAll / deselectAll ref 方法。

已选 0 条
助手

提示

hints 底部提示区,点击某项触发 onHintClick 成为新的用户输入。

助手

自定义渲染提示

renderHintBox 自定义提示项渲染(content / index / onHintClick)。

助手

自定义渲染会话框

dialogueRenderConfig 覆盖头像 / 标题 / 内容 / 操作各区块,或整块自定义。

My-System
My-User
My-Assistant

自定义渲染消息

renderDialogueContentItem 按 ContentItem.type 覆盖内容块渲染。

助手
调用 get_weather {"city":"Beijing"}

消息数据转换

responseToMessage / chatCompletionToMessage 把 OpenAI 返回转成 Message。

助手
助手

流式数据转换

streamingResponseToMessage 逐块增量归约,实现流式输出。

消息编辑

user 消息编辑按钮 → editing 态用 AIChatInput 编辑器替代内容(messageEditRender),发送保存。

助手

API 参考

AIChatDialogue

Props

属性说明类型默认值
chats受控对话列表(OpenAI 消息格式)AIDialogueMessage[][]
roleConfig角色配置(user/assistant/system → Metadata 或 Map,对齐 Semi 必填)AIDialogueRoleConfigundefined
align布局对齐'leftRight'|'leftAlign''leftRight'
mode气泡模式'bubble'|'noBubble'|'userBubble''bubble'
hints提示信息string[]undefined
selecting选择模式(消息前置 checkbox)booleanfalse
showReset展示重置操作booleantrue
showReference在 user 消息展示引用区(message.references)booleanfalse
markdownRenderProps透传内容渲染的 MarkdownRender propsobjectundefined
renderDialogueContentItem按 ContentItem.type 覆盖渲染Record<string, Snippet<[ContentItem]>>undefined
renderHintBox自定义提示项渲染Snippet<[{ content; index; onHintClick }]>undefined
dialogueRenderConfig自定义会话框各区块渲染(头像/标题/内容/操作,或整块)DialogueRenderConfigundefined

Events

事件载荷说明
onChatsChangechats: AIDialogueMessage[]对话列表变更
onHintClickhint: string点击提示
onSelectselectedIds: string[]选择变更
onMessageCopymessage复制消息
onMessageDeletemessage删除消息
onMessageResetmessage重置消息
onMessageGoodFeedbackmessage正向反馈
onMessageBadFeedbackmessage负向反馈
onFileClickfile文件点击
onImageClickimage图片点击
onMessageEditmessage点击编辑操作(P1)
onReferenceClickitem: AIDialogueReference引用项点击

Slots

名称说明
renderDialogueContentItem按 ContentItem.type 覆盖渲染
renderHintBox自定义提示项渲染
dialogueRenderConfig自定义会话框各区块渲染(含整块 renderFullDialogue)
messageEditRenderuser 消息 editing 态替代内容(放 AIChatInput 编辑器,P1)

Methods

属性类型说明
selectAll全选所有消息
deselectAll取消全选
scrollToBottom滚动到底部(animation?)
scrollToTop滚动到顶部(animation?)

Accessibility

ARIA role消息流 role=log;选择 checkbox;reasoning 折叠 aria-expanded;操作按钮 aria-label 走 i18n
键盘交互操作按钮 Tab 可达;提示项可点

设计变量

变量默认值用法
--cd-ai-chat-input-motion-duration var(--cd-motion-duration-fast)描边/按钮悬浮过渡时长