fix(chat): clean квартирография rendering in chat prompt v2 (#957) #1179

Merged
bot-backend merged 1 commit from fix/chat-prompt-quartirografia-957 into main 2026-06-09 10:17:12 +00:00
2 changed files with 18 additions and 1 deletions

View file

@ -48,7 +48,7 @@ _SYSTEM_BASE = PromptTemplate(
# (см. services/chat/{tools,safe_payload}.py), НЕ зашиваются в литерал промпта.
_CHAT_SYSTEM = PromptTemplate(
name="chat_system",
version=1,
version=2,
template=(
"Ты — ассистент по инвестиционному форсайт-отчёту земельного участка (РФ). "
"Отвечай на русском языке, по-деловому, нейтрально, без маркетинга и без emoji.\n\n"
@ -64,6 +64,10 @@ _CHAT_SYSTEM = PromptTemplate(
"5. Вопросы вне отчёта по участку (градостроительная документация / ПЗЗ-разрешения, "
"сравнение с другими участками, юридические заключения) — вежливо скажи, что это вне "
"области отчёта, и предложи вопросы по самому форсайту.\n"
"6. При перечислении квартирографии / сегментов указывай ТИП понятно "
"(студия, 1-к, 2-к, 3-к, евро-форматы, 80+ м²) и долю в % если она есть. "
"НЕ нумеруй порядковыми номерами и НЕ склеивай номер с типом через дефис "
"(никаких «2-1-к»); перечисляй по одному типу в строке или через запятую.\n"
"Отвечай кратко и по существу заданного вопроса."
),
)

View file

@ -29,6 +29,19 @@ def test_render_known_template() -> None:
assert "ассистент" in out
def test_chat_system_v2_has_unit_mix_formatting_rule() -> None:
"""chat_system@v2 (#957 fix): чистый рендер квартирографии, без «N-тип» склейки."""
tpl = get_template("chat_system")
assert tpl.version == 2
assert tpl.key == "chat_system@v2"
out = render("chat_system")
assert "квартирограф" in out.lower() # правило про перечисление сегментов
assert "«2-1-к»" in out # явный анти-пример (склейка номера с типом)
# ключевые жёсткие правила сохранены
assert "НИКОГДА не выдумывай" in out
assert "ВЕРБАТИМ" in out
def test_render_with_required_vars() -> None:
"""render подставляет переменные через str.format и валидирует required_vars."""
tpl = PromptTemplate(