knowledge_base.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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_name_parent: Optional[str] = Field(None, description="Milvus集合名称(父)")
  13. collection_name_children: str = Field(..., description="Milvus集合名称(子)")
  14. description: Optional[str] = Field(None, description="描述")
  15. # 默认状态改为禁用,只有同步成功后才置为 normal
  16. status: Optional[str] = Field("disabled", description="状态")
  17. class CustomSchemaField(BaseModel):
  18. """自定义Schema字段定义"""
  19. field_name: str = Field(..., description="字段名称(英文)")
  20. field_type: str = Field(..., description="字段类型: BOOL/INT8/INT16/INT32/INT64/FLOAT/DOUBLE/VARCHAR/JSON")
  21. max_length: Optional[int] = Field(None, description="最大长度(VARCHAR需要)")
  22. is_primary: bool = Field(False, description="是否主键(通常不需要用户指定)")
  23. description: Optional[str] = Field(None, description="描述")
  24. class KnowledgeBaseCreate(KnowledgeBaseBase):
  25. """创建知识库请求参数"""
  26. dimension: int = Field(4096, description="向量维度,默认4096")
  27. metadata_fields: Optional[List[MetadataField]] = Field(None, description="元数据字段列表")
  28. custom_schemas: Optional[List[CustomSchemaField]] = Field(None, description="自定义Schema字段列表")
  29. class KnowledgeBaseUpdate(BaseModel):
  30. """更新知识库请求参数"""
  31. name: Optional[str] = None
  32. description: Optional[str] = None
  33. status: Optional[str] = None
  34. metadata_fields: Optional[List[MetadataField]] = Field(None, description="元数据字段列表")
  35. class DescriptionUpdate(BaseModel):
  36. """仅更新描述(保留原有兼容性)"""
  37. description: str
  38. from datetime import datetime
  39. class KnowledgeBaseResponse(BaseModelSchema):
  40. """知识库响应模型"""
  41. id: str
  42. name: str
  43. collection_name_parent: Optional[str] = None
  44. collection_name_children: Optional[str]
  45. description: Optional[str]
  46. status: str
  47. document_count: int
  48. is_synced: bool = Field(False, description="是否已同步到Milvus")
  49. created_by: Optional[str] = None
  50. updated_by: Optional[str] = None
  51. created_at: Optional[str] = None
  52. updated_at: Optional[str] = None
  53. created_time: Optional[str] = None
  54. updated_time: Optional[str] = None
  55. class Config:
  56. from_attributes = True
  57. # json_encoders = {
  58. # datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S") if v else None
  59. # }