聊天组件包揽了用户与模型之间的一切。用一个 respond 函数创建 NuiChatSession,其余交给 <nui-chat>:它以 Markdown 流式呈现回复,自动向下跟随,直到用户向上滚动为止;回复到达期间,发送按钮会变成停止按钮。
respond 可以返回文本、Promise、async function* 或 Observable,因此任何 API 都能接入。除了文本,回复还可以带有模型的推理过程、工具调用(由你的模板绘制)以及所引用的来源。nuiEventStream 可读取大多数模型 API 以流式发送的服务器发送事件。
什么都不会丢失:重试的回复或编辑过的问题会成为旧版本旁边的新版本,对话会保留每一个分支。屏幕阅读器会在每条回复完成后才播报,而不是逐词播报。
助手
点击建议即可开始对话。回复以 Markdown 流式呈现;你可以停止、重试、评价回复,或编辑自己的问题。attach 接收选择、粘贴或拖放的文件。
推理、工具与来源
增量数据会把模型的推理过程、工具调用和来源加入回复。nuiChatTool 把天气工具绘制成卡片;其他工具连同输入和输出一起折叠起来。
从服务器流式传输
nuiEventStream 读取 OpenAI 风格的事件流,NuiChatError 会显示其中的消息。all() 会保存整个对话,包括所有版本。