Skip to content

v0.3 插件描述符、管线扩展与文档国际化 - #5

Merged
Yukk1o merged 11 commits into
masterfrom
dev
May 29, 2026
Merged

v0.3 插件描述符、管线扩展与文档国际化#5
Yukk1o merged 11 commits into
masterfrom
dev

Conversation

@Yukk1o

@Yukk1o Yukk1o commented May 29, 2026

Copy link
Copy Markdown
Owner

Summary

  • 新增插件描述符系统(PluginDescriptor / Describable),支持优先级、失败策略、超时、配置 Schema
  • 新增 StreamPostProcessor 接口,支持流式响应后处理
  • 请求深拷贝隔离 + TraceID 全链路追踪
  • 启动时自动生成 manifest.json
  • CORS 中间件 + STRAIT_CORS_ORIGINS 环境变量
  • 文档中英双语拆分(docs/en/ + docs/zh/

插件系统

  • api.PluginDescriptor — 插件元信息描述(ID、类型、优先级、失败策略、超时、配置 Schema)
  • api.Describable — 可选接口,插件实现 Descriptor() 声明自身
  • api.FailMode — strict / skip / fallback 三种失败策略,由调度器统一处理
  • api.StreamPostProcessor — 流式后处理接口,直接操作 StreamChunk channel
  • api.CopyChatRequest() — 管线入口深拷贝请求,预处理器修改不影响原始 payload
  • api.WithTraceID() / api.TraceIDFrom() — TraceID 全链路上下文传递
  • api.NewPluginError() + ErrCode 常量 — 结构化错误处理
  • Loader 支持 priority / fail_mode YAML 配置覆盖 + DefaultConfig 合并

管线执行

  • pipelineStep 统一 Guard / Pre / Post 的执行模型
  • executeSteps() 支持单插件超时(context.WithTimeout)和上下文取消检测
  • 流式后处理链式包装(wrapStreamPostProcess
  • Manager.Sort() 按优先级排序所有插件
  • Manager.Manifest() 汇总已加载插件描述符

服务端

  • CORS 中间件,通过 STRAIT_CORS_ORIGINS 配置允许来源
  • 流式响应支持 StreamChunk.Err 错误传播
  • 启动和热重载时自动写入 manifest.json
  • 版本号 v0.2 → v0.3

文档

  • docs/en/ + docs/zh/ 双语目录,每个文档含语言切换头
  • 插件开发指南新增 Descriptor、FailMode、StreamPostProcessor、PipelineContext 章节
  • 内置插件文档新增 prompt-injector + 配置字段说明
  • 新增 docs/comparison.md(Strait vs LiteLLM / Kong)
  • 部署文档新增环境变量表
  • LICENSE 文件(Apache 2.0)
  • examples/failover-routing/ 加权路由示例

Test plan

  • go build ./cmd/strait/ 编译通过
  • go test ./internal/plugin/ 全部通过
  • 启动后检查 manifest.json 生成正确
  • 发送非流式 / 流式请求验证管线正常
  • 修改 plugins.yaml 验证热重载 + manifest 重新生成
  • 检查 docs/en/docs/zh/ 文档链接正确

Yukk1o and others added 11 commits May 28, 2026 23:51
## 变更内容
- Dockerfile: golang:1.25-alpine 多阶段构建,最终镜像 ~10MB
- .dockerignore: 排除 .git/docs/vendor 等无关文件
- docker-compose.yml: 端口映射 8080,configs 目录挂载
- K8s deployment/service/configmap/secret 完整部署配置
- /metrics: Prometheus 指标端点 + HTTP 请求计数

## 测试

- [x] Docker 构建成功
- [x] /health 返回正常
- [x] /ready 返回正常
- [x] /metrics 返回 Prometheus 格式指标
- [x] K8s 部署测试通过"
## Summary

路由增强:多目标路由 + 优先级/权重策略 + 通配符匹配 + 模型映射

## 改动

**路由核心**
- routeYAML 支持 targets 列表和 strategy 字段
- targetYAML 新增 Priority / Weight 字段
- 新增 selectTarget / selectByWeight / matchModel / resolveRoute 方法
- Route() 支持精确匹配 + 通配符两遍扫描
- RouteDecision 新增可选 Model 字段,支持目标模型映射

**管线重构**
- executePipeline 统一处理模型覆盖,返回三值
- 提取 resolveAdapter 消除 ExecuteChat / ExecuteChatStream 重复

**日志**
- 全项目 log → slog 迁移(main.go / watcher.go / router.go)
- 路由选择结构化日志输出

**配置**
- routes.yaml 支持 targets + strategy 新格式
- 旧格式 target(单数)向后兼容
- target 和 targets 同时存在时输出 WARN 日志

**文档**
- roadmap 更新 P4/P7 状态
- built-in.md 更新 router-yaml 配置说明
- deployment.md 补充 Docker / K8s / Metrics 部署指南
- 修正 NewServer 函数调用,新增 met 参数
- 解决服务器初始化时缺少依赖传递的问题
- 确保监控组件正确集成至服务器实例
- 增强服务器稳定性,防止启动异常
- 添加 ExecuteChat 不同场景的测试,包括成功、认证失败、认证成功、无适配器、路由错误和模型覆盖
- 添加 ExecuteChatStream 流式接口的成功测试
- 添加 Scheduler 的 ReloadManager 重新加载管理器后的行为测试
- 添加 router 包的单元测试,包括模型匹配、目标选择策略和路由端到端测试
- 实现 testutil 包中 MockRouter、MockAdapter 和 MockAuthenticator 的模拟实现,便于测试依赖注入
- 确保所有测试用例覆盖主要逻辑分支及异常情况,提高代码质量和稳定性
- 使用http.Server结构体启动HTTP服务
- 监听系统中断信号实现优雅关闭
- 在关闭时设置10秒的超时上下文
- 添加日志记录服务启动、关闭及异常信息
- 启动服务与信号监听在独立协程中运行
- 新增 Guard、PreProcessor、PostProcessor 三个插件接口,拓展插件类型支持
- 定义 PipelineContext 贯穿插件管线各阶段信息传递
- 插件管理器支持守卫、预处理器与后置处理器插件的注册与管理
- 插件加载器新增对 guard、preprocessor、postprocessor 类型插件的加载与日志区分
- 调度器执行流程改为鉴权 → 守卫 → 预处理 → 路由 → 适配 → 后置处理的管线顺序
- 适配器调用前后新增预处理与后置处理钩子,支持插件对请求和响应的修改
- 在启动命令行输出插件加载摘要,显示包括新插件类型的状态信息
- 新增提示注入插件 prompt-injector,支持在请求消息最前面注入系统提示语
- 配置文件示例添加 prompt-injector 插件的定义及默认系统提示配置
- 将插件加载拆分为 loadPlugin 和 registerPlugin 两个函数,将 loadPlugin 的圈复杂度从 16 降到 8
- registerPlugin 根据插件类型注册到管理器中
- 增加类型断言错误处理,确保插件类型正确
- 删除重复或无效的调试日志代码
- 统一插件加载成功时的日志输出格式
- 新增 ErrCode 类型及多种错误码常量,增强错误处理统一性
- 新增 NewPluginError 创建结构化插件错误的辅助函数
- 扩展 Plugin 接口,新增 Guard、PreProcessor、PostProcessor、StreamPostProcessor 等多种插件接口
- 新增 FailMode 类型及多种失败策略,支持插件故障时不同的容错行为
- 引入 PluginDescriptor 类型及 Describable 接口,实现插件元信息描述和优先级、超时配置
- 实现 Describe 函数以便统一获取插件描述符
- 扩展注册机制,支持插件工厂函数注册及按名称创建插件实例
- 为 ChatRequest 新增 CopyChatRequest 函数,支持请求深拷贝以保证预处理安全
- PipelineContext 增加 TraceID 字段及相关上下文注入和提取函数,支持全链路请求追踪
- 主程序启动、配置管理中新增 manifest.json 生成功能,用以聚合插件描述信息
- 新增丰富的插件开发文档和内置插件说明文档,完善开发者指导
- 配置文件 plugins.yaml 更新,支持插件优先级配置
- 各处代码结构优化,改进注释与代码风格,提升代码易读性和维护性
- 新增 ErrCode 类型及多种错误码常量,增强错误处理统一性
- 新增 NewPluginError 创建结构化插件错误的辅助函数
- 扩展 Plugin 接口,新增 Guard、PreProcessor、PostProcessor、StreamPostProcessor 等多种插件接口
- 新增 FailMode 类型及多种失败策略,支持插件故障时不同的容错行为
- 引入 PluginDescriptor 类型及 Describable 接口,实现插件元信息描述和优先级、超时配置
- 实现 Describe 函数以便统一获取插件描述符
- 扩展注册机制,支持插件工厂函数注册及按名称创建插件实例
- 为 ChatRequest 新增 CopyChatRequest 函数,支持请求深拷贝以保证预处理安全
- PipelineContext 增加 TraceID 字段及相关上下文注入和提取函数,支持全链路请求追踪
- 主程序启动、配置管理中新增 manifest.json 生成功能,用以聚合插件描述信息
- 新增丰富的插件开发文档和内置插件说明文档,完善开发者指导
- 配置文件 plugins.yaml 更新,支持插件优先级配置
- 各处代码结构优化,改进注释与代码风格,提升代码易读性和维护性
@Yukk1o
Yukk1o merged commit f69f14e into master May 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant