request.py 2.2 KB

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