| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import logging
- from typing import Optional
- from fastapi import APIRouter, HTTPException
- from pydantic import BaseModel
- import service.ai_text_ollama as ai_text
- logger = logging.getLogger(__name__)
- # 创建路由对象,可以统一设置前缀 (prefix) 和 标签 (tags)
- router = APIRouter(
- prefix="/api1/text",
- tags=["text"]
- )
- class TranslationRequest(BaseModel):
- text: str
- @router.post("/translate")
- async def translate(request: TranslationRequest):
- if not request.text:
- raise HTTPException(status_code=400, detail="输入文本不能为空")
- try:
- final_result = ai_text.translate2zh(request.text)
- return {"original": request.text, "translation": final_result}
- except Exception as e:
- raise HTTPException(status_code=500, detail=str(e))
- # 定义接收 JSON 的模型
- class SummarizeRequest(BaseModel):
- text: str
- prompt: Optional[str] = "" # 允许 prompt 为空字符串或不传
- @router.post("/summarize")
- async def get_summarize(request: SummarizeRequest):
- if not request.text.strip():
- raise HTTPException(status_code=400, detail="输入文本不能为空")
- try:
- max_length = 256
- combined_prompt = f"""
- 你是一个专业的视频内容分析师。请对以下识别结果进行精炼的中文总结。
- 要求字数不超过{max_length}字,语气客观专业:
- {request.text}
- """
- result = ai_text.summarize(combined_prompt)
- return {
- "model_name": result['model_name'],
- "prompt": combined_prompt,
- "result": result['result']
- }
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}")
- @router.post("/tag")
- async def get_tag(request: SummarizeRequest):
- if not request.text.strip():
- raise HTTPException(status_code=400, detail="输入文本不能为空")
- try:
- combined_prompt = f"""
- 你是一个专业的视频内容分析师。请从下方文本中提取出 1-10 个关键词标签。
- 限制条件:
- 1. 标签必须是中文。
- 2. 标签要包含:人物特征、动作行为、场景环境、氛围。
- 3. 严禁输出任何解释性文字,只输出标签。
- 4. 格式要求:标签之间用英文逗号分隔。
- 文本内容:
- {request.text}
- 标签结果:
- """
- result = ai_text.summarize(combined_prompt)
- return {
- "model_name": result['model_name'],
- "prompt": combined_prompt,
- "result": result['result']
- }
- except Exception as e:
- raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}")
|