text.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import logging
  2. from typing import Optional
  3. from fastapi import APIRouter, HTTPException
  4. from pydantic import BaseModel
  5. import service.ai_text_ollama as ai_text
  6. logger = logging.getLogger(__name__)
  7. # 创建路由对象,可以统一设置前缀 (prefix) 和 标签 (tags)
  8. router = APIRouter(
  9. prefix="/api1/text",
  10. tags=["text"]
  11. )
  12. class TranslationRequest(BaseModel):
  13. text: str
  14. @router.post("/translate")
  15. async def translate(request: TranslationRequest):
  16. if not request.text:
  17. raise HTTPException(status_code=400, detail="输入文本不能为空")
  18. try:
  19. final_result = ai_text.translate2zh(request.text)
  20. return {"original": request.text, "translation": final_result}
  21. except Exception as e:
  22. raise HTTPException(status_code=500, detail=str(e))
  23. # 定义接收 JSON 的模型
  24. class SummarizeRequest(BaseModel):
  25. text: str
  26. prompt: Optional[str] = "" # 允许 prompt 为空字符串或不传
  27. @router.post("/summarize")
  28. async def get_summarize(request: SummarizeRequest):
  29. if not request.text.strip():
  30. raise HTTPException(status_code=400, detail="输入文本不能为空")
  31. try:
  32. max_length = 256
  33. combined_prompt = f"""
  34. 你是一个专业的视频内容分析师。请对以下识别结果进行精炼的中文总结。
  35. 要求字数不超过{max_length}字,语气客观专业:
  36. {request.text}
  37. """
  38. result = ai_text.summarize(combined_prompt)
  39. return {
  40. "model_name": result['model_name'],
  41. "prompt": combined_prompt,
  42. "result": result['result']
  43. }
  44. except Exception as e:
  45. raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}")
  46. @router.post("/tag")
  47. async def get_tag(request: SummarizeRequest):
  48. if not request.text.strip():
  49. raise HTTPException(status_code=400, detail="输入文本不能为空")
  50. try:
  51. combined_prompt = f"""
  52. 你是一个专业的视频内容分析师。请从下方文本中提取出 1-10 个关键词标签。
  53. 限制条件:
  54. 1. 标签必须是中文。
  55. 2. 标签要包含:人物特征、动作行为、场景环境、氛围。
  56. 3. 严禁输出任何解释性文字,只输出标签。
  57. 4. 格式要求:标签之间用英文逗号分隔。
  58. 文本内容:
  59. {request.text}
  60. 标签结果:
  61. """
  62. result = ai_text.summarize(combined_prompt)
  63. return {
  64. "model_name": result['model_name'],
  65. "prompt": combined_prompt,
  66. "result": result['result']
  67. }
  68. except Exception as e:
  69. raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}")