统一知识图谱 Feature Flags 使用指南
概述
统一知识图谱支持全局和组件级别的 feature flag 控制,允许渐进式迁移和细粒度控制。
Feature Flags 列表
全局开关
MBE_UNIFIED_GRAPH_ENABLED(默认:true)- 控制所有图谱功能的全局开关
- 如果设置为
false,所有组件都不会启用图谱功能 - 优先级最高,必须先启用才能使用组件级别开关
组件级别开关
以下开关只有在 MBE_UNIFIED_GRAPH_ENABLED=true 时才会生效:
MBE_GRAPH_EXPERT_ROUTING(默认:true)- 控制 ExpertRouter 的图谱路由功能
- 影响:专家匹配、互补专家查找、用户偏好更新
MBE_GRAPH_MIRAS_CONTEXT(默认:true)- 控制 MIRASMatcher 的图谱上下文增强
- 影响:用户偏好加权、领域偏好加权
MBE_GRAPH_CONVERSATION(默认:true)- 控制 ConversationContext 的图谱同步
- 影响:实体追踪、用户偏好更新、对话事件同步
MBE_GRAPH_EDUCATION(默认:true)- 控制 CourseManager 的图谱集成
- 影响:学习路径生成、环检测、知识点依赖管理
MBE_GRAPH_RETRIEVAL_KG(默认:true)- 控制 RetrievalMoE 的图谱检索适配器
- 影响:结构化查询专家的图谱适配器注入
使用场景
场景 1: 完全禁用图谱功能
export MBE_UNIFIED_GRAPH_ENABLED=false
所有组件都会使用原有逻辑,不启用任何图谱功能。
场景 2: 启用全局图谱,但禁用特定组件
# 启用全局图谱
export MBE_UNIFIED_GRAPH_ENABLED=true
# 禁用专家路由的图谱功能(仍使用原有路由逻辑)
export MBE_GRAPH_EXPERT_ROUTING=false
# 禁用教育模块的图谱功能(仍使用原有学习路径算法)
export MBE_GRAPH_EDUCATION=false
场景 3: 渐进式迁移 - 逐个启用组件
# 第一步:只启用对话上下文同步
export MBE_UNIFIED_GRAPH_ENABLED=true
export MBE_GRAPH_CONVERSATION=true
export MBE_GRAPH_EXPERT_ROUTING=false
export MBE_GRAPH_MIRAS_CONTEXT=false
export MBE_GRAPH_EDUCATION=false
export MBE_GRAPH_RETRIEVAL_KG=false
# 第二步:启用专家路由
export MBE_GRAPH_EXPERT_ROUTING=true
# 第三步:启用所有组件
export MBE_GRAPH_MIRAS_CONTEXT=true
export MBE_GRAPH_EDUCATION=true
export MBE_GRAPH_RETRIEVAL_KG=true
场景 4: 测试环境配置
# 测试环境:只启用核心功能
export MBE_UNIFIED_GRAPH_ENABLED=true
export MBE_GRAPH_EXPERT_ROUTING=true
export MBE_GRAPH_CONVERSATION=true
export MBE_GRAPH_MIRAS_CONTEXT=false # 暂时禁用
export MBE_GRAPH_EDUCATION=false # 暂时禁用
export MBE_GRAPH_RETRIEVAL_KG=false # 暂时禁用
实现细节
检查逻辑
所有组件的初始化代码都遵循以下逻辑:
# 1. 检查全局开关
if os.getenv("MBE_UNIFIED_GRAPH_ENABLED", "true").lower() != "true":
return # 不启用图谱功能
# 2. 检查组件级别开关(默认跟随全局开关)
component_flag = os.getenv("MBE_GRAPH_<COMPONENT>", "true").lower()
if component_flag != "true":
logger.debug(f"图谱功能已禁用 (MBE_GRAPH_<COMPONENT>=false)")
return # 不启用该组件的图谱功能
# 3. 初始化图谱查询引擎
try:
from src.knowledge.graph import get_graph_query_engine
self._graph_query = get_graph_query_engine()
logger.info("🔗 图谱查询引擎已连接")
except Exception as e:
logger.debug(f"Graph query engine not available: {e}")
Fallback 机制
所有集成点都有 try/except fallback 机制:
- 如果图谱功能初始化失败,自动回退到原有逻辑
- 如果图谱查询失败,自动回退到原有逻辑
- 不会因为图谱功能问题导致系统崩溃
验证方法
检查日志
启用图谱功能时,会看到以下日志:
🔗 Expert router: 统一图谱查询引擎已连接
🔗 MIRAS: 统一图谱查询引擎已连接
🔗 ConversationContext: 图谱同步已启用
🔗 CourseManager: 统一图谱集成已启用
🔗 RetrievalMoE: 统一图谱适配器已注入 StructuredQueryExpert
禁用图谱功能时,会看到:
🔗 Expert router: 图谱路由已禁用 (MBE_GRAPH_EXPERT_ROUTING=false)
🔗 MIRAS: 图谱上下文已禁用 (MBE_GRAPH_MIRAS_CONTEXT=false)
🔗 ConversationContext: 图谱同步已禁用 (MBE_GRAPH_CONVERSATION=false)
🔗 CourseManager: 图谱集成已禁用 (MBE_GRAPH_EDUCATION=false)
🔗 RetrievalMoE: 图谱检索已禁用 (MBE_GRAPH_RETRIEVAL_KG=false)
功能验证
- ExpertRouter: 检查专家路由是否使用图谱查询
- MIRASMatcher: 检查是否使用用户偏好加权
- ConversationContext: 检查是否追踪实体和更新偏好
- CourseManager: 检查学习路径是否使用拓扑排序
- RetrievalMoE: 检查是否注入图谱适配器
注意事项
- 默认行为: 所有组件级别开关默认为
true,即默认启用图谱功能 - 优先级: 全局开关优先级最高,必须先启用
- 向后兼容: 如果未设置任何环境变量,默认行为是启用所有图谱功能
- 性能影响: 禁用图谱功能会回退到原有逻辑,性能特征可能不同
- 数据一致性: 在迁移过程中,建议保持数据同步,避免不一致
迁移建议
- 阶段 1: 启用全局开关,但禁用所有组件级别开关,验证系统稳定性
- 阶段 2: 逐个启用组件级别开关,监控性能和错误率
- 阶段 3: 全部启用,持续监控
- 回退: 如果出现问题,可以快速禁用全局开关或特定组件开关