deepdata: core product code (backend, frontend, runtime, deepflow module)
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
策略工厂
|
||||
|
||||
根据知识库类型(DOCUMENT/GRAPH)创建对应的知识库策略实例。
|
||||
"""
|
||||
from typing import Dict
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.db.models.knowledge_gen import RagType
|
||||
from app.core.exception import BusinessError, ErrorCodes
|
||||
from .base import KnowledgeBaseStrategy
|
||||
|
||||
|
||||
class KnowledgeBaseStrategyFactory:
|
||||
"""知识库策略工厂
|
||||
|
||||
使用工厂模式创建知识库策略实例,支持策略缓存以提高性能。
|
||||
"""
|
||||
|
||||
_strategy_cache: Dict[str, type] = {}
|
||||
|
||||
@classmethod
|
||||
def register_strategy(cls, rag_type: str, strategy_class: type):
|
||||
"""注册策略类
|
||||
|
||||
Args:
|
||||
rag_type: 知识库类型(DOCUMENT/GRAPH)
|
||||
strategy_class: 策略类
|
||||
"""
|
||||
cls._strategy_cache[rag_type.upper()] = strategy_class
|
||||
|
||||
@classmethod
|
||||
def create_strategy(
|
||||
cls,
|
||||
rag_type: str,
|
||||
db: AsyncSession
|
||||
) -> KnowledgeBaseStrategy:
|
||||
"""创建知识库策略实例
|
||||
|
||||
Args:
|
||||
rag_type: 知识库类型(DOCUMENT/GRAPH)
|
||||
db: 数据库异步 session
|
||||
|
||||
Returns:
|
||||
知识库策略实例
|
||||
|
||||
Raises:
|
||||
BusinessError: 不支持的知识库类型
|
||||
"""
|
||||
rag_type_upper = rag_type.upper() if isinstance(rag_type, str) else str(rag_type).upper()
|
||||
|
||||
if rag_type_upper not in cls._strategy_cache:
|
||||
raise BusinessError(
|
||||
ErrorCodes.RAG_UNSUPPORTED_TYPE,
|
||||
f"不支持的 RAG 类型: {rag_type}"
|
||||
)
|
||||
|
||||
strategy_class = cls._strategy_cache[rag_type_upper]
|
||||
return strategy_class(db)
|
||||
|
||||
@classmethod
|
||||
def get_supported_types(cls) -> list:
|
||||
"""获取支持的知识库类型列表
|
||||
|
||||
Returns:
|
||||
支持的类型列表
|
||||
"""
|
||||
return list(cls._strategy_cache.keys())
|
||||
Reference in New Issue
Block a user