deepdata: core product code (backend, frontend, runtime, deepflow module)

This commit is contained in:
figmar
2026-08-30 19:23:38 +08:00
commit bd3db30be9
1405 changed files with 271727 additions and 0 deletions
@@ -0,0 +1,105 @@
"""
策略模式 - 知识库策略基类
定义知识库检索和处理的抽象接口,支持不同类型的知识库(向量、知识图谱等)。
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional
from sqlalchemy.ext.asyncio import AsyncSession
class KnowledgeBaseStrategy(ABC):
"""知识库策略抽象基类
所有知识库策略(向量、知识图谱等)必须实现此接口。
接口设计原则:
- query(): 直接获取数据,不涉及相似度计算,返回值格式不统一
- search(): 基于输入文本的相似度检索,返回值必须统一为 UnifiedSearchResult
- process_file(): 处理单个文件,不同策略有不同的处理逻辑
"""
def __init__(self, db: AsyncSession):
"""初始化策略
Args:
db: 数据库异步 session
"""
self.db = db
@abstractmethod
async def query(
self,
knowledge_base_id: str,
**kwargs
) -> Any:
"""直接查询知识库数据(不涉及相似度计算)
不同知识库类型的返回格式可以不同:
- 向量知识库:返回 PagedResponse[RagChunkResp](分页分块列表)
- 知识图谱:返回图谱数据(格式由 LightRAG 定义)
Args:
knowledge_base_id: 知识库 ID
**kwargs: 额外参数(如 rag_file_id, paging_query 等)
Returns:
查询结果(格式由具体策略决定)
"""
pass
@abstractmethod
async def search(
self,
query_text: str,
knowledge_base_ids: List[str],
top_k: int = 10,
threshold: Optional[float] = None,
**kwargs
) -> List[Dict[str, Any]]:
"""基于输入文本的相似度检索
所有知识库类型必须返回统一格式:UnifiedSearchResult
Args:
query_text: 查询文本
knowledge_base_ids: 知识库 ID 列表
top_k: 返回结果数量
threshold: 相似度阈值(可选)
**kwargs: 额外参数
Returns:
统一格式的检索结果列表,每个元素包含:
- id: 结果 ID
- text: 文本内容
- score: 相似度分数
- metadata: 元数据字典
- resultType: 结果类型("vector" 或 "graph")
- knowledgeBaseId: 知识库 ID
- knowledgeBaseName: 知识库名称
"""
pass
@abstractmethod
async def process_file(
self,
knowledge_base_id: str,
rag_file_id: str,
**kwargs
) -> None:
"""处理单个文件
不同知识库类型有不同的处理逻辑:
- 向量知识库:文档分块 -> 向量化 -> 存储到 Milvus
- 知识图谱:文档分块 -> 构建知识图谱 -> 存储到 LightRAG
Args:
knowledge_base_id: 知识库 ID
rag_file_id: RAG 文件 ID
**kwargs: 额外参数(如 process_type, chunk_size 等)
Raises:
BusinessError: 处理失败时抛出
"""
pass