官方包 · 实时功能组件
给 Vercel AI SDK 的可续传 AI 聊天流
useChat() 的 transport:回答通过频道流式输出,断线也不会丢失,刷新后能接续,并送到每个标签页和设备。支持 AI SDK 5、6 和 7。
@hibira-io/ai-sdknpm ↗GitHub ↗
- 适用任何 useChat:React、Vue、Svelte 和 Angular。
- API route 立即响应,回答在后台写到完,不需要另外搭建 Redis 或流存储。
- 把文字片段合并成小于 3,500 bytes 的事件,并用 resume: true 从频道历史补上(Hobby 及以上套餐)。
登录后,示例代码会自动填入您的集群主机。 登录
安装
npm install @hibira-io/ai-sdk pusher-js pusher配置
'use client'; import { useChat } from '@ai-sdk/react'; import Pusher from 'pusher-js'; import { HibiraChatTransport } from '@hibira-io/ai-sdk'; const pusher = new Pusher(process.env.NEXT_PUBLIC_HIBIRA_KEY!, { cluster: 'hkg', wsHost: 'ws.hibira.io', channelAuthorization: { endpoint: '/api/hibira/auth', transport: 'ajax' }, }); const transport = new HibiraChatTransport({ pusher, api: '/api/chat' }); export function Chat({ id, initialMessages }) { const { messages, sendMessage } = useChat({ id, messages: initialMessages, transport, resume: true }); // render messages as usual }使用
// app/api/chat/route.ts import { after } from 'next/server'; import { streamText, convertToModelMessages } from 'ai'; import Pusher from 'pusher'; import { publishUIMessageStream } from '@hibira-io/ai-sdk/server'; const pusher = new Pusher({ appId: process.env.HIBIRA_APP_ID!, key: process.env.NEXT_PUBLIC_HIBIRA_KEY!, secret: process.env.HIBIRA_SECRET!, host: 'ws.hibira.io', useTLS: true, }); export async function POST(req: Request) { const { id, messages, runId } = await req.json(); const result = streamText({ model, messages: await convertToModelMessages(messages) }); after(() => publishUIMessageStream(pusher, { chatId: id, runId, stream: result.toUIMessageStream({ originalMessages: messages, onFinish: ({ messages }) => saveChat(id, messages) }), }), ); return Response.json({ runId }, { status: 202 }); }
开始之前
- 应用密钥只会在创建应用或轮换密钥时显示一次。请只放在服务器上,不要放进浏览器或游戏的构建包。
- transport 会订阅 private-ai-chat-{chatId}。你的授权端点应该只允许聊天的所有者订阅这个频道。
- 在 app 设置中开启频道历史(Hobby 及以上套餐),刷新后的页面才能接续还在写的回答。
请使用控制台中应用的 Key;Secret 只放在你的服务器上。频道、事件与授权端点的用法与 Pusher 完全相同。 免费创建账号 →