feat: Auto模式按用户输入意图自动路由视频/图像/语音生成模型
This commit is contained in:
1 parent
0c017d380c
commit
f5968d0f61
1 file changed
+28
-2
@@ -33,6 +33,30 @@ router = APIRouter()
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def detect_media_intent(text: str) -> str | None:
|
||||||
|
"""根据用户输入判断是否为 图像/视频/语音 生成请求,返回对应能力或 None。
|
||||||
|
|
||||||
|
用于 Auto 模式:用户未指定具体模型时,依据意图自动匹配平台各类能力的默认模型。
|
||||||
|
疑问句(含「吗/呢/怎么/能否」或结尾问号)不触发,避免「你能生成视频吗」被误判。
|
||||||
|
"""
|
||||||
|
if not text:
|
||||||
|
return None
|
||||||
|
t = text.lower().strip()
|
||||||
|
# 疑问句不触发媒体生成
|
||||||
|
if t.endswith(("?", "?")) or any(q in t for q in ("吗", "呢", "怎么", "如何", "能否", "是否可以", "可以吗", "会不会", "why", "how")):
|
||||||
|
return None
|
||||||
|
video_kw = ("视频", "短片", "影片", "vide", "动画视频", "一段视频", "做个视频", "生成视频")
|
||||||
|
image_kw = ("图片", "图像", "插画", "海报", "照片", "imag", "画一张", "画个", "生成图片", "一张图", "一幅画", "生成一幅")
|
||||||
|
audio_kw = ("语音", "配音", "朗读", "播报", "念一段", "有声", "tts", "音频", "生成语音")
|
||||||
|
if any(k in t for k in video_kw):
|
||||||
|
return "video"
|
||||||
|
if any(k in t for k in image_kw):
|
||||||
|
return "image"
|
||||||
|
if any(k in t for k in audio_kw):
|
||||||
|
return "audio"
|
||||||
|
return None
|
||||||
|
|
||||||
# CST timezone (UTC+8) for consistent time display
|
# CST timezone (UTC+8) for consistent time display
|
||||||
CST_TZ = timezone(timedelta(hours=8))
|
CST_TZ = timezone(timedelta(hours=8))
|
||||||
|
|
||||||
@@ -986,8 +1010,10 @@ async def send_message(
|
|||||||
if model_id and model_id != "auto":
|
if model_id and model_id != "auto":
|
||||||
ai_model = db.query(AIModel).filter(AIModel.id == model_id).first()
|
ai_model = db.query(AIModel).filter(AIModel.id == model_id).first()
|
||||||
if not ai_model:
|
if not ai_model:
|
||||||
# Auto / 未指定 → 使用平台默认对话模型(文本能力默认)
|
# Auto / 未指定 → 按用户输入意图匹配对应能力的默认模型,否则回退文本对话
|
||||||
ai_model = resolve_auto_model("text", db)
|
intent = detect_media_intent(req.content)
|
||||||
|
resolved = resolve_auto_model(intent, db) if intent else None
|
||||||
|
ai_model = resolved or resolve_auto_model("text", db)
|
||||||
|
|
||||||
if ai_model:
|
if ai_model:
|
||||||
# ====== 图像/视频生成模型分支 ======
|
# ====== 图像/视频生成模型分支 ======
|
||||||
|
|||||||
Reference in new issue
Block a user