middleware

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 23, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

包 middleware 提供 LLM 请求处理的中间件链机制,支持在请求发送到 上游模型服务之前和响应返回之后插入可组合的横切逻辑。

概述

本包采用经典的 Handler / Middleware 函数式组合模式,将日志、超时、 重试、缓存、限流、追踪等横切关注点从业务逻辑中解耦。同时提供 RequestRewriter 改写器链,用于在请求发送前进行参数清理与转换。

核心接口

  • Handler:func(ctx, *ChatRequest) (*ChatResponse, error), 表示一个请求处理函数。
  • Middleware:func(Handler) Handler,表示一个中间件装饰器。
  • Chain:中间件链,支持 Use / UseFront / Then 组合与执行。
  • RequestRewriter:请求改写器接口,包含 Rewrite 与 Name 方法。
  • RewriterChain:改写器链,按顺序执行多个 RequestRewriter。
  • MetricsCollector / Cache / BlockingRateLimiter / Validator: 各中间件依赖的辅助接口。

主要能力

  • 日志记录:LoggingMiddleware 记录请求模型、耗时与 Token 用量。
  • 超时控制:TimeoutMiddleware 为请求添加 context 超时。
  • 自动重试:RetryMiddleware 支持指数退避重试。
  • 响应缓存:CacheMiddleware 基于 Cache 接口缓存响应。
  • 速率限制:RateLimitMiddleware 基于阻塞式限流器等待。
  • 指标采集:MetricsMiddleware 收集请求耗时与 Token 统计。
  • 分布式追踪:TracingMiddleware 集成 Tracer 接口。
  • Panic 恢复:RecoveryMiddleware 捕获 panic 并转为错误。
  • 请求验证:ValidatorMiddleware 在处理前校验请求合法性。
  • 请求改写:EmptyToolsCleaner 等改写器清理无效参数。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BlockingRateLimiter

type BlockingRateLimiter interface {
	Wait(ctx context.Context) error
}

BlockingRateLimiter 定义阻塞式速率限制接口. 与 llm.RateLimiter(非阻塞式 Allow/AllowN/Reset)不同, BlockingRateLimiter 在超出速率时阻塞等待,适用于中间件链场景.

type Cache

type Cache interface {
	Key(req *llmpkg.ChatRequest) string
	Get(key string) (*llmpkg.ChatResponse, bool)
	Set(key string, resp *llmpkg.ChatResponse)
}

Cache 定义缓存接口.

type Chain

type Chain struct {
	// contains filtered or unexported fields
}

Chain 表示中间件链.

func NewChain

func NewChain(middlewares ...Middleware) *Chain

NewChain 创建新的中间件链.

func (*Chain) Len

func (c *Chain) Len() int

Len 返回链中的中间件数量.

func (*Chain) Then

func (c *Chain) Then(h Handler) Handler

Then 用链中的所有中间件包裹一个处理器. 先在锁内拷贝中间件切片,再在锁外执行中间件包裹, 防止中间件回调 Use() 时产生死锁。

func (*Chain) Use

func (c *Chain) Use(m Middleware) *Chain

Use 将中间件添加到链中.

func (*Chain) UseFront

func (c *Chain) UseFront(m Middleware) *Chain

UseFront 在链的前部添加中间件.

type EmptyToolsCleaner

type EmptyToolsCleaner struct{}

EmptyToolsCleaner 空工具列表清理器 当请求的 Tools 为空时,清除 ToolChoice 字段 避免上游 API 返回 400 错误(OpenAI 不允许空 tools 数组时设置 tool_choice)

func NewEmptyToolsCleaner

func NewEmptyToolsCleaner() *EmptyToolsCleaner

NewEmptyToolsCleaner 创建空工具清理器

func (*EmptyToolsCleaner) Name

func (r *EmptyToolsCleaner) Name() string

Name 返回改写器名称

func (*EmptyToolsCleaner) Rewrite

Rewrite 执行改写

type Handler

type Handler func(ctx context.Context, req *llmpkg.ChatRequest) (*llmpkg.ChatResponse, error)

Handler 处理一个请求并返回一个响应.

type MetricsCollector

type MetricsCollector interface {
	RecordRequest(model string, duration time.Duration, success bool)
	RecordTokens(model string, tokens int)
}

MetricsCollector 定义指标收集接口.

type Middleware

type Middleware func(next Handler) Handler

Middleware 将处理器包裹并添加额外功能.

func CacheMiddleware

func CacheMiddleware(cache Cache) Middleware

CacheMiddleware 缓存响应.

func HeadersMiddleware

func HeadersMiddleware(headers map[string]string) Middleware

HeadersMiddleware 添加自定义头到请求元数据.

func LoggingMiddleware

func LoggingMiddleware(logger func(format string, args ...any)) Middleware

LoggingMiddleware 记录请求/响应详情.

func MetricsMiddleware

func MetricsMiddleware(collector MetricsCollector) Middleware

MetricsMiddleware 收集请求的指标.

func RateLimitMiddleware

func RateLimitMiddleware(limiter BlockingRateLimiter) Middleware

RateLimitMiddleware 应用速率限制.

func RecoveryMiddleware

func RecoveryMiddleware(onPanic func(any)) Middleware

RecoveryMiddleware 从 panic 中恢复.

func RetryMiddleware

func RetryMiddleware(maxRetries int, backoff time.Duration) Middleware

RetryMiddleware 重试失败的请求. 只重试可重试的错误(*types.Error 且 Retryable=true),不可重试的错误立即返回。

func TimeoutMiddleware

func TimeoutMiddleware(timeout time.Duration) Middleware

TimeoutMiddleware 对请求添加超时.

func TracingMiddleware

func TracingMiddleware(tracer llmpkg.Tracer) Middleware

TracingMiddleware 添加分布式追踪.

func TransformMiddleware

func TransformMiddleware(reqTransform func(*llmpkg.ChatRequest), respTransform func(*llmpkg.ChatResponse)) Middleware

TransformMiddleware 转换请求/响应.

func ValidatorMiddleware

func ValidatorMiddleware(validators ...Validator) Middleware

ValidatorMiddleware 在处理前对请求进行验证.

type PanicError

type PanicError struct {
	Value any
}

RecoveredPanic 表示已恢复的 panic.

func (*PanicError) Error

func (e *PanicError) Error() string

type RequestRewriter

type RequestRewriter interface {
	// Rewrite 改写请求
	// 返回改写后的请求和错误(如果改写失败)
	Rewrite(ctx context.Context, req *llmpkg.ChatRequest) (*llmpkg.ChatRequest, error)

	// Name 返回改写器名称(用于日志和调试)
	Name() string
}

RequestRewriter 请求改写器接口 用于在请求发送到上游 API 之前进行参数清理和转换

type RewriterChain

type RewriterChain struct {
	// contains filtered or unexported fields
}

RewriterChain 改写器链 按顺序执行多个改写器

func NewRewriterChain

func NewRewriterChain(rewriters ...RequestRewriter) *RewriterChain

NewRewriterChain 创建改写器链

func (*RewriterChain) AddRewriter

func (c *RewriterChain) AddRewriter(rewriter RequestRewriter)

AddRewriter 动态添加改写器

func (*RewriterChain) Execute

Execute 执行改写器链 按顺序执行所有改写器,任何一个失败则中断并返回错误

func (*RewriterChain) GetRewriters

func (c *RewriterChain) GetRewriters() []RequestRewriter

GetRewriters 获取所有改写器(用于调试)

type Validator

type Validator interface {
	Validate(req *llmpkg.ChatRequest) error
}

Validator 定义请求验证接口.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL