request.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. """
  2. 请求模型定义
  3. """
  4. from pydantic import BaseModel, Field
  5. from typing import Optional, List
  6. class PositionInfo(BaseModel):
  7. """位置信息"""
  8. char_start: int = Field(..., alias="charStart", description="字符起始位置")
  9. char_end: int = Field(..., alias="charEnd", description="字符结束位置")
  10. line: Optional[int] = Field(None, description="所在行号")
  11. page: Optional[int] = Field(None, description="所在页码")
  12. file_id: Optional[str] = Field(None, alias="fileId", description="文件ID")
  13. class Config:
  14. populate_by_name = True
  15. by_alias = True
  16. class EntityInfo(BaseModel):
  17. """实体信息"""
  18. name: str = Field(..., description="实体名称")
  19. type: str = Field(..., description="实体类型")
  20. value: Optional[str] = Field(None, description="实体值")
  21. position: Optional[PositionInfo] = Field(None, description="位置信息")
  22. context: Optional[str] = Field(None, description="上下文片段")
  23. confidence: Optional[float] = Field(None, description="置信度")
  24. temp_id: Optional[str] = Field(None, alias="tempId", description="临时ID")
  25. class Config:
  26. populate_by_name = True
  27. by_alias = True
  28. class NerRequest(BaseModel):
  29. """NER 请求"""
  30. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  31. text: str = Field(..., description="待提取的文本内容")
  32. entity_types: Optional[List[str]] = Field(None, alias="entityTypes", description="指定提取的实体类型")
  33. extract_relations: bool = Field(True, alias="extractRelations", description="是否提取关系")
  34. user_id: Optional[str] = Field(None, alias="userId", description="用户ID")
  35. class Config:
  36. populate_by_name = True
  37. class RelationRequest(BaseModel):
  38. """关系抽取请求"""
  39. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  40. text: str = Field(..., description="原始文本内容")
  41. entities: List[EntityInfo] = Field(..., description="已提取的实体列表")
  42. class Config:
  43. populate_by_name = True