概述
Shannon 使用特性开关来控制可选功能、实验性功能和企业扩展,无需修改代码。这实现了以下功能的清晰分离:- 开源核心功能(所有用户可用)
- 企业/私有功能(通过开关控制)
- 实验性功能(可切换以进行测试)
无需重新编译
启用/禁用功能无需重新构建服务
基于环境
开发/预发布/生产环境使用不同的开关配置
清晰分离
企业功能与开源核心隔离
渐进式发布
在全面部署前测试新功能
配置
配置文件
特性开关在config/shannon.yaml 的 features 部分定义:
环境变量
可通过环境变量覆盖特性开关:SHANNON_FEATURE_<开关名称大写>
优先级顺序
- 环境变量(最高优先级)
- 配置覆盖层(
config/overlays/shannon.{env}.yaml) - 基础配置(
config/shannon.yaml) - 代码默认值(最低优先级)
使用模式
在 Go 代码中(Orchestrator)
在 Python 代码中(LLM Service)
条件导入模式
使用特性开关与条件导入实现清晰分离:常用特性开关
| 开关名称 | 类型 | 描述 | 默认值 |
|---|---|---|---|
ads_research | 企业版 | 带市场分析的广告研究工作流 | false |
parallel_streaming | 实验性 | 多代理并行 SSE 流式传输 | true |
advanced_synthesis | 企业版 | 自定义综合模板 | false |
vendor_tools_enabled | 集成 | 启用供应商特定工具适配器 | false |
enhanced_memory | 实验性 | 具有混合搜索的高级向量内存 | false |
最佳实践
1. 默认禁用
新功能应在基础配置中默认为false:
2. 使用环境覆盖层
为不同部署创建特定于环境的覆盖层:3. 使用 Try/Except 保护
始终为企业/可选功能使用优雅降级:4. 记录功能要求
企业功能模式
Shannon 使用特性开关将开源核心与企业扩展分离:文件结构
条件工作流路由
使用特性开关进行测试
单元测试
集成测试
部署策略
金丝雀部署
为部分用户启用功能:A/B 测试
基于特性开关路由流量:监控与可观测性
记录特性开关使用情况以便调试:迁移指南
添加新特性开关
1
在配置中定义开关
添加到
config/shannon.yaml:2
更新 Go 结构
在
go/orchestrator/internal/config/shannon.go 中添加字段:3
在代码中使用
控制功能:
4
添加测试
测试启用/禁用两种状态:
5
更新文档
更新本页和环境变量文档。