Prompt Transformer¶
Оптимизация и трансформация промптов для разных AI-моделей.
Возможности¶
- Расширение коротких промптов
- Оптимизация для конкретных моделей
- Стилизация (cinematic, anime, etc.)
- Перевод промптов
- Negative prompts
Использование¶
Базовое использование¶
from kit.services import PromptTransformer
transformer = PromptTransformer()
# Расширение промпта
result = await transformer.expand(
prompt="закат над морем",
style="cinematic"
)
print(result.expanded)
# "Breathtaking cinematic sunset over the ocean, golden hour lighting,
# dramatic clouds, sun rays piercing through, calm waves, 8K, ultra detailed"
print(result.negative)
# "blurry, low quality, oversaturated, cartoon, anime"
Оптимизация для моделей¶
# Для Stable Diffusion
sd_prompt = await transformer.optimize(
prompt="портрет девушки",
target="stable_diffusion"
)
# Для Midjourney
mj_prompt = await transformer.optimize(
prompt="портрет девушки",
target="midjourney"
)
# Для видео генерации
video_prompt = await transformer.optimize(
prompt="машина едет по дороге",
target="video_generation"
)
Стили¶
styles = [
"cinematic",
"anime",
"photorealistic",
"oil_painting",
"watercolor",
"3d_render",
"pixel_art",
"sketch"
]
result = await transformer.expand(
prompt="forest landscape",
style="anime"
)
# "Anime style forest landscape, vibrant colors, Studio Ghibli inspired,
# detailed foliage, magical atmosphere, soft lighting"
Перевод промптов¶
# Авто-перевод русского в английский
result = await transformer.process(
prompt="красивая девушка в парке осенью",
translate=True
)
print(result.original) # "красивая девушка в парке осенью"
print(result.translated) # "beautiful girl in autumn park"
print(result.expanded) # "Beautiful young woman in autumn park..."
Pipeline трансформаций¶
result = await transformer.pipeline(
prompt="кот",
steps=[
("translate", {}),
("expand", {"style": "photorealistic"}),
("optimize", {"target": "stable_diffusion"}),
("add_quality", {"level": "high"})
]
)
Кастомные правила¶
transformer = PromptTransformer(
rules={
"always_add": ["high quality", "detailed"],
"never_include": ["nsfw", "violent"],
"style_mappings": {
"кинематографичный": "cinematic",
"аниме": "anime style"
}
}
)
API Reference¶
PromptTransformer¶
class PromptTransformer:
def __init__(
self,
llm: BaseLLMProvider = None, # Для expand/optimize
rules: dict = None
)
async def expand(
self,
prompt: str,
style: str = None,
max_length: int = 200
) -> TransformResult
async def optimize(
self,
prompt: str,
target: str # "stable_diffusion", "midjourney", "video_generation"
) -> TransformResult
async def translate(
self,
prompt: str,
source_lang: str = "auto",
target_lang: str = "en"
) -> str
async def process(
self,
prompt: str,
translate: bool = False,
expand: bool = True,
style: str = None,
target: str = None
) -> TransformResult
async def pipeline(
self,
prompt: str,
steps: List[Tuple[str, dict]]
) -> TransformResult
def add_negative(
self,
prompt: str,
style: str = None
) -> str
TransformResult¶
@dataclass
class TransformResult:
original: str
expanded: str
negative: str = ""
translated: str = None
metadata: dict = None
Примеры из production¶
Autoshorts — генерация промптов для сцен¶
class ScenePromptGenerator:
def __init__(self):
self.transformer = PromptTransformer()
async def generate_visual_prompts(
self,
script: List[dict],
style: str = "cinematic"
) -> List[str]:
"""Генерация визуальных промптов для каждой сцены."""
prompts = []
for scene in script:
result = await self.transformer.process(
prompt=scene["visual_description"],
translate=True,
expand=True,
style=style,
target="video_generation"
)
prompts.append({
"scene_id": scene["id"],
"prompt": result.expanded,
"negative": result.negative
})
return prompts
async def style_consistency(
self,
prompts: List[str],
style: str
) -> List[str]:
"""Обеспечение визуальной согласованности."""
style_suffix = self.transformer.get_style_suffix(style)
return [
f"{prompt}, {style_suffix}, consistent style, same aesthetic"
for prompt in prompts
]
Image Generation Service¶
class ImageService:
def __init__(self):
self.transformer = PromptTransformer()
self.image_provider = StableDiffusionProvider()
async def generate(
self,
user_prompt: str,
style: str = "photorealistic"
) -> str:
# Трансформация промпта
result = await self.transformer.process(
prompt=user_prompt,
translate=True,
expand=True,
style=style,
target="stable_diffusion"
)
# Генерация изображения
image = await self.image_provider.generate(
prompt=result.expanded,
negative_prompt=result.negative
)
return image.url
Batch промпты¶
class BatchPromptProcessor:
def __init__(self):
self.transformer = PromptTransformer()
async def process_batch(
self,
prompts: List[str],
style: str
) -> List[TransformResult]:
"""Параллельная обработка множества промптов."""
tasks = [
self.transformer.process(
prompt=p,
translate=True,
style=style
)
for p in prompts
]
return await asyncio.gather(*tasks)