Skip to content

useAiChat 数据响应流

@yh-ui/hooks 提供了极其强大的 纯逻辑 Headless Hooks 抽象 系列。其中以 useAiChatuseAiConversations 为核心的数据引擎更是做到了完全与视觉解耦。

传统情况中,如果你需要接入后端模型接口,还要自己写网络 Fetch、维护 Token 流解析、实现历史记录与中止操作(Abort),不仅恶心而且极难做到组件通用。

现在,你只需注入一个你自定义的 request 函数接口给 useAiChat 挂靠,即可开箱即大地拿到所有 AI 全链路状态。

基础请求接管

利用纯纯的 Promise 完成接管和状态隔离,再也不需要手动 refloading = true 甚至自己去维护 messages.push。这一切已经在内部完全闭环。

极简接管

原生事件流(Stream)与随时中断

市面上诸多模型为了更低的首字节延时(TTFB)会采用 text/event-stream。 只要让你的 request 变成 AsyncGenerator(异步生成器返回 yield),也就是一个大文本块块。这个 Hook 内部会自动为你转化为精美的连贯打字流!

并在调用 stop() API 的同时利用原生 AbortController 立即拦截接口和后续 DOM 的渲染。

流式生成与强制中止

会话侧边状态漫游 (useAiConversations)

如果你要写一整个类似 ChatGPT 的宏大知识库界面。除了单聊天窗外的左侧抽屉记录一定跑不掉。 请使用 useAiConversations 快速获取一套开箱即用的会话列表管理能力。

我的会话
左侧由 useAiConversations 管理
历史会话无头管理

API Reference

useAiChat Options

参数说明类型
initialMessages默认消息列表AiChatMessage[]
request请求适配器,签名为 (message, history, abortSignal) => AsyncGenerator | Promise<string | Response>Function
idGenerator自定义消息 ID 生成器() => string
parserSSE / 流式块解析器,用于适配不同厂商的返回格式StreamChunkParser
typewriter是否启用内置打字机输出效果boolean
charsPerFrame打字机每帧输出字符数number
systemPrompt自动插入到历史最前面的系统 Promptstring
onError错误回调(err) => void
onFinishassistant 消息完成时的回调(message) => void

useAiChat Returns

你可以从中解构整套会话状态与操作方法。

返回值说明类型
messages双向绑定的会话历史列表Ref<AiChatMessage[]>
isGenerating是否正在生成Ref<boolean>
isSendingisGenerating 的语义别名ComputedRef<boolean>
sendMessage发送消息并触发 request(content: string) => Promise<void>
stop中断当前生成并更新消息状态() => void
clear清空全部会话消息() => void
removeMessage删除指定消息(id: string) => void
updateMessage更新指定消息的内容或状态(id: string, patch: Partial<AiChatMessage>) => void

Released under the MIT License.