Реалізація системи генерації тексту по шаблону
Генерація тексту по шаблону — це створення документів, де структура фіксована, а вміст заповнюється динамічно з даних або через LLM. Комерційні пропозиції, контракти, звіти, сповіщення — мільярди документів на рік створюються саме так.
Два підходи до шаблонізації
Детерміновані шаблони (Jinja2, Word-шаблони): проста підстановка змінних. Передбачуваний результат, перевіряємий, без галюцинацій. Підходить для юридично значущих документів.
from jinja2 import Template
template = Template("""
Шановний(а) {{ client_name }},
Ваше замовлення #{{ order_id }} на суму {{ amount | format_currency }}
готове до отримання. Адреса: {{ address }}.
{% if special_note %}
Примітка: {{ special_note }}
{% endif %}
""")
text = template.render(client_name="Іван Петров", order_id="12345", ...)
LLM-базована генерація по шаблону: структура задана через промпт, LLM заповнює вміст з адаптацією до контексту. Підходить для маркетингових текстів, персоналізованих листів.
def generate_from_template(data: dict, template_type: str) -> str:
prompt = f"""Створи {template_type} на основі даних:
{json.dumps(data, ensure_ascii=False, indent=2)}
Вимоги:
- Діловий стиль
- Довжина: 3–5 абзаців
- Обов'язково згадай: {', '.join(data.keys())}"""
return llm.complete(prompt)
Гібридний підхід
Найкраще від обох: Jinja2 для структури та необхідних даних, LLM для "живих" текстових блоків:
[Заголовок: {{client_name}}, {{date}}] ← детермінований
[Вступний абзац: LLM генерує привітання адаптоване до контексту клієнта]
[Таблиця даних: {{products_table}}] ← детермінований
[Висновок: LLM генерує персоналізований заклик до дії]
[Підпис: {{manager_name}}, {{company}}] ← детермінований
Контроль якості
Валідація необхідних полів: після генерації перевіряється наявність всіх ключових даних (ім'я, сума, дата) через regex або LLM-валідацію.
Consistency check: ім'я клієнта повинно збігатися по всьому документу, суми словами та цифрами повинні збігатися.
A/B тестування шаблонів: різні варіанти відправляються різним сегментам, конверсія порівнюється.
Для production: версіонування шаблонів у Git, окремий review-процес для змін у юридичних документах.







