46 lines
1.8 KiB
Python
46 lines
1.8 KiB
Python
"""套图提示词引擎:按模型家族分发,各家族独立封装。
|
||
|
||
不同家族的生图语义差异极大,共用一套提示词会导致语义错配
|
||
(gpt-image-2 按文字重造商品即由此而来),故按家族各自成册:
|
||
|
||
alibaba 通义 wan*/qwen*(DashScope)—— 主体参考语义
|
||
doubao 豆包 Seedream(火山方舟)—— 主体参考语义,与通义共用装配
|
||
gpt gpt-image-2 / gpt-image-2-vip(RightAPI)—— /v1/images/edits 编辑语义
|
||
google nano-banana 系列(RightAPI)—— 原生主体保持语义
|
||
|
||
路由规则:provider 为主;rightapi 内再按模型名细分 gpt / google。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from . import alibaba, doubao, google, gpt
|
||
from .common import build_context, type_name
|
||
|
||
_MODULE_BY_FAMILY = {
|
||
"alibaba": alibaba,
|
||
"doubao": doubao,
|
||
"gpt": gpt,
|
||
"google": google,
|
||
}
|
||
|
||
|
||
def prompt_family(provider: str, model: str | None) -> str:
|
||
"""(provider, model) → 提示词家族名。"""
|
||
if provider == "rightapi":
|
||
if (model or "").lower().startswith("nano-banana"):
|
||
return "google"
|
||
return "gpt" # gpt-image-* 及未知中转模型默认按 edits 语义处理
|
||
if provider == "tongyi":
|
||
return "alibaba"
|
||
return "doubao" # doubao 及默认 provider
|
||
|
||
|
||
def build_prompt(provider: str, model: str | None, type_id: str, ctx: dict, style_set: int,
|
||
lang: str, extra: dict | None = None, style_prompt: str | None = None,
|
||
requirements: str | None = None) -> str:
|
||
"""按模型家族构造指定图类型的完整生图 prompt。参数含义见各家族 build_prompt。"""
|
||
module = _MODULE_BY_FAMILY[prompt_family(provider, model)]
|
||
return module.build_prompt(
|
||
type_id, ctx, style_set, lang,
|
||
extra=extra, style_prompt=style_prompt, requirements=requirements,
|
||
)
|