Skip to content

useAIStream

useAIStream 基于 useSSE 封装,面向 AI 应用场景,提供了 打字机效果、思考链、工具调用 等一整套流式能力。

AI 流式聊天演示

💡 注意useAIStream 需要对接真实 AI API(如 OpenAI、Claude 等)。以下演示通过模拟流式输出展示效果,包含思考链阶段和打字机内容输出,实际使用时替换 start() 中的 URL 即可。

AI 流式聊天演示(含思考链 & 打字机效果)

基础用法

typescript
import { useAIStream } from '@yh-ui/request'

const {
  loading,
  content, // 原始文本
  text, // 解析后的当前文本
  thinking, // 思考内容
  toolCalls, // 工具调用列表
  done,
  error,
  start,
  stop,
  reset
} = useAIStream({
  onText: (full, delta) => {
    console.log('新增内容:', delta)
  },
  onThinking: (t) => {
    console.log('思考中:', t)
  },
  onToolCall: (tools) => {
    console.log('工具调用:', tools)
  }
})

// 发起 AI 请求
start({
  url: '/api/ai/chat',
  method: 'POST',
  data: {
    model: 'gpt-4',
    messages: [{ role: 'user', content: '帮我写一段欢迎文案' }],
    stream: true
  }
})

返回值

typescript
const result = useAIStream(options)
字段类型说明
loadingRef<boolean>是否正在接收
contentRef<string>原始流式文本
textRef<string>解析后的纯文本(追加或覆盖)
thinkingRef<string>思考链内容
toolCallsRef<AIStreamMessage['toolCalls']>工具调用列表
doneRef<boolean>是否完成
messagesRef<SSEMessage[]>底层 SSE 消息
errorRef<Error | undefined>错误对象
start(options?)启动 AI 流式请求
stop()停止流式请求
reset()重置所有状态

配置项

useAIStream(options) 的配置项继承自 useSSE,并增加了以下 AI 特有配置:

属性类型默认值说明
parseAIMessagebooleantrue是否解析 AI 结构化消息(JSON 块)
appendModebooleantrue追加模式:true追加,false覆盖
onText(text: string, delta: string) => void收到新文本内容时的回调
onThinking(thinking: string) => void收到思考链内容时的回调
onToolCall(toolCalls: AIStreamMessage['toolCalls']) => void收到工具调用时的回调

与 useSSE 的关系

  • useSSE:负责 流式传输协议本身(SSE / fetch 流);
  • useAIStream:在其之上解析 AI 模型返回格式,并提供更友好的状态字段。

当你只需要处理通用日志/进度流时,使用 useSSE 即可;当你对接 AI 模型(OpenAI、Claude 等)时,推荐使用 useAIStream

Released under the MIT License.