Skip to content

中间件 ​

wrapProvider 返回一个应用了中间件的提供方。中间件按数组顺序执行。

ts
import { wrapProvider, loggingMiddleware, headerMiddleware, retryMiddleware } from 'vue-llm'

const ai = wrapProvider(createOpenAI({ apiKey }), [
  loggingMiddleware('chat'),
  headerMiddleware({ 'x-team': 'support' }),
  retryMiddleware(),
])

内置中间件 ​

中间件说明
loggingMiddleware(label?)记录请求、结束原因和错误
headerMiddleware(headers)添加 providerOptions.headers
retryMiddleware(options?)以退避策略重新发送失败的请求,参阅 重试
rateLimitMiddleware(options)客户端请求队列,参阅 限流

编写中间件 ​

ts
import type { Middleware } from 'vue-llm'

const redact: Middleware = {
  beforeRequest(request) {
    return {
      ...request,
      messages: request.messages.map(m =>
        typeof m.content === 'string' ? { ...m, content: m.content.replace(/\d{16}/g, '[card]') } : m),
    }
  },
}
钩子签名用途
beforeRequest(request, provider) => request改写请求
wrapChat(next, request) => Promise<result>调用提供方零次或多次(重试、队列、缓存)
afterStream(chunk, request) => chunk | null转换或丢弃流中的 chunk
onError(error, request) => Error | void替换或观察错误
onFinish(request, result) => void在流返回后调用一次

wrapChat 以洋葱模型组合:数组中的第一个中间件位于最外层。

基于 MIT 许可发布。