knowledge_base.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from typing import Optional, List
  2. from pydantic import BaseModel, Field
  3. from app.schemas.base import BaseModelSchema
  4. class MetadataField(BaseModel):
  5. """元数据字段定义"""
  6. field_zh_name: str = Field(..., description="中文名称")
  7. field_en_name: str = Field(..., description="英文名称")
  8. field_type: str = Field(..., description="字段类型: text/num")
  9. remark: Optional[str] = Field(None, description="备注")
  10. class KnowledgeBaseBase(BaseModel):
  11. name: str = Field(..., description="知识库名称")
  12. collection_name1: str = Field(..., description="Milvus集合名称(父)")
  13. collection_name2: str = Field(..., description="Milvus集合名称(子)")
  14. description: Optional[str] = Field(None, description="描述")
  15. status: Optional[str] = Field("normal", description="状态")
  16. class CustomSchemaField(BaseModel):
  17. """自定义Schema字段定义"""
  18. field_name: str = Field(..., description="字段名称(英文)")
  19. field_type: str = Field(..., description="字段类型: BOOL/INT8/INT16/INT32/INT64/FLOAT/DOUBLE/VARCHAR/JSON")
  20. max_length: Optional[int] = Field(None, description="最大长度(VARCHAR需要)")
  21. is_primary: bool = Field(False, description="是否主键(通常不需要用户指定)")
  22. description: Optional[str] = Field(None, description="描述")
  23. class KnowledgeBaseCreate(KnowledgeBaseBase):
  24. """创建知识库请求参数"""
  25. dimension: int = Field(768, description="向量维度,默认768")
  26. metadata_fields: Optional[List[MetadataField]] = Field(None, description="元数据字段列表")
  27. custom_schemas: Optional[List[CustomSchemaField]] = Field(None, description="自定义Schema字段列表")
  28. class KnowledgeBaseUpdate(BaseModel):
  29. """更新知识库请求参数"""
  30. name: Optional[str] = None
  31. description: Optional[str] = None
  32. status: Optional[str] = None
  33. metadata_fields: Optional[List[MetadataField]] = Field(None, description="元数据字段列表")
  34. class DescriptionUpdate(BaseModel):
  35. """仅更新描述(保留原有兼容性)"""
  36. description: str
  37. from datetime import datetime
  38. class KnowledgeBaseResponse(BaseModelSchema):
  39. """知识库响应模型"""
  40. id: str
  41. name: str
  42. collection_name1: str
  43. collection_name2: Optional[str]
  44. description: Optional[str]
  45. status: str
  46. document_count: int
  47. is_synced: bool = Field(False, description="是否已同步到Milvus")
  48. created_by: Optional[str] = None
  49. updated_by: Optional[str] = None
  50. created_at: Optional[datetime] = None
  51. updated_at: Optional[datetime] = None
  52. created_time: Optional[datetime] = None
  53. updated_time: Optional[datetime] = None
  54. class Config:
  55. from_attributes = True
  56. json_encoders = {
  57. datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S") if v else None
  58. }