2026-07-03 08:53:56 +08:00
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
2026-07-10 09:14:06 +08:00
|
|
|
from .backends import Embedder, StorageBackend
|
|
|
|
|
from .ingestion import ChunkingStrategy
|
|
|
|
|
from .retrieval import (
|
2026-07-03 08:53:56 +08:00
|
|
|
BaseRetriever,
|
|
|
|
|
PostProcessor,
|
|
|
|
|
PreProcessor,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
StorageConfigType = dict[str, Any]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ChunkingConfig(BaseModel):
|
|
|
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
|
strategy: ChunkingStrategy | None = None
|
|
|
|
|
"""文档切块策略"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DedupConfig(BaseModel):
|
|
|
|
|
enable: bool = True
|
|
|
|
|
"""是否开启入库去重"""
|
|
|
|
|
threshold: float = 0.98
|
|
|
|
|
"""去重相似度阈值"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RerankConfig(BaseModel):
|
|
|
|
|
enable: bool = False
|
|
|
|
|
"""是否开启重排"""
|
|
|
|
|
model_name: str | None = None
|
|
|
|
|
"""重排使用的模型名称"""
|
|
|
|
|
top_n: int = 5
|
|
|
|
|
"""重排后保留的文档数量"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class HybridSearchConfig(BaseModel):
|
|
|
|
|
enable: bool = False
|
|
|
|
|
"""是否开启双轨混合检索及 RRF 融合"""
|
|
|
|
|
dense_weight: float = 0.7
|
|
|
|
|
"""向量检索权重"""
|
|
|
|
|
sparse_weight: float = 0.3
|
|
|
|
|
"""BM25 检索权重"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LifecycleConfig(BaseModel):
|
|
|
|
|
enable: bool = False
|
|
|
|
|
"""是否开启生命周期打分(时间衰减+访问强化)后处理"""
|
|
|
|
|
half_life_days: int = 30
|
|
|
|
|
"""半衰期天数"""
|
|
|
|
|
decay_weight: float = 0.3
|
|
|
|
|
"""时间衰减权重"""
|
|
|
|
|
semantic_weight: float = 0.7
|
|
|
|
|
"""语义相似度权重"""
|
|
|
|
|
importance_weight: float = 0.0
|
|
|
|
|
"""重要性打分权重"""
|
|
|
|
|
reinforcement_weight: float = 0.2
|
|
|
|
|
"""访问强化得分权重"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class RAGConfig(BaseModel):
|
|
|
|
|
model_config = ConfigDict(arbitrary_types_allowed=True)
|
|
|
|
|
storage: StorageBackend | None = None
|
|
|
|
|
"""存储后端"""
|
|
|
|
|
embedder: Embedder | None = None
|
|
|
|
|
"""向量化引擎"""
|
|
|
|
|
custom_retriever: BaseRetriever | None = None
|
|
|
|
|
"""自定义召回器"""
|
|
|
|
|
scopes: str | list[str] = "/"
|
|
|
|
|
"""数据隔离作用域"""
|
|
|
|
|
chunking: ChunkingConfig = Field(default_factory=ChunkingConfig)
|
|
|
|
|
"""文档切块配置"""
|
|
|
|
|
dedup: DedupConfig = Field(default_factory=DedupConfig)
|
|
|
|
|
"""去重配置"""
|
|
|
|
|
|
|
|
|
|
rerank: RerankConfig = Field(default_factory=RerankConfig)
|
|
|
|
|
"""重排配置"""
|
|
|
|
|
hybrid: HybridSearchConfig = Field(default_factory=HybridSearchConfig)
|
|
|
|
|
"""混合检索与 RRF 融合配置"""
|
|
|
|
|
lifecycle: LifecycleConfig = Field(default_factory=LifecycleConfig)
|
|
|
|
|
"""生命周期打分配置"""
|
|
|
|
|
pre_processors: list[PreProcessor] = Field(default_factory=list)
|
|
|
|
|
"""自定义查询前处理器列表"""
|
|
|
|
|
post_processors: list[PostProcessor] = Field(default_factory=list)
|
|
|
|
|
"""自定义检索后处理器列表"""
|