relation.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. """
  2. 关系抽取路由
  3. """
  4. from fastapi import APIRouter, HTTPException
  5. from loguru import logger
  6. import time
  7. from ..models import RelationRequest, RelationResponse
  8. from ..services.relation_service import relation_service
  9. router = APIRouter()
  10. @router.post("/relations", response_model=RelationResponse)
  11. async def extract_relations(request: RelationRequest):
  12. """
  13. 从已提取的实体中抽取关系
  14. """
  15. start_time = time.time()
  16. try:
  17. logger.info(f"开始提取关系: document_id={request.document_id}, "
  18. f"entity_count={len(request.entities)}")
  19. if not request.entities or len(request.entities) < 2:
  20. return RelationResponse.success_response(
  21. document_id=request.document_id,
  22. relations=[],
  23. processing_time=0
  24. )
  25. # 调用关系抽取服务
  26. relations = await relation_service.extract_relations(
  27. text=request.text,
  28. entities=request.entities
  29. )
  30. processing_time = int((time.time() - start_time) * 1000)
  31. logger.info(f"关系提取完成: document_id={request.document_id}, "
  32. f"relation_count={len(relations)}, processing_time={processing_time}ms")
  33. return RelationResponse.success_response(
  34. document_id=request.document_id,
  35. relations=relations,
  36. processing_time=processing_time
  37. )
  38. except Exception as e:
  39. logger.error(f"关系提取失败: document_id={request.document_id}, error={str(e)}")
  40. return RelationResponse.error_response(
  41. document_id=request.document_id,
  42. error_message=str(e)
  43. )