116 lines
4.5 KiB
Python
116 lines
4.5 KiB
Python
"""
|
|
知识库 Schema
|
|
"""
|
|
from typing import Optional, List, Dict, Any
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, Field, ConfigDict
|
|
|
|
from app.base_schema import CSTDatetime
|
|
|
|
|
|
class KnowledgeBaseCreate(BaseModel):
|
|
"""创建知识库"""
|
|
model_config = ConfigDict(protected_namespaces=())
|
|
|
|
application_id: Optional[str] = Field(None, description="所属应用ID")
|
|
is_global: bool = Field(default=False, description="是否在子应用中可见")
|
|
name: str = Field(..., max_length=100, description="知识库名称")
|
|
code: str = Field(..., max_length=100, description="知识库编码")
|
|
description: Optional[str] = Field(None, description="描述")
|
|
icon: str = Field(default="", description="图标")
|
|
embedding_model_id: Optional[str] = Field(None, description="Embedding 模型ID")
|
|
embedding_dimensions: int = Field(default=1536, description="向量维度")
|
|
chunk_strategy: str = Field(default="recursive", description="分块策略")
|
|
chunk_size: int = Field(default=500, ge=100, le=4000, description="分块大小")
|
|
chunk_overlap: int = Field(default=50, ge=0, le=500, description="分块重叠")
|
|
separator: Optional[str] = Field(None, description="自定义分隔符")
|
|
retrieval_mode: str = Field(default="hybrid", description="检索模式")
|
|
top_k: int = Field(default=5, ge=1, le=20, description="检索数量")
|
|
score_threshold: float = Field(default=0.5, ge=0, le=1, description="相似度阈值")
|
|
rerank_enabled: bool = Field(default=False, description="是否启用重排序")
|
|
rerank_model_id: Optional[str] = Field(None, description="重排序模型ID")
|
|
retrieval_weight: float = Field(default=1.0, ge=0.1, le=10.0, description="检索权重")
|
|
process_rules: Optional[Dict[str, Any]] = Field(None, description="预处理规则")
|
|
indexing_technique: str = Field(default="high_quality", description="索引模式: high_quality/economy")
|
|
|
|
|
|
class KnowledgeBaseUpdate(BaseModel):
|
|
"""更新知识库"""
|
|
model_config = ConfigDict(protected_namespaces=())
|
|
|
|
name: Optional[str] = None
|
|
description: Optional[str] = None
|
|
icon: Optional[str] = None
|
|
embedding_model_id: Optional[str] = None
|
|
embedding_dimensions: Optional[int] = None
|
|
chunk_strategy: Optional[str] = None
|
|
chunk_size: Optional[int] = Field(None, ge=100, le=4000)
|
|
chunk_overlap: Optional[int] = Field(None, ge=0, le=500)
|
|
separator: Optional[str] = None
|
|
retrieval_mode: Optional[str] = None
|
|
top_k: Optional[int] = Field(None, ge=1, le=20)
|
|
score_threshold: Optional[float] = Field(None, ge=0, le=1)
|
|
rerank_enabled: Optional[bool] = None
|
|
rerank_model_id: Optional[str] = None
|
|
retrieval_weight: Optional[float] = Field(None, ge=0.1, le=10.0)
|
|
process_rules: Optional[Dict[str, Any]] = None
|
|
indexing_technique: Optional[str] = None
|
|
status: Optional[str] = None
|
|
is_global: Optional[bool] = None
|
|
|
|
|
|
class KnowledgeBaseResponse(BaseModel):
|
|
"""知识库详情输出"""
|
|
id: str
|
|
application_id: Optional[str] = None
|
|
is_global: bool = False
|
|
name: str
|
|
code: str
|
|
description: str = ""
|
|
icon: str = ""
|
|
embedding_model_id: Optional[str] = None
|
|
embedding_model_name: str = ""
|
|
embedding_dimensions: int = 1536
|
|
chunk_strategy: str = "recursive"
|
|
chunk_size: int = 500
|
|
chunk_overlap: int = 50
|
|
separator: Optional[str] = None
|
|
retrieval_mode: str = "hybrid"
|
|
top_k: int = 5
|
|
score_threshold: float = 0.5
|
|
rerank_enabled: bool = False
|
|
rerank_model_id: Optional[str] = None
|
|
retrieval_weight: float = 1.0
|
|
process_rules: Optional[Dict[str, Any]] = None
|
|
indexing_technique: str = "high_quality"
|
|
document_count: int = 0
|
|
segment_count: int = 0
|
|
total_token_count: int = 0
|
|
total_char_count: int = 0
|
|
status: str = "active"
|
|
sort: int = 0
|
|
sys_create_datetime: Optional[CSTDatetime] = None
|
|
sys_update_datetime: Optional[CSTDatetime] = None
|
|
|
|
model_config = ConfigDict(from_attributes=True, protected_namespaces=())
|
|
|
|
|
|
class KnowledgeBaseListResponse(BaseModel):
|
|
"""知识库列表输出"""
|
|
id: str
|
|
application_id: Optional[str] = None
|
|
application_name: str = ""
|
|
is_global: bool = False
|
|
name: str
|
|
code: str
|
|
description: str = ""
|
|
icon: str = ""
|
|
embedding_model_name: str = ""
|
|
document_count: int = 0
|
|
segment_count: int = 0
|
|
status: str = "active"
|
|
sys_create_datetime: Optional[CSTDatetime] = None
|
|
|
|
model_config = ConfigDict(from_attributes=True, protected_namespaces=())
|