request.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. # 序列化时使用 alias (charStart, charEnd)
  16. by_alias = True
  17. # 确保嵌套对象也使用 alias
  18. json_encoders = {}
  19. class EntityInfo(BaseModel):
  20. """实体信息"""
  21. name: str = Field(..., description="实体名称")
  22. type: str = Field(..., description="实体类型")
  23. value: Optional[str] = Field(None, description="实体值")
  24. position: Optional[PositionInfo] = Field(None, description="位置信息")
  25. context: Optional[str] = Field(None, description="上下文片段")
  26. confidence: Optional[float] = Field(None, description="置信度")
  27. temp_id: Optional[str] = Field(None, alias="tempId", description="临时ID")
  28. class Config:
  29. populate_by_name = True
  30. by_alias = True
  31. class NerRequest(BaseModel):
  32. """NER 请求"""
  33. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  34. text: str = Field(..., description="待提取的文本内容")
  35. entity_types: Optional[List[str]] = Field(None, alias="entityTypes", description="指定提取的实体类型")
  36. extract_relations: bool = Field(True, alias="extractRelations", description="是否提取关系")
  37. user_id: Optional[str] = Field(None, alias="userId", description="用户ID")
  38. class Config:
  39. populate_by_name = True
  40. class RelationRequest(BaseModel):
  41. """关系抽取请求"""
  42. document_id: Optional[str] = Field(None, alias="documentId", description="文档ID")
  43. text: str = Field(..., description="原始文本内容")
  44. entities: List[EntityInfo] = Field(..., description="已提取的实体列表")
  45. class Config:
  46. populate_by_name = True