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 方法。
提示
hints 底部提示区,点击某项触发 onHintClick 成为新的用户输入。
自定义渲染提示
renderHintBox 自定义提示项渲染(content / index / onHintClick)。
自定义渲染会话框
dialogueRenderConfig 覆盖头像 / 标题 / 内容 / 操作各区块,或整块自定义。
自定义渲染消息
renderDialogueContentItem 按 ContentItem.type 覆盖内容块渲染。
{"city":"Beijing"}消息数据转换
responseToMessage / chatCompletionToMessage 把 OpenAI 返回转成 Message。
流式数据转换
streamingResponseToMessage 逐块增量归约,实现流式输出。
消息编辑
user 消息编辑按钮 → editing 态用 AIChatInput 编辑器替代内容(messageEditRender),发送保存。
API 参考
AIChatDialogue
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
chats | 受控对话列表(OpenAI 消息格式) | AIDialogueMessage[] | [] |
roleConfig | 角色配置(user/assistant/system → Metadata 或 Map,对齐 Semi 必填) | AIDialogueRoleConfig | undefined |
align | 布局对齐 | 'leftRight'|'leftAlign' | 'leftRight' |
mode | 气泡模式 | 'bubble'|'noBubble'|'userBubble' | 'bubble' |
hints | 提示信息 | string[] | undefined |
selecting | 选择模式(消息前置 checkbox) | boolean | false |
showReset | 展示重置操作 | boolean | true |
showReference | 在 user 消息展示引用区(message.references) | boolean | false |
markdownRenderProps | 透传内容渲染的 MarkdownRender props | object | undefined |
renderDialogueContentItem | 按 ContentItem.type 覆盖渲染 | Record<string, Snippet<[ContentItem]>> | undefined |
renderHintBox | 自定义提示项渲染 | Snippet<[{ content; index; onHintClick }]> | undefined |
dialogueRenderConfig | 自定义会话框各区块渲染(头像/标题/内容/操作,或整块) | DialogueRenderConfig | undefined |
Events
| 事件 | 载荷 | 说明 |
|---|---|---|
onChatsChange | chats: AIDialogueMessage[] | 对话列表变更 |
onHintClick | hint: string | 点击提示 |
onSelect | selectedIds: string[] | 选择变更 |
onMessageCopy | message | 复制消息 |
onMessageDelete | message | 删除消息 |
onMessageReset | message | 重置消息 |
onMessageGoodFeedback | message | 正向反馈 |
onMessageBadFeedback | message | 负向反馈 |
onFileClick | file | 文件点击 |
onImageClick | image | 图片点击 |
onMessageEdit | message | 点击编辑操作(P1) |
onReferenceClick | item: AIDialogueReference | 引用项点击 |
Slots
| 名称 | 说明 |
|---|---|
renderDialogueContentItem | 按 ContentItem.type 覆盖渲染 |
renderHintBox | 自定义提示项渲染 |
dialogueRenderConfig | 自定义会话框各区块渲染(含整块 renderFullDialogue) |
messageEditRender | user 消息 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) | 描边/按钮悬浮过渡时长 |