Skip to content

useAiStream 流式请求引擎 🌊

useAiStream 是专为 AI 流式输出设计的底层引擎 Hook,内置:

  • 🏭 多厂商适配器(OpenAI / DeepSeek / Claude / Gemini / 文心 / 通义)
  • 🖋️ 打字机节流(基于 requestAnimationFrame
  • 🛑 AbortController 取消

🖊️ 打字机效果演示(本地 AsyncGenerator)

通过 AsyncGenerator 模拟真实 AI 输出节奏,无需网络或 API Key,即可体验流式渲染。

Vue3 Composition API 的核心优势是什么?
选择一个问题,点击「生成回答」体验打字机效果 ✨

🌐 真实 SSE 接口接入

request 适配器替换为真实 API,传入你的 Key 即可实现生产级流式对话。

📋 替换 YOUR_API_KEY 为你的 SiliconFlow / OpenAI / DeepSeek 等兼容 Key,即可实现真实流式输出。

👉 支持: OpenAI · DeepSeek · SiliconFlow · 讯飞星火 · 月之暗面 · MiniMax 等所有 OpenAI SSE 格式

API

Options

参数类型默认值说明
request(query, signal, ...args) => AsyncGenerator | Promise<Response>必填请求适配器,支持传递 AbortSignal
parserStreamChunkParserplainTextParser流块解析器(多厂商适配)
typewriterbooleantrue是否启用打字机效果
charsPerFramenumber3每帧输出字符数(控制速度)
onUpdate(chunk, fullContent) => void-每次增量更新回调
onFinish(content) => void-完成回调
onError(err) => void-错误回调

返回值

字段类型说明
isStreamingRef<boolean>是否正在流式接收
currentContentRef<string>当前已接收的完整内容
fetchStream(query, ...args) => Promise<void>触发请求
stop() => void中止请求

内置 Parser

Parser适用厂商说明
openaiParserOpenAI、DeepSeek、SiliconFlow、讯飞星火兼容 OpenAI SSE 格式
claudeParserAnthropic Claude兼容 Claude SSE 格式
geminiParserGoogle Gemini兼容 Gemini 格式
ernieParser百度文心一言兼容文心 SSE 格式
qwenParser阿里通义千问(直连版)兼容通义 SSE 格式
plainTextParserAsyncGenerator 原始文本yield 字符串直接追加

接入其他 AI 平台

ts
import { useAiStream, openaiParser } from '@yh-ui/hooks'

// ── SiliconFlow(支持 Qwen / DeepSeek / GLM 等开源模型)──
const { fetchStream } = useAiStream({
  parser: openaiParser,
  request: async (query, signal) =>
    fetch('https://api.siliconflow.cn/v1/chat/completions', {
      method: 'POST',
      signal,
      headers: {
        Authorization: 'Bearer YOUR_SF_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'Qwen/Qwen2.5-7B-Instruct',
        stream: true,
        messages: [{ role: 'user', content: query }]
      })
    })
})

// ── DeepSeek ──
const { fetchStream: deepseekStream } = useAiStream({
  parser: openaiParser,
  request: async (query, signal) =>
    fetch('https://api.deepseek.com/chat/completions', {
      method: 'POST',
      signal,
      headers: {
        Authorization: 'Bearer YOUR_DEEPSEEK_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        model: 'deepseek-chat',
        stream: true,
        messages: [{ role: 'user', content: query }]
      })
    })
})

Released under the MIT License.